| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- <?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-2015 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-2015 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();
|