cacert-testmgr/external/ZendFramework-1.9.5/demos/Zend/Gdata/Spreadsheet-ClientLogin.php
Markus Warg 8398c9048d initially import ZendFramework-1.9.5 into repository
code was modified slightly, so the code differs from the original downloadable 1.9.5 version
2010-03-31 10:12:32 +02:00

454 lines
13 KiB
PHP

<?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-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/**
* @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_Spreadsheets
*/
Zend_Loader::loadClass('Zend_Gdata_Spreadsheets');
/**
* @see Zend_Gdata_App_AuthException
*/
Zend_Loader::loadClass('Zend_Gdata_App_AuthException');
/**
* @see Zend_Http_Client
*/
Zend_Loader::loadClass('Zend_Http_Client');
/**
* SimpleCRUD
*
* @category Zend
* @package Zend_Gdata
* @subpackage Demos
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class SimpleCRUD
{
/**
* Constructor
*
* @param string $email
* @param string $password
* @return void
*/
public function __construct($email, $password)
{
try {
$client = Zend_Gdata_ClientLogin::getHttpClient($email, $password,
Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME);
} catch (Zend_Gdata_App_AuthException $ae) {
exit("Error: ". $ae->getMessage() ."\nCredentials provided were email: [$email] and password [$password].\n");
}
$this->gdClient = new Zend_Gdata_Spreadsheets($client);
$this->currKey = '';
$this->currWkshtId = '';
$this->listFeed = '';
$this->rowCount = 0;
$this->columnCount = 0;
}
/**
* promptForSpreadsheet
*
* @return void
*/
public function promptForSpreadsheet()
{
$feed = $this->gdClient->getSpreadsheetFeed();
print "== Available Spreadsheets ==\n";
$this->printFeed($feed);
$input = getInput("\nSelection");
$currKey = explode('/', $feed->entries[$input]->id->text);
$this->currKey = $currKey[5];
}
/**
* promptForWorksheet
*
* @return void
*/
public function promptForWorksheet()
{
$query = new Zend_Gdata_Spreadsheets_DocumentQuery();
$query->setSpreadsheetKey($this->currKey);
$feed = $this->gdClient->getWorksheetFeed($query);
print "== Available Worksheets ==\n";
$this->printFeed($feed);
$input = getInput("\nSelection");
$currWkshtId = explode('/', $feed->entries[$input]->id->text);
$this->currWkshtId = $currWkshtId[8];
}
/**
* promptForCellsAction
*
* @return void
*/
public function promptForCellsAction()
{
echo "Pick a command:\n";
echo "\ndump -- dump cell information\nupdate {row} {col} {input_value} -- update cell information\n";
$input = getInput('Command');
$command = explode(' ', $input);
if ($command[0] == 'dump') {
$this->cellsGetAction();
} else if (($command[0] == 'update') && (count($command) > 2)) {
$this->getRowAndColumnCount();
if (count($command) == 4) {
$this->cellsUpdateAction($command[1], $command[2], $command[3]);
} elseif (count($command) > 4) {
$newValue = implode(' ', array_slice($command,3));
$this->cellsUpdateAction($command[1], $command[2], $newValue);
} else {
$this->cellsUpdateAction($command[1], $command[2], '');
}
} else {
$this->invalidCommandError($input);
}
}
/**
* promptToResize
*
* @param integer $newRowCount
* @param integer $newColumnCount
* @return boolean
*/
public function promptToResize($newRowCount, $newColumnCount) {
$input = getInput('Would you like to resize the worksheet? [yes | no]');
if ($input == 'yes') {
return $this->resizeWorksheet($newRowCount, $newColumnCount);
} else {
return false;
}
}
/**
* resizeWorksheet
*
* @param integer $newRowCount
* @param integer $newColumnCount
* @return boolean
*/
public function resizeWorksheet($newRowCount, $newColumnCount) {
$query = new Zend_Gdata_Spreadsheets_DocumentQuery();
$query->setSpreadsheetKey($this->currKey);
$query->setWorksheetId($this->currWkshtId);
$currentWorksheet = $this->gdClient->getWorksheetEntry($query);
$currentWorksheet = $currentWorksheet->setRowCount(new Zend_Gdata_Spreadsheets_Extension_RowCount($newRowCount));
$currentWorksheet = $currentWorksheet->setColumnCount(new Zend_Gdata_Spreadsheets_Extension_ColCount($newColumnCount));
$currentWorksheet->save();
$this->getRowAndColumnCount();
print "Worksheet has been resized to $this->rowCount rows and $this->columnCount columns.\n";
return true;
}
/**
* promptForListAction
*
* @return void
*/
public function promptForListAction()
{
echo "\n== Options ==\n".
"dump -- dump row information\n".
"insert {row_data} -- insert data in the next available cell in a given column (example: insert column_header=content)\n".
"update {row_index} {row_data} -- update data in the row provided (example: update row-number column-header=newdata\n".
"delete {row_index} -- delete a row\n\n";
$input = getInput('Command');
$command = explode(' ', $input);
if ($command[0] == 'dump') {
$this->listGetAction();
} else if ($command[0] == 'insert') {
$this->listInsertAction(array_slice($command, 1));
} else if ($command[0] == 'update') {
$this->listUpdateAction($command[1], array_slice($command, 2));
} else if ($command[0] == 'delete') {
$this->listDeleteAction($command[1]);
} else {
$this->invalidCommandError($input);
}
}
/**
* cellsGetAction
*
* @return void
*/
public function cellsGetAction()
{
$query = new Zend_Gdata_Spreadsheets_CellQuery();
$query->setSpreadsheetKey($this->currKey);
$query->setWorksheetId($this->currWkshtId);
$feed = $this->gdClient->getCellFeed($query);
$this->printFeed($feed);
}
/**
* cellsUpdateAction
*
* @param integer $row
* @param integer $col
* @param string $inputValue
* @return void
*/
public function cellsUpdateAction($row, $col, $inputValue)
{
if (($row > $this->rowCount) || ($col > $this->columnCount)) {
print "Current worksheet only has $this->rowCount rows and $this->columnCount columns.\n";
if (!$this->promptToResize($row, $col)) {
return;
}
}
$entry = $this->gdClient->updateCell($row, $col, $inputValue,
$this->currKey, $this->currWkshtId);
if ($entry instanceof Zend_Gdata_Spreadsheets_CellEntry) {
echo "Success!\n";
}
}
/**
* listGetAction
*
* @return void
*/
public function listGetAction()
{
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($this->currKey);
$query->setWorksheetId($this->currWkshtId);
$this->listFeed = $this->gdClient->getListFeed($query);
print "entry id | row-content in column A | column-header: cell-content\n".
"Please note: The 'dump' command on the list feed only dumps data until the first blank row is encountered.\n\n";
$this->printFeed($this->listFeed);
print "\n";
}
/**
* listInsertAction
*
* @param mixed $rowData
* @return void
*/
public function listInsertAction($rowData)
{
$rowArray = $this->stringToArray($rowData);
$entry = $this->gdClient->insertRow($rowArray, $this->currKey, $this->currWkshtId);
if ($entry instanceof Zend_Gdata_Spreadsheets_ListEntry) {
foreach ($rowArray as $column_header => $value) {
echo "Success! Inserted '$value' in column '$column_header' at row ". substr($entry->getTitle()->getText(), 5) ."\n";
}
}
}
/**
* listUpdateAction
*
* @param integer $index
* @param mixed $rowData
* @return void
*/
public function listUpdateAction($index, $rowData)
{
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($this->currKey);
$query->setWorksheetId($this->currWkshtId);
$this->listFeed = $this->gdClient->getListFeed($query);
$rowArray = $this->stringToArray($rowData);
$entry = $this->gdClient->updateRow($this->listFeed->entries[$index], $rowArray);
if ($entry instanceof Zend_Gdata_Spreadsheets_ListEntry) {
echo "Success!\n"; $response = $entry->save();
}
}
/**
* listDeleteAction
*
* @param integer $index
* @return void
*/
public function listDeleteAction($index)
{
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($this->currKey);
$query->setWorksheetId($this->currWkshtId);
$this->listFeed = $this->gdClient->getListFeed($query);
$this->gdClient->deleteRow($this->listFeed->entries[$index]);
}
/**
* stringToArray
*
* @param string $rowData
* @return array
*/
public function stringToArray($rowData)
{
$arr = array();
foreach ($rowData as $row) {
$temp = explode('=', $row);
$arr[$temp[0]] = $temp[1];
}
return $arr;
}
/**
* printFeed
*
* @param Zend_Gdata_Gbase_Feed $feed
* @return void
*/
public function printFeed($feed)
{
$i = 0;
foreach($feed->entries as $entry) {
if ($entry instanceof Zend_Gdata_Spreadsheets_CellEntry) {
print $entry->title->text .' '. $entry->content->text . "\n";
} else if ($entry instanceof Zend_Gdata_Spreadsheets_ListEntry) {
print $i .' '. $entry->title->text .' | '. $entry->content->text . "\n";
} else {
print $i .' '. $entry->title->text . "\n";
}
$i++;
}
}
/**
* getRowAndColumnCount
*
* @return void
*/
public function getRowAndColumnCount()
{
$query = new Zend_Gdata_Spreadsheets_CellQuery();
$query->setSpreadsheetKey($this->currKey);
$query->setWorksheetId($this->currWkshtId);
$feed = $this->gdClient->getCellFeed($query);
if ($feed instanceOf Zend_Gdata_Spreadsheets_CellFeed) {
$this->rowCount = $feed->getRowCount();
$this->columnCount = $feed->getColumnCount();
}
}
/**
* invalidCommandError
*
* @param string $input
* @return void
*/
public function invalidCommandError($input)
{
echo 'Invalid input: '.$input."\n";
}
/**
* promtForFeedtype
*
* @return void
*/
public function promptForFeedtype() {
$input = getInput('Select to use either the cell or the list feed [cells or list]');
if ($input == 'cells') {
while(1) {
$this->promptForCellsAction();
}
} else if ($input == 'list') {
while(1) {
$this->promptForListAction();
}
} else {
print "Invalid input. Please try again.\n";
$this->promptForFeedtype();
}
}
/**
* run
*
* @return void
*/
public function run()
{
$this->promptForSpreadsheet();
$this->promptForWorksheet();
$this->promptForFeedtype();
}
}
/**
* getInput
*
* @param string $text
* @return string
*/
function getInput($text)
{
echo $text.': ';
return trim(fgets(STDIN));
}
$email = null;
$pass = null;
// process command line options
foreach ($argv as $argument) {
$argParts = explode('=', $argument);
if ($argParts[0] == '--email') {
$email = $argParts[1];
} else if ($argParts[0] == '--pass') {
$pass = $argParts[1];
}
}
if (($email == null) || ($pass == null)) {
$email = getInput("Please enter your email address [example: username@gmail.com]");
$pass = getInput("Please enter your password [example: mypassword]");
}
$sample = new SimpleCRUD($email, $pass);
$sample->run();