/demos/Zend/Gdata/Gapps.php
PHP | 1992 lines | 1502 code | 121 blank | 369 comment | 183 complexity | 29cd901faa83329e30bd85e22be50995 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0, MIT
- <?php
- /**
- * Zend Framework
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://framework.zend.com/license/new-bsd
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@zend.com so we can send you a copy immediately.
- *
- * @category Zend
- * @package Zend_Gdata
- * @subpackage Demos
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
- /**
- * PHP sample code for the Google Calendar data API. Utilizes the
- * Zend Framework Gdata components to communicate with the Google API.
- *
- * Requires the Zend Framework Gdata components and PHP >= 5.1.4
- *
- * You can run this sample both from the command line (CLI) and also
- * from a web browser. Run this script without any command line options to
- * see usage, eg:
- * /usr/bin/env php Gapps.php
- *
- * More information on the Command Line Interface is available at:
- * http://www.php.net/features.commandline
- *
- * When running this code from a web browser, be sure to fill in your
- * Google Apps credentials below and choose a password for authentication
- * via the web browser.
- *
- * Since this is a demo, only minimal error handling and input validation
- * are performed. THIS CODE IS FOR DEMONSTRATION PURPOSES ONLY. NOT TO BE
- * USED IN A PRODUCTION ENVIRONMENT.
- *
- * NOTE: You must ensure that Zend Framework is in your PHP include
- * path. You can do this via php.ini settings, or by modifying the
- * argument to set_include_path in the code below.
- */
- // ************************ BEGIN WWW CONFIGURATION ************************
- /**
- * Google Apps username. This is the username (without domain) used
- * to administer your Google Apps account. This value is only
- * used when accessing this demo on a web server.
- *
- * For example, if you login to Google Apps as 'foo@bar.com.inavlid',
- * your username is 'foo'.
- */
- define('GAPPS_USERNAME', 'username');
- /**
- * Google Apps domain. This is the domain associated with your
- * Google Apps account. This value is only used when accessing this demo
- * on a web server.
- *
- * For example, if you login to Google Apps as foo@bar.com.inavlid,
- * your domain is 'bar.com.invalid'.
- */
- define('GAPPS_DOMAIN', 'example.com.invalid');
- /**
- * Google Apps password. This is the password associated with the above
- * username. This value is only used when accessing this demo on a
- * web server.
- */
- define('GAPPS_PASSWORD', 'your password here');
- /**
- * Login password. This password is used to protect your account from
- * unauthorized access when running this demo on a web server.
- *
- * If this field is blank, all access will be denied. A blank password
- * field is not the same as no password (which is disallowed for
- * security reasons).
- *
- * NOTE: While we could technically just ask the user for their Google Apps
- * credentials, the ClientLogin API is not intended for direct use by
- * web applications. If you are the only user of the application, this
- * is fine--- but you should not ask other users to enter their
- * credentials via your web application.
- */
- define('LOGIN_PASSWORD', '');
- // ************************* END WWW CONFIGURATION *************************
- /**
- * @see Zend_Loader
- */
- require_once 'Zend/Loader.php';
- /**
- * @see Zend_Gdata
- */
- Zend_Loader::loadClass('Zend_Gdata');
- /**
- * @see Zend_Gdata_ClientLogin
- */
- Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
- /**
- * @see Zend_Gdata_Gapps
- */
- Zend_Loader::loadClass('Zend_Gdata_Gapps');
- /**
- * Returns a HTTP client object with the appropriate headers for communicating
- * with Google using the ClientLogin credentials supplied.
- *
- * @param string $user The username, in e-mail address format, to authenticate
- * @param string $pass The password for the user specified
- * @return Zend_Http_Client
- */
- function getClientLoginHttpClient($user, $pass)
- {
- $service = Zend_Gdata_Gapps::AUTH_SERVICE_NAME;
- $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
- return $client;
- }
- /**
- * Creates a new user for the current domain. The user will be created
- * without admin privileges.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The desired username for the user.
- * @param string $givenName The given name for the user.
- * @param string $familyName The family name for the user.
- * @param string $password The plaintext password for the user.
- * @return void
- */
- function createUser($gapps, $html, $username, $givenName, $familyName,
- $password)
- {
- if ($html) {echo "<h2>Create User</h2>\n";}
- $gapps->createUser($username, $givenName, $familyName,
- $password);
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Retrieves a user for the current domain by username. Information about
- * that user is then output.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The desired username for the user.
- * @return void
- */
- function retrieveUser($gapps, $html, $username)
- {
- if ($html) {echo "<h2>User Information</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($html) {echo '<p>';}
- if ($user !== null) {
- echo ' Username: ' . $user->login->username;
- if ($html) {echo '<br />';}
- echo "\n";
- echo ' Given Name: ';
- if ($html) {
- echo htmlspecialchars($user->name->givenName);
- } else {
- echo $user->name->givenName;
- }
- if ($html) {echo '<br />';}
- echo "\n";
- echo ' Family Name: ';
- if ($html) {
- echo htmlspecialchars($user->name->familyName);
- } else {
- echo $user->name->familyName;
- }
- if ($html) {echo '<br />';}
- echo "\n";
- echo ' Suspended: ' . ($user->login->suspended ? 'Yes' : 'No');
- if ($html) {echo '<br />';}
- echo "\n";
- echo ' Admin: ' . ($user->login->admin ? 'Yes' : 'No');
- if ($html) {echo '<br />';}
- echo "\n";
- echo ' Must Change Password: ' .
- ($user->login->changePasswordAtNextLogin ? 'Yes' : 'No');
- if ($html) {echo '<br />';}
- echo "\n";
- echo ' Has Agreed To Terms: ' .
- ($user->login->agreedToTerms ? 'Yes' : 'No');
- } else {
- echo 'Error: Specified user not found.';
- }
- if ($html) {echo '</p>';}
- echo "\n";
- }
- /**
- * Retrieves the list of users for the current domain and outputs
- * that list.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @return void
- */
- function retrieveAllUsers($gapps, $html)
- {
- if ($html) {echo "<h2>Registered Users</h2>\n";}
- $feed = $gapps->retrieveAllUsers();
- if ($html) {echo "<ul>\n";}
- foreach ($feed as $user) {
- if ($html) {
- echo " <li>";
- } else {
- echo " * ";
- }
- echo $user->login->username . ' (';
- if ($html) {
- echo htmlspecialchars($user->name->givenName . ' ' .
- $user->name->familyName);
- } else {
- echo $user->name->givenName . ' ' . $user->name->familyName;
- }
- echo ')';
- if ($html) {echo '</li>';}
- echo "\n";
- }
- if ($html) {echo "</ul>\n";}
- }
- /**
- * Change the name for an existing user.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be updated
- * @param string $newGivenName The new given name for the user.
- * @param string $newFamilyName The new family name for the user.
- * @return void
- */
- function updateUserName($gapps, $html, $username, $newGivenName, $newFamilyName)
- {
- if ($html) {echo "<h2>Update User Name</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($user !== null) {
- $user->name->givenName = $newGivenName;
- $user->name->familyName = $newFamilyName;
- $user->save();
- } else {
- if ($html) {echo '<p>';}
- echo 'Error: Specified user not found.';
- if ($html) {echo '</p>';}
- echo "\n";
- }
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Change the password for an existing user.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be updated
- * @param string $newPassword The new password for the user.
- * @return void
- */
- function updateUserPassword($gapps, $html, $username, $newPassword)
- {
- if ($html) {echo "<h2>Update User Password</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($user !== null) {
- $user->login->password = $newPassword;
- $user->save();
- } else {
- if ($html) {echo '<p>';}
- echo 'Error: Specified user not found.';
- if ($html) {echo '</p>';}
- echo "\n";
- }
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Suspend a given user. The user will not be able to login until restored.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be updated.
- * @return void
- */
- function suspendUser($gapps, $html, $username)
- {
- if ($html) {echo "<h2>Suspend User</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($user !== null) {
- $user->login->suspended = true;
- $user->save();
- } else {
- if ($html) {echo '<p>';}
- echo 'Error: Specified user not found.';
- if ($html) {echo '</p>';}
- echo "\n";
- }
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Restore a given user after being suspended.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be updated.
- * @return void
- */
- function restoreUser($gapps, $html, $username)
- {
- if ($html) {echo "<h2>Restore User</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($user !== null) {
- $user->login->suspended = false;
- $user->save();
- } else {
- if ($html) {echo '<p>';}
- echo 'Error: Specified user not found.';
- if ($html) {echo '</p>';}
- echo "\n";
- }
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Give a user admin rights.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be updated.
- * @return void
- */
- function giveUserAdminRights($gapps, $html, $username)
- {
- if ($html) {echo "<h2>Grant Administrative Rights</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($user !== null) {
- $user->login->admin = true;
- $user->save();
- } else {
- if ($html) {echo '<p>';}
- echo 'Error: Specified user not found.';
- if ($html) {echo '</p>';}
- echo "\n";
- }
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Revoke a user's admin rights.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be updated.
- * @return void
- */
- function revokeUserAdminRights($gapps, $html, $username)
- {
- if ($html) {echo "<h2>Revoke Administrative Rights</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($user !== null) {
- $user->login->admin = false;
- $user->save();
- } else {
- if ($html) {echo '<p>';}
- echo 'Error: Specified user not found.';
- if ($html) {echo '</p>';}
- echo "\n";
- }
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Force a user to change their password at next login.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be updated.
- * @return void
- */
- function setUserMustChangePassword($gapps, $html, $username)
- {
- if ($html) {echo "<h2>Force User To Change Password</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($user !== null) {
- $user->login->changePasswordAtNextLogin = true;
- $user->save();
- } else {
- if ($html) {echo '<p>';}
- echo 'Error: Specified user not found.';
- if ($html) {echo '</p>';}
- echo "\n";
- }
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Undo forcing a user to change their password at next login.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be updated.
- * @return void
- */
- function clearUserMustChangePassword($gapps, $html, $username)
- {
- if ($html) {echo "<h2>Undo Force User To Change Password</h2>\n";}
- $user = $gapps->retrieveUser($username);
- if ($user !== null) {
- $user->login->changePasswordAtNextLogin = false;
- $user->save();
- } else {
- if ($html) {echo '<p>';}
- echo 'Error: Specified user not found.';
- if ($html) {echo '</p>';}
- echo "\n";
- }
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Delete the user who owns a given username.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username which should be deleted.
- * @return void
- */
- function deleteUser($gapps, $html, $username)
- {
- if ($html) {echo "<h2>Delete User</h2>\n";}
- $gapps->deleteUser($username);
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Create a new nickname.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username to which the nickname should be assigned.
- * @param string $nickname The name of the nickname to be created.
- * @return void
- */
- function createNickname($gapps, $html, $username, $nickname)
- {
- if ($html) {echo "<h2>Create Nickname</h2>\n";}
- $gapps->createNickname($username, $nickname);
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Retrieve a specified nickname and output its ownership information.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $nickname The name of the nickname to be retrieved.
- * @return void
- */
- function retrieveNickname($gapps, $html, $nickname)
- {
- if ($html) {echo "<h2>Nickname Information</h2>\n";}
- $nickname = $gapps->retrieveNickname($nickname);
- if ($html) {echo '<p>';}
- if ($nickname !== null) {
- echo ' Nickname: ' . $nickname->nickname->name;
- if ($html) {echo '<br />';}
- echo "\n";
- echo ' Owner: ' . $nickname->login->username;
- } else {
- echo 'Error: Specified nickname not found.';
- }
- if ($html) {echo '</p>';}
- echo "\n";
- }
- /**
- * Outputs all nicknames owned by a specific username.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $username The username whose nicknames should be displayed.
- * @return void
- */
- function retrieveNicknames($gapps, $html, $username)
- {
- if ($html) {echo "<h2>Registered Nicknames For {$username}</h2>\n";}
- $feed = $gapps->retrieveNicknames($username);
- if ($html) {echo "<ul>\n";}
- foreach ($feed as $nickname) {
- if ($html) {
- echo " <li>";
- } else {
- echo " * ";
- }
- echo $nickname->nickname->name;
- if ($html) {echo '</li>';}
- echo "\n";
- }
- if ($html) {echo "</ul>\n";}
- }
- /**
- * Retrieves the list of nicknames for the current domain and outputs
- * that list.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @return void
- */
- function retrieveAllNicknames($gapps, $html)
- {
- if ($html) {echo "<h2>Registered Nicknames</h2>\n";}
- $feed = $gapps->retrieveAllNicknames();
- if ($html) {echo "<ul>\n";}
- foreach ($feed as $nickname) {
- if ($html) {
- echo " <li>";
- } else {
- echo " * ";
- }
- echo $nickname->nickname->name . ' => ' . $nickname->login->username;
- if ($html) {echo '</li>';}
- echo "\n";
- }
- if ($html) {echo "</ul>\n";}
- }
- /**
- * Delete's a specific nickname from the current domain.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $nickname The nickname that should be deleted.
- * @return void
- */
- function deleteNickname($gapps, $html, $nickname)
- {
- if ($html) {echo "<h2>Delete Nickname</h2>\n";}
- $gapps->deleteNickname($nickname);
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Create a new email list.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $emailList The name of the email list to be created.
- * @return void
- */
- function createEmailList($gapps, $html, $emailList)
- {
- if ($html) {echo "<h2>Create Email List</h2>\n";}
- $gapps->createEmailList($emailList);
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Outputs the list of email lists to which the specified address is
- * subscribed.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $recipient The email address of the recipient whose subscriptions should
- * be retrieved. Only a username is required if the recipient is a
- * member of the current domain.
- * @return void
- */
- function retrieveEmailLists($gapps, $html, $recipient)
- {
- if ($html) {echo "<h2>Email List Subscriptions For {$recipient}</h2>\n";}
- $feed = $gapps->retrieveEmailLists($recipient);
- if ($html) {echo "<ul>\n";}
- foreach ($feed as $list) {
- if ($html) {
- echo " <li>";
- } else {
- echo " * ";
- }
- echo $list->emailList->name;
- if ($html) {echo '</li>';}
- echo "\n";
- }
- if ($html) {echo "</ul>\n";}
- }
- /**
- * Outputs the list of all email lists on the current domain.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @return void
- */
- function retrieveAllEmailLists($gapps, $html)
- {
- if ($html) {echo "<h2>Registered Email Lists</h2>\n";}
- $feed = $gapps->retrieveAllEmailLists();
- if ($html) {echo "<ul>\n";}
- foreach ($feed as $list) {
- if ($html) {
- echo " <li>";
- } else {
- echo " * ";
- }
- echo $list->emailList->name;
- if ($html) {echo '</li>';}
- echo "\n";
- }
- if ($html) {echo "</ul>\n";}
- }
- /**
- * Delete's a specific email list from the current domain.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $emailList The email list that should be deleted.
- * @return void
- */
- function deleteEmailList($gapps, $html, $emailList)
- {
- if ($html) {echo "<h2>Delete Email List</h2>\n";}
- $gapps->deleteEmailList($emailList);
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Add a recipient to an existing email list.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the
- * Google Apps server.
- * @param boolean $html True if output should be formatted for display in a
- * web browser.
- * @param string $recipientAddress The address of the recipient who should be added.
- * @param string $emailList The name of the email address the recipient be added to.
- * @return void
- */
- function addRecipientToEmailList($gapps, $html, $recipientAddress,
- $emailList)
- {
- if ($html) {echo "<h2>Subscribe Recipient</h2>\n";}
- $gapps->addRecipientToEmailList($recipientAddress, $emailList);
- if ($html) {echo "<p>Done.</p>\n";}
- }
- /**
- * Outputs the list of all recipients for a given email list.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the Google
- * Apps server.
- * @param boolean $html True if output should be formatted for display in a web browser.
- * @param string $emailList The email list whose recipients should be output.
- * @return void
- */
- function retrieveAllRecipients($gapps, $html, $emailList)
- {
- if ($html) {echo "<h2>Email List Recipients For {$emailList}</h2>\n";}
- $feed = $gapps->retrieveAllRecipients($emailList);
- if ($html) {echo "<ul>\n";}
- foreach ($feed as $recipient) {
- if ($html) {
- echo " <li>";
- } else {
- echo " * ";
- }
- echo $recipient->who->email;
- if ($html) {echo '</li>';}
- echo "\n";
- }
- if ($html) {echo "</ul>\n";}
- }
- /**
- * Remove an existing recipient from an email list.
- *
- * @param Zend_Gdata_Gapps $gapps The service object to use for communicating with the
- * Google Apps server.
- * @param boolean $html True if output should be formatted for display in a
- * web browser.
- * @param string $recipientAddress The address of the recipient who should be removed.
- * @param string $emailList The email list from which the recipient should be removed.
- * @return void
- */
- function removeRecipientFromEmailList($gapps, $html, $recipientAddress,
- $emailList)
- {
- if ($html) {echo "<h2>Unsubscribe Recipient</h2>\n";}
- $gapps->removeRecipientFromEmailList($recipientAddress, $emailList);
- if ($html) {echo "<p>Done.</p>\n";}
- }
- // ************************ BEGIN CLI SPECIFIC CODE ************************
- /**
- * Display list of valid commands.
- *
- * @param string $executable The name of the current script. This is usually available as $argv[0].
- * @return void
- */
- function displayHelp($executable)
- {
- echo "Usage: php {$executable} <action> [<username>] [<password>] " .
- "[<arg1> <arg2> ...]\n\n";
- echo "Possible action values include:\n" .
- "createUser\n" .
- "retrieveUser\n" .
- "retrieveAllUsers\n" .
- "updateUserName\n" .
- "updateUserPassword\n" .
- "suspendUser\n" .
- "restoreUser\n" .
- "giveUserAdminRights\n" .
- "revokeUserAdminRights\n" .
- "setUserMustChangePassword\n" .
- "clearUserMustChangePassword\n" .
- "deleteUser\n" .
- "createNickname\n" .
- "retrieveNickname\n" .
- "retrieveNicknames\n" .
- "retrieveAllNicknames\n" .
- "deleteNickname\n" .
- "createEmailList\n" .
- "retrieveEmailLists\n" .
- "retrieveAllEmailLists\n" .
- "deleteEmailList\n" .
- "addRecipientToEmailList\n" .
- "retrieveAllRecipients\n" .
- "removeRecipientFromEmailList\n";
- }
- /**
- * Parse command line arguments and execute appropriate function when
- * running from the command line.
- *
- * If no arguments are provided, usage information will be provided.
- *
- * @param array $argv The array of command line arguments provided by PHP.
- * $argv[0] should be the current executable name or '-' if not available.
- * @param integer $argc The size of $argv.
- * @return void
- */
- function runCLIVersion($argv, $argc)
- {
- if (isset($argc) && $argc >= 2) {
- # Prepare a server connection
- if ($argc >= 5) {
- try {
- $client = getClientLoginHttpClient($argv[2] . '@' . $argv[3], $argv[4]);
- $gapps = new Zend_Gdata_Gapps($client, $argv[3]);
- } catch (Zend_Gdata_App_AuthException $e) {
- echo "Error: Unable to authenticate. Please check your credentials.\n";
- exit(1);
- }
- }
- # Dispatch arguments to the desired method
- switch ($argv[1]) {
- case 'createUser':
- if ($argc == 9) {
- createUser($gapps, false, $argv[5], $argv[6], $argv[7], $argv[8]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username> <given name> <family name> <user's password>\n\n";
- echo "This creates a new user with the given username.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe John Doe p4ssw0rd\n";
- }
- break;
- case 'retrieveUser':
- if ($argc == 6) {
- retrieveUser($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "This retrieves the user with the specified " .
- "username and displays information about that user.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'retrieveAllUsers':
- if ($argc == 5) {
- retrieveAllUsers($gapps, false);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "\n\n";
- echo "This lists all users on the current domain.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password>\n";
- }
- break;
- case 'updateUserName':
- if ($argc == 8) {
- updateUserName($gapps, false, $argv[5], $argv[6], $argv[7]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username> <new given name> <new family name>\n\n";
- echo "Renames an existing user.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe Jane Doe\n";
- }
- break;
- case 'updateUserPassword':
- if ($argc == 7) {
- updateUserPassword($gapps, false, $argv[5], $argv[6]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username> <new user password>\n\n";
- echo "Changes the password for an existing user.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe password1\n";
- }
- break;
- case 'suspendUser':
- if ($argc == 6) {
- suspendUser($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "This suspends the given user.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'restoreUser':
- if ($argc == 6) {
- restoreUser($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "This restores the given user after being suspended.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'giveUserAdminRights':
- if ($argc == 6) {
- giveUserAdminRights($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "Give a user admin rights for this domain.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'revokeUserAdminRights':
- if ($argc == 6) {
- revokeUserAdminRights($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "Remove a user's admin rights for this domain.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'setUserMustChangePassword':
- if ($argc == 6) {
- setUserMustChangePassword($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "Force a user to change their password at next login.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'clearUserMustChangePassword':
- if ($argc == 6) {
- clearUserMustChangePassword($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "Clear the flag indicating that a user must change " .
- "their password at next login.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'deleteUser':
- if ($argc == 6) {
- deleteUser($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "Delete the user who owns a given username.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'createNickname':
- if ($argc == 7) {
- createNickname($gapps, false, $argv[5], $argv[6]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username> <nickname>\n\n";
- echo "Create a new nickname for the specified user.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe johnny\n";
- }
- break;
- case 'retrieveNickname':
- if ($argc == 6) {
- retrieveNickname($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<nickname>\n\n";
- echo "Retrieve a nickname and display its ownership " .
- "information.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "johnny\n";
- }
- break;
- case 'retrieveNicknames':
- if ($argc == 6) {
- retrieveNicknames($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<user's username>\n\n";
- echo "Output all nicknames owned by a specific username.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "jdoe\n";
- }
- break;
- case 'retrieveAllNicknames':
- if ($argc == 5) {
- retrieveAllNicknames($gapps, false);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "\n\n";
- echo "Output all registered nicknames on the system.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "\n";
- }
- break;
- case 'deleteNickname':
- if ($argc == 6) {
- deleteNickname($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<nickname>\n\n";
- echo "Delete a specific nickname.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "johnny\n";
- }
- break;
- case 'createEmailList':
- if ($argc == 6) {
- createEmailList($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<email list>\n\n";
- echo "Create a new email list with the specified name.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "friends\n";
- }
- break;
- case 'retrieveEmailLists':
- if ($argc == 6) {
- retrieveEmailLists($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<recipient>\n\n";
- echo "Retrieve all email lists to which the specified " .
- "address is subscribed.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "johnny@somewhere.com.invalid\n";
- }
- break;
- case 'retrieveAllEmailLists':
- if ($argc == 5) {
- retrieveAllEmailLists($gapps, false);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "\n\n";
- echo "Retrieve a list of all email lists on the current " .
- "domain.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "\n";
- }
- break;
- case 'deleteEmailList':
- if ($argc == 6) {
- deleteEmailList($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<email list>\n\n";
- echo "Delete a specified email list.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "friends\n";
- }
- break;
- case 'addRecipientToEmailList':
- if ($argc == 7) {
- addRecipientToEmailList($gapps, false, $argv[5], $argv[6]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<recipient> <email list>\n\n";
- echo "Add a recipient to an existing email list.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "johnny@somewhere.com.invalid friends\n";
- }
- break;
- case 'retrieveAllRecipients':
- if ($argc == 6) {
- retrieveAllRecipients($gapps, false, $argv[5]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<email list>\n\n";
- echo "Retrieve all recipients for an existing email list.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "friends\n";
- }
- break;
- case 'removeRecipientFromEmailList':
- if ($argc == 7) {
- removeRecipientFromEmailList($gapps, false, $argv[5], $argv[6]);
- } else {
- echo "Usage: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "<recipient> <email list>\n\n";
- echo "Remove an existing recipient from an email list.\n";
- echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <domain> <password> " .
- "johnny@somewhere.com.invalid friends\n";
- }
- break;
- default:
- // Invalid action entered
- displayHelp($argv[0]);
- // End switch block
- }
- } else {
- // action left unspecified
- displayHelp($argv[0]);
- }
- }
- // ************************ BEGIN WWW SPECIFIC CODE ************************
- /**
- * Writes the HTML prologue for this app.
- *
- * NOTE: We would normally keep the HTML/CSS markup separate from the business
- * logic above, but have decided to include it here for simplicity of
- * having a single-file sample.
- *
- *
- * @param boolean $displayMenu (optional) If set to true, a navigation
- * menu is displayed at the top of the page. Default is true.
- * @return void
- */
- function startHTML($displayMenu = true)
- {
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title>Google Apps Provisioning API Demo</title>
- <style type="text/css" media="screen">
- body {
- font-family: Arial, Helvetica, sans-serif;
- font-size: small;
- }
- #header {
- background-color: #9cF;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- padding-left: 5px;
- height: 2.4em;
- }
- #header h1 {
- width: 49%;
- display: inline;
- float: left;
- margin: 0;
- padding: 0;
- font-size: 2em;
- }
- #header p {
- width: 49%;
- margin: 0;
- padding-right: 15px;
- float: right;
- line-height: 2.4em;
- text-align: right;
- }
- .clear {
- clear:both;
- }
- h2 {
- background-color: #ccc;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- margin-top: 1em;
- padding-left: 5px;
- }
- .error {
- color: red;
- }
- form {
- width: 500px;
- background: #ddf8cc;
- border: 1px solid #80c605;
- padding: 0 1em;
- margin: 1em auto;
- }
- .warning {
- width: 500px;
- background: #F4B5B4;
- border: 1px solid #900;
- padding: 0 1em;
- margin: 1em auto;
- }
- label {
- display: block;
- width: 130px;
- float: left;
- text-align: right;
- padding-top: 0.3em;
- padding-right: 3px;
- }
- .radio {
- margin: 0;
- padding-left: 130px;
- }
- #menuSelect {
- padding: 0;
- }
- #menuSelect li {
- display: block;
- width: 500px;
- background: #ddf8cc;
- border: 1px solid #80c605;
- margin: 1em auto;
- padding: 0;
- font-size: 1.3em;
- text-align: center;
- list-style-type: none;
- }
- #menuSelect li:hover {
- background: #c4faa2;
- }
- #menuSelect a {
- display: block;
- height: 2em;
- margin: 0px;
- padding-top: 0.75em;
- padding-bottom: -0.25em;
- text-decoration: none;
- }
- #content {
- width: 600px;
- margin: 0 auto;
- padding: 0;
- text-align: left;
- }
- </style>
- </head>
- <body>
- <div id="header">
- <h1>Google Apps API Demo</h1>
- <?php if ($displayMenu === true) { ?>
- <p><?php echo GAPPS_DOMAIN ?> | <a href="?">Main</a> | <a href="?menu=logout">Logout</a></p>
- <?php } ?>
- <div class="clear"></div>
- </div>
- <div id="content">
- <?php
- }
- /**
- * Writes the HTML epilogue for this app and exit.
- *
- * @param boolean $displayBackButton (optional) If true, displays a
- * link to go back at the bottom of the page. Defaults to false.
- * @return void
- */
- function endHTML($displayBackButton = false)
- {
- if ($displayBackButton === true) {
- echo '<a href="javascript:history.go(-1)">← Back</a>';
- }
- ?>
- </div>
- </body>
- </html>
- <?php
- exit();
- }
- /**
- * Displays a notice indicating that a login password needs to be
- * set before continuing.
- *
- * @return void
- */
- function displayPasswordNotSetNotice()
- {
- ?>
- <div class="warning">
- <h3>Almost there...</h3>
- <p>Before using this demo, you must set an application password
- to protect your account. You will also need to set your
- Google Apps credentials in order to communicate with the Google
- Apps servers.</p>
- <p>To continue, open this file in a text editor and fill
- out the information in the configuration section.</p>
- </div>
- <?php
- }
- /**
- * Displays a notice indicating that authentication to Google Apps failed.
- *
- * @return void
- */
- function displayAuthenticationFailedNotice()
- {
- ?>
- <div class="warning">
- <h3>Google Apps Authentication Failed</h3>
- <p>Authentication with the Google Apps servers failed.</p>
- <p>Please open this file in a text editor and make
- sure your credentials are correct.</p>
- </div>
- <?php
- }
- /**
- * Outputs a request to the user to enter their login password.
- *
- * @param string $errorText (optional) Error text to be displayed next to the login form.
- * @return void
- */
- function requestUserLogin($errorText = null)
- {
- ?>
- <form method="post" accept-charset="utf-8">
- <h3>Authentication Required</h3>
- <?php
- if ($errorText !== null) {
- echo '<span class="error">' . $errorText . "</span>\n";
- }
- ?>
- <p>Please enter your login password to continue.</p>
- <p><label for="password">Password: </label>
- <input type="password" name="password" value="" /></p>
- <p><strong>Notice:</strong> This application is for demonstration
- purposes only. Not for use in a production environment.</p>
- <p><input type="submit" value="Continue →"></p>
- </form>
- <?php
- }
- /**
- * Display the main menu for running in a web browser.
- *
- * @return void
- */
- function displayMenu()
- {
- ?>
- <h2>Main Menu</h2>
- <p>Welcome to the Google Apps Provisioning API demo page. Please select
- from one of the following three options to see a list of commands.</p>
- <ul id="menuSelect">
- <li><a class="menuSelect" href="?menu=user">User Maintenance Menu</a></li>
- <li><a class="menuSelect" href="?menu=nickname">Nickname Maintenance Menu</a></li>
- <li><a class="menuSelect" href="?menu=emailList">Email List Maintenance Menu</a></li>
- </ul>
- <p>Tip: You can also run this demo from the command line if your system
- has PHP CLI support enabled.</p>
- <?php
- }
- /**
- * Display the user maintenance menu for running in a web browser.
- *
- * @return void
- */
- function displayUserMenu()
- {
- ?>
- <h2>User Maintenance Menu</h2>
- <form method="post" accept-charset="utf-8">
- <h3>Create User</h3>
- <p>Create a new user with the given properties.</p>
- <p>
- <input type="hidden" name="command" value="createUser" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" /><br />
- <label for="givenName">Given Name: </label>
- <input type="text" name="givenName" value="" /><br />
- <label for="familyName">Family Name: </label>
- <input type="text" name="familyName" value="" /><br />
- <label for="pass">Password: </label>
- <input type="password" name="pass" value="" />
- </p>
- <p><input type="submit" value="Create User →"></p>
- </form>
- <form method="get" accept-charset="utf-8">
- <h3>Retrieve User</h3>
- <p>Retrieve the information for an existing user.</p>
- <p>
- <input type="hidden" name="command" value="retrieveUser" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" /><br />
- </p>
- <p><input type="submit" value="Retrieve User →"></p>
- </form>
- <form method="get" accept-charset="utf-8">
- <h3>Retrieve All Users</h3>
- <p>Retrieve the list of all users on the current domain.</p>
- <p>
- <input type="hidden" name="command" value="retrieveAllUsers" />
- </p>
- <p><input type="submit" value="Retrieve Users →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Update Name</h3>
- <p>Update the name for an existing user.</p>
- <p>
- <input type="hidden" name="command" value="updateUserName" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" /><br />
- <label for="givenName">New Given Name: </label>
- <input type="text" name="givenName" value="" /><br />
- <label for="familyName">New Family Name: </label>
- <input type="text" name="familyName" value="" /><br />
- </p>
- <p><input type="submit" value="Update User →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Update Password</h3>
- <p>Update the password for an existing user.</p>
- <p>
- <input type="hidden" name="command" value="updateUserPassword" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" /><br />
- <label for="pass">New Password: </label>
- <input type="password" name="pass" value="" /></p>
- </p>
- <p><input type="submit" value="Update User →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Suspend/Restore User</h3>
- <p>Mark an existing user as suspended or restore a suspended user.
- While suspended, the user will be prohibited from logging into
- this domain.</p>
- <p>
- <input type="hidden" name="command" value="setUserSuspended" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" />
- </p>
- <div class="radio">
- <input type="radio" name="mode" value="restore">User may log into
- this domain.</input><br />
- <input type="radio" name="mode" value="suspend" checked="true">User
- may <strong>not</strong> log into this domain.</input>
- </div>
- <p><input type="submit" value="Update User →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Issue/Revoke Admin Rights</h3>
- <p>Set whether an existing user has administrative rights for the current
- domain.</p>
- <p>
- <input type="hidden" name="command" value="setUserAdmin" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" />
- </p>
- <div class="radio">
- <input type="radio" name="mode" value="issue">User
- may administer this domain.</input><br />
- <input type="radio" name="mode" value="revoke" checked="true">User
- may <strong>not</strong> administer this domain.</input>
- </div>
- <p><input type="submit" value="Update User →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Force User To Change Password</h3>
- <p>Set whether an existing user must change their password at
- their next login.</p>
- <p>
- <input type="hidden" name="command" value="setForceChangePassword" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" />
- </p>
- <div class="radio">
- <input type="radio" name="mode" value="set">User is required to
- change their password at next login.</input><br />
- <input type="radio" name="mode" value="clear" checked="true">User is
- <strong>not</strong> required to change their password at next
- login.</input>
- </div>
- <p><input type="submit" value="Update User →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Delete User</h3>
- <p>Delete an existing user on the current domain.</p>
- <p>
- <input type="hidden" name="command" value="deleteUser" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" /><br />
- </p>
- <p><input type="submit" value="Delete User →"></p>
- </form>
- <?php
- }
- /**
- * Display the nickname maintenance menu for running in a web browser.
- *
- * @return void
- */
- function displayNicknameMenu()
- {
- ?>
- <h2>Nickname Maintenance Menu</h2>
- <form method="post" accept-charset="utf-8">
- <h3>Create Nickname</h3>
- <p>Create a nickname for an existing user.</p>
- <p>
- <input type="hidden" name="command" value="createNickname" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" /><br />
- <label for="nickname">Nickname: </label>
- <input type="text" name="nickname" value="" /><br />
- </p>
- <p><input type="submit" value="Create Nickname →"></p>
- </form>
- <form method="get" accept-charset="utf-8">
- <h3>Retrieve Nickname</h3>
- <p>Retrieve the information for an existing nickname.</p>
- <p>
- <input type="hidden" name="command" value="retrieveNickname" />
- <label for="nickname">Nickname: </label>
- <input type="text" name="nickname" value="" /><br />
- </p>
- <p><input type="submit" value="Retrieve Nickname →"></p>
- </form>
- <form method="get" accept-charset="utf-8">
- <h3>Retrieve Nicknames</h3>
- <p>Retrieve the nicknames associated with an existing username.</p>
- <p>
- <input type="hidden" name="command" value="retrieveNicknames" />
- <label for="user">Username: </label>
- <input type="text" name="user" value="" /><br />
- </p>
- <p><input type="submit" value="Retrieve Nicknames →"></p>
- </form>
- <form method="get" accept-charset="utf-8">
- <h3>Retrieve All Nicknames</h3>
- <p>Retrieve the nicknames on the current domain.</p>
- <p>
- <input type="hidden" name="command" value="retrieveAllNicknames" />
- </p>
- <p><input type="submit" value="Retrieve Nicknames →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Delete Nickname</h3>
- <p>Delete an existing nickname from the current domain.</p>
- <p>
- <input type="hidden" name="command" value="deleteNickname" />
- <label for="nickname">Nickname: </label>
- <input type="text" name="nickname" value="" /><br />
- </p>
- <p><input type="submit" value="Delete Nickname →"></p>
- </form>
- <?php
- }
- /**
- * Display the email list maintenance menu for running in a web browser.
- *
- * @return void
- */
- function displayEmailListMenu()
- {
- ?>
- <h2>Email List Maintenance Menu</h2>
- <form method="post" accept-charset="utf-8">
- <h3>Create Email List</h3>
- <p>Create a new email list for the current domain.</p>
- <p>
- <input type="hidden" name="command" value="createEmailList" />
- <label for="emailList">List Name: </label>
- <input type="text" name="emailList" value="" /><br />
- </p>
- <p><input type="submit" value="Create List →"></p>
- </form>
- <form method="get" accept-charset="utf-8">
- <h3>Retrieve Email Lists</h3>
- <p>Retrieve all email lists to which a given email address is
- subscribed.</p>
- <p>
- <input type="hidden" name="command" value="retrieveEmailLists" />
- <label for="recipient">Recipient Address: </label>
- <input type="text" name="recipient" value="" /><br />
- </p>
- <p><input type="submit" value="Retrieve Lists →"></p>
- </form>
- <form method="get" accept-charset="utf-8">
- <h3>Retrieve All Email Lists</h3>
- <p>Retrieve all email lists on the current domain.</p>
- <p>
- <input type="hidden" name="command" value="retrieveAllEmailLists" />
- </p>
- <p><input type="submit" value="Retrieve Lists →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Delete Email List</h3>
- <p>Delete an existing email list from the current domain.</p>
- <p>
- <input type="hidden" name="command" value="deleteEmailList" />
- <label for="emailList">List Name: </label>
- <input type="text" name="emailList" value="" /><br />
- </p>
- <p><input type="submit" value="Delete List →"></p>
- </form>
- <form method="post" accept-charset="utf-8">
- <h3>Add Recipient To Email List</h3>
- <p>Add or remove a recipient from an existing email list. A complete
- email address is required for recipients outside the current
- domain.</p>
- <p>
- <input type="hidden" name="command" value="modifySubscription" />
- <label for="emailList">List Name: </label>
- <input type="text" name="emailList" value="" /><br />
- <label for="recipient">Recipient Address: </label>
- <input type="text" name="recipient" value="" /><br />
- <div class="radio">
- <input type="radio" name="mode" value="subscribe">Subscribe
- recipient.</input><br />
- <input type="radio" name="mode" value="unsubscribe"
- checked="true">Unsubscribe recipient.</input>
- </div>
- </p>
- <p><input type="submit" value="Update Subscription →"></p>
- </form>
- <form method="get" accept-charset="utf-8">
- <h3>Retrieve All Recipients</h3>
- <p>Retrieve all recipients subscribed to an existing email list.</p>
- <p>
- <input type="hidden" name="command" value="retrieveAllRecipients" />
- <label for="emailList">List Name: </label>
- <input type="text" name="emailList" value="" /><br />
- </p>
- <p><input type="submit" value="Retrieve Recipients →"></p>
- </form>
- <?php
- }
- /**
- * Log the current user out of the application.
- *
- * @return void
- */
- function logout()
- {
- session_destroy();
- ?>
- <h2>Logout</h2>
- <p>Logout successful.</p>
- <ul id="menuSelect">
- <li><a class="menuSelect" href="?">Login</a></li>
- </ul>
- <?php
- }
- /**
- * Processes loading of this sample code through a web browser.
- *
- * @return void
- */
- function runWWWVersion()
- {
- session_start();
- // Note that all calls to endHTML() below end script execution!
- // Check to make sure that the user has set a password.
- $p = LOGIN_PASSWORD;
- if (empty($p)) {
- startHTML(false);
- displayPasswordNotSetNotice();
- endHTML();
- }
- // Grab any login credentials that might be waiting in the request
- if (!empty($_POST['password'])) {
- if ($_POST['password'] == LOGIN_PASSWORD) {
- $_SESSION['authenticated'] = 'true';
- } else {
- // Invalid password. Stop and display a login screen.
- startHTML(false);
- requestUserLogin("Incorrect password.");
- endHTML();
- }
- }
- // If the user isn't authenticated, display a login screen
- if (!isset($_SESSION['authenticated'])) {
- startHTML(false);
- requestUserLogin();
- endHTML();
- }
- // Try to login. If login fails, log the user out and display an
- // error message.
- try {
- $client = getClientLoginHttpClient(GAPPS_USERNAME . '@' .
- GAPPS_DOMAIN, GAPPS_PASSWORD);
- $gapps = new Zend_Gdata_Gapps($client, GAPPS_DOMAIN);
- } catch (Zend_Gdata_App_AuthException $e) {
- session_destroy();
- startHTML(false);
- displayAuthenticationFailedNotice();
- endHTML();
- }
- // Success! We're logged in.
- // First we check for commands that can be submitted either though
- // POST or GET (they don't make any changes).
- if (!empty($_REQUEST['command'])) {
- switch ($_REQUEST['command']) {
- case 'retrieveUser':
- startHTML();
- retrieveUser($gapps, true, $_REQUEST['user']);
- endHTML(true);
- case 'retrieveAllUsers':
- startHTML();
- retrieveAllUsers($gapps, true);
- endHTML(true);
- case 'retrieveNickname':
- startHTML();
- retrieveNickname($gapps, true, $_REQUEST['nickname']);
- endHTML(true);
- case 'retrieveNicknames':
- startHTML();
- retrieveNicknames($gapps, true, $_REQUEST['user']);
- endHTML(true);
- case 'retrieveAllNicknames':
- startHTML();
- retrieveAllNicknames($gapps, true);
- endHTML(true);
- case 'retrieveEmailLists':
- startHTML();
- retrieveEmailLists($gapps, true, $_REQUEST['recipient']);
- endHTML(true);
- case 'retrieveAllEmailLists':
- startHTML();
- retrieveAllEmailLists($gapps, true);
- endHTML(true);
- case 'retrieveAllRecipients':
- startHTML();
- retrieveAllRecipients($gapps, true, $_REQUEST['emailList']);
- endHTML(true);
- }
- }
- // Now we handle the potentially destructive commands, which have to
- // be submitted by POST only.
- if (!empty($_POST['command'])) {
- switch ($_POST['command']) {
- case 'createUser':
- startHTML();
- createUser($gapps, true, $_POST['user'],
- $_POST['givenName'], $_POST['familyName'],
- $_POST['pass']);
- endHTML(true);
- case 'updateUserName':
- startHTML();
- updateUserName($gapps, true, $_POST['user'],
- $_POST['givenName'], $_POST['familyName']);
- endHTML(true);
- case 'updateUserPassword':
- startHTML();
- updateUserPassword($gapps, true, $_POST['user'],
- $_POST['pass']);
- endHTML(true);
- case 'setUserSuspended':
- if ($_POST['mode'] == 'suspend') {
- startHTML();
- suspendUser($gapps, true, $_POST['user']);
- endHTML(true);
- } elseif ($_POST['mode'] == 'restore') {
- startHTML();
- restoreUser($gapps, true, $_POST['user']);
- endHTML(true);
- } else {
- header('HTTP/1.1 400 Bad Request');
- startHTML();
- echo "<h2>Invalid mode.</h2>\n";
- echo "<p>Please check your request and try again.</p>";
- endHTML(true);
- }
- case 'setUserAdmin':
- if ($_POST['mode'] == 'issue') {
- startHTML();
- giveUserAdminRights($gapps, true, $_POST['user']);
- endHTML(true);
- } elseif ($_POST['mode'] == 'revoke') {
- startHTML();
- revokeUserAdminRights($gapps, true, $_POST['user']);
- endHTML(true);
- } else {
- header('HTTP/1.1 400 Bad Request');
- startHTML();
- echo "<h2>Invalid mode.</h2>\n";
- echo "<p>Please check your request and try again.</p>";
- endHTML(true);
- }
- case 'setForceChangePassword':
- if ($_POST['mode'] == 'set') {
- startHTML();
- setUserMustChangePassword($gapps, true, $_POST['user']);
- endHTML(true);
- } elseif ($_POST['mode'] == 'clear') {
- startHTML();
- clearUserMustChangePassword($gapps, true, $_POST['user']);
- endHTML(true);
- } else {
- header('HTTP/1.1 400 Bad Request');
- startHTML();
- echo "<h2>Invalid mode.</h2>\n";
- echo "<p>Please check your request and try again.</p>";
- endHTML(true);
- }
- case 'deleteUser':
- startHTML();
- deleteUser($gapps, true, $_POST['user']);
- endHTML(true);
- case 'createNickname':
- startHTML();
- createNickname($gapps, true, $_POST['user'],
- $_POST['nickname']);
- endHTML(true);
- case 'deleteNickname':
- startHTML();
- deleteNickname($gapps, true, $_POST['nickname']);
- endHTML(true);
- case 'createEmailList':
- startHTML();
- createEmailList($gapps, true, $_POST['emailList']);
- endHTML(true);
- case 'deleteEmailList':
- startHTML();
- deleteEmailList($gapps, true, $_POST['emailList']);
- endHTML(true);
- case 'modifySubscription':
- if ($_POST['mode'] == 'subscribe') {
- startHTML();
- addRecipientToEmailList($gapps, true, $_POST['recipient'],
- $_POST['emailList']);
- endHTML(true);
- } elseif ($_POST['mode'] == 'unsubscribe') {
- startHTML();
- removeRecipientFromEmailList($gapps, true,
- $_POST['recipient'], $_POST['emailList']);
- endHTML(true);
- } else {
- header('HTTP/1.1 400 Bad Request');
- startHTML();
- echo "<h2>Invalid mode.</h2>\n";
- echo "<p>Please check your request and try again.</p>";
- endHTML(true);
- }
- }
- }
- // Check for an invalid command. If so, display an error and exit.
- if (!empty($_REQUEST['command'])) {
- header('HTTP/1.1 400 Bad Request');
- startHTML();
- echo "<h2>Invalid command.</h2>\n";
- echo "<p>Please check your request and try again.</p>";
- endHTML(true);
- }
- // If a menu parameter is available, display a submenu.
- if (!empty($_REQUEST['menu'])) {
- switch ($_REQUEST['menu']) {
- case 'user':
- startHTML();
- displayUserMenu();
- endHTML();
- case 'nickname':
- startHTML();
- displayNicknameMenu();
- endHTML();
- case 'emailList':
- startHTML();
- displayEmailListMenu();
- endHTML();
- case 'logout':
- startHTML(false);
- logout();
- endHTML();
- default:
- header('HTTP/1.1 400 Bad Request');
- startHTML();
- echo "<h2>Invalid menu selection.</h2>\n";
- echo "<p>Please check your request and try again.</p>";
- endHTML(true);
- }
- }
- // If we get this far, that means there's nothing to do. Display
- // the main menu.
- // If no command was issued and no menu was selected, display the
- // main menu.
- startHTML();
- displayMenu();
- endHTML();
- }
- // ************************** PROGRAM ENTRY POINT **************************
- if (!isset($_SERVER["HTTP_HOST"])) {
- // running through command line
- runCLIVersion($argv, $argc);
- } else {
- // running through web server
- try {
- runWWWVersion();
- } catch (Zend_Gdata_Gapps_ServiceException $e) {
- // Try to recover gracefully from a service exception.
- // The HTML prologue will have already been sent.
- echo "<p><strong>Service Error Encountered</strong></p>\n";
- echo "<pre>" . htmlspecialchars($e->__toString()) . "</pre>";
- endHTML(true);
- }
- }