<?php
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Spreadsheets');
Zend_Loader::loadClass('Zend_Http_Client');

session_start();

if(isset(
$_GET['logout'])){
# First things first, is there a logout request?
    
session_destroy();
    
showlogin();
    die();
}

if(isset(
$_POST['username'])){
# ... or are we logging in?
    
build_session($_POST['username'],$_POST['password']);
}

if(isset(
$_SESSION['username'])){
#Lazy way to dump a page header if logged in.
    
echo "<A HREF='".$_SERVER['PHP_SELF']."'>[HOME]</A> | ";
    echo 
"<A HREF='".$_SERVER['PHP_SELF']."?logout=1'>[LOGOUT]</A><P>";
    
$client=connect($_SESSION['username'],$_SESSION['password']);

    if(isset(
$_GET['key'])){
    
# Asking for a specific spreadsheet?
        
$availws=getwss($client,$_GET['key']);
    
html_list("Available Worksheets",$availws);

    }elseif (isset(
$_GET['wskey'])) {
    
# Asking for a specific sheet within the spreadsheet?
        
$sheetdata=getsheet($client,$_GET['wskey'],$_GET['ws']);
    
showsheet($sheetdata);

    }else{
    
# If not, dump a list of spreadsheets to choose from
        
$availss=getsss($client);
    
html_list("Available Spreadsheets"$availss);
    }
}else{
# If not logged in, prompt for login 
    
showlogin();
}


# Functions

function html_list($header$htmldata){
# Generic lame HTML list maker o'doom
    
echo "<H2>$header</H2>";
    foreach (
$htmldata as $url=>$title){
        echo 
"<A HREF='$url'>$title</A><br>";
    }
}

function 
showsheet($sheetdata) {
# Displays a list of cells.  Needs work.
    
foreach ($sheetdata as $cell=>$contents){
    echo 
"$cell: $contents<br>";
    }
}

function 
showlogin() {
# Renders the login prompt
    
echo "
    <FORM METHOD='POST' ACTION='"
.$_SERVER['PHP_SELF']."'>
    Username:<INPUT TYPE='TEXT' NAME='username'><br>
    Password:<INPUT TYPE='PASSWORD' NAME='password'><br>
    <INPUT TYPE='submit'>"
;


function 
build_session($username$password) {
# initializes the login session
    
$_SESSION['username']=$username;
    
$_SESSION['password']=$password;
}

function 
connect($user$password) {
# Authenticates to the mothership
    
$client Zend_Gdata_ClientLogin::getHttpClient($user$password
         
Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME);
    return 
$client;
}
   
function 
getsss($client) {
# Gets a list of spreadsheets; Returns an array.
    
$spreadsheet = new Zend_Gdata_Spreadsheets($client);
    
$feed $spreadsheet->getSpreadsheetFeed();
    foreach (
$feed->entry as $entry)
    {    
        
$id=split("/",$entry->id->text);
    
$key=$id[5];
    
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?key=$key";
    
$availss[$url]=$entry->title->text;
    }
return(
$availss);
}

function 
getsheet($client$key$ws) {
# Gets the contents of the selected worksheet
    
$spreadsheet = new Zend_Gdata_Spreadsheets($client);
    
$query = new Zend_Gdata_Spreadsheets_CellQuery();
    
$query->setSpreadsheetKey($key);
    
$query->setWorksheetId($ws);
    
$feed $spreadsheet->getCellFeed($query);

    echo 
"<PRE>";
        foreach(
$feed->entries as $entry) {
            if (
$entry instanceof Zend_Gdata_Spreadsheets_CellEntry) {
                
$sheet[$entry->title->text]=$entry->content->text;
            }
        }
return(
$sheet);
}

function 
getwss($client$key) {
# Gets worksheets for the selected spreadsheet; returns an array
$spreadsheet = new Zend_Gdata_Spreadsheets($client);
$query = new Zend_Gdata_Spreadsheets_DocumentQuery();
$query->setSpreadsheetKey($key);
$feed $spreadsheet->getWorksheetFeed($query);
    foreach (
$feed->entry as $entry)
    {    
    
$wsid=split("/",$entry->id->text);
    
$ws=$wsid[8];
    
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?wskey=$key&ws=$ws";
    
$availws[$url]=$entry->title->text;
    }
return 
$availws;
}

?>