[PHP] Zend 使用 Google Calendar API – 編輯事件
Mar 28th, 2009 by appleboy 參觀者:8,807Views 機器人:167Views
上一篇介紹了瀏覽 Google Calendar API 範圍內所有的事件,有沒有發現在 index.php 就有瀏覽單一事件的連結,我們透過 API 可以取得單一事件的 evenID,取得的方式就是透過 basename 函式:
我們可以利用 $_GET 方式讀取到 evenID 值,傳送到 event.php 來接收
1. 新增 event.php 檔案,寫入開頭:
include('config.inc.php');
/*
* 首頁傳來的 event id 值
*/
$eventId = ( isset($_POST['id']) ) ? $_POST['id'] : $_GET['id'];
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($googleAccount, $googlePassword, $service);
/*
* 讀取單一事件資料
*/
$eventEntry = getEvent($client, $eventId);
/*
* 讀取單一事件地點
*/
foreach ($eventEntry->where as $where) {
$whereValue = $where->valueString;//地點
}
?>
讀取單一事件可寫成一個 getEvent function 到 config.inc.php 檔案,只要傳入 even ID 直進去就可以了。
{
$gdataCal = new Zend_Gdata_Calendar($client);
$query = $gdataCal->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');
$query->setEvent($eventId);
try {
$eventEntry = $gdataCal->getCalendarEventEntry($query);
return $eventEntry;
} catch (Zend_Gdata_App_Exception $e) {
var_dump($e);
return null;
}
}
2. 編輯事件表格:
標題:<input name="title" type="text" id="title" size="20" value="<?=$eventEntry->title->text;?>"><br />
地點:<input name="where" type="text" id="title" size="20" value="<?=$whereValue;?>"><br />
內容:<textarea name="content" cols="60" rows="5" id="content" /><?=$eventEntry->content->text;?></textarea><br />
<input type="submit" name="Submit" value="修改資料"><input name="id" type="hidden" id="" value="<?=basename($eventEntry->id->text)?>" size="6">
</form>
必須將 event id 寫入 hidden 裡面,傳送到 edit.php
3. 顯示單一事件:
echo "<h2>" . $eventEntry->title->text . "</h2>\n";
echo "<ul>\n";
echo "\t<li><b>內容:</b>".nl2br($eventEntry->content->text)."</li>\n";
foreach ($eventEntry->where as $where)
{
echo "\t<li><b>地點:</b>" . $where->valueString . "</li>\n";//地點
}
foreach ($eventEntry->when as $when)
{
echo "\t<li><b>開始時間:</b>" . $when->startTime . "</li>\n";
echo "\t<li><b>結束時間:</b>" . $when->endTime . "</li>\n";
}
echo "\t<li><b>事件ID:</b>".basename($eventEntry->id->text)."</li>\n";
echo "</ul>\n";
?>
當我們編輯好,送出到 edit.php 頁面,就可以利用 updateEvent function 來達到更新資料,官網上面只有更新 title,我加入了地點跟 content 內容更新,這樣會比較實用,程式碼如下:
{
$gdataCal = new Zend_Gdata_Calendar($client);
if ($eventOld = getEvent($client, $eventId)) {
echo "Old title: " . $eventOld->title->text . "<br />";
$eventOld->title = $gdataCal->newTitle($newTitle);
$eventOld->where = array($gdataCal->newWhere($where));
$eventOld->content = $gdataCal->newContent($desc);
try {
$eventOld->save();
} catch (Zend_Gdata_App_Exception $e) {
var_dump($e);
return null;
}
$eventNew = getEvent($client, $eventId);
echo "New title: " . $eventNew->title->text . "<br />";
return $eventNew;
} else {
return null;
}
}
最後把 event.php 檔案,跟 edit.php 檔案程式碼寫在下面,有需要用到的可以拿去用。
event.php:
include('config.inc.php');
/*
* 首頁傳來的 event id 值
*/
$eventId = ( isset($_POST['id']) ) ? $_POST['id'] : $_GET['id'];
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($googleAccount, $googlePassword, $service);
/*
* 讀取單一事件資料
*/
$eventEntry = getEvent($client, $eventId);
/*
* 讀取單一事件地點
*/
foreach ($eventEntry->where as $where) {
$whereValue = $where->valueString;//地點
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>資策會 Appleboy 讀取Google 行事曆 :: <?=$eventEntry->title->text?></title>
</head>
<body>
[<a href="./">上一頁</a>] [<a href="delete.php?id=<?=basename($eventEntry->id->text)?>">刪除</a>]
<div>
<?
?>
<form action="edit.php" method="post" name="GClab" id="GClab">
標題:<input name="title" type="text" id="title" size="20" value="<?=$eventEntry->title->text;?>"><br />
地點:<input name="where" type="text" id="title" size="20" value="<?=$whereValue;?>"><br />
內容:<textarea name="content" cols="60" rows="5" id="content" /><?=$eventEntry->content->text;?></textarea><br />
<input type="submit" name="Submit" value="修改資料"><input name="id" type="hidden" id="endTime" value="<?=basename($eventEntry->id->text)?>" size="6">
</form>
</div>
<hr />
<?php
echo "<h2>" . $eventEntry->title->text . "</h2>\n";
echo "<ul>\n";
echo "\t<li><b>內容:</b>".nl2br($eventEntry->content->text)."</li>\n";
foreach ($eventEntry->where as $where)
{
echo "\t<li><b>地點:</b>" . $where->valueString . "</li>\n";//地點
}
foreach ($eventEntry->when as $when)
{
echo "\t<li><b>開始時間:</b>" . $when->startTime . "</li>\n";
echo "\t<li><b>結束時間:</b>" . $when->endTime . "</li>\n";
}
echo "\t<li><b>事件ID:</b>".basename($eventEntry->id->text)."</li>\n";
echo "</ul>\n";
?>
</body>
</html>
edit.php 程式碼:
include('config.inc.php');
$eventId = ( isset($_POST['id']) ) ? $_POST['id'] : $_GET['id'];
$newTitle = ( isset($_POST['title']) ) ? $_POST['title'] : $_GET['title'];
$newWhere = ( isset($_POST['where']) ) ? $_POST['where'] : $_GET['where'];
$newContent = ( isset($_POST['content']) ) ? $_POST['content'] : $_GET['content'];
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($googleAccount, $googlePassword, $service);
updateEvent ($client, $eventId, $newTitle, $newWhere, $newContent);
echo "觀看內容:<a href='event.php?id=".$eventId."'>".$newTitle."</a>";
?>
上一篇:[PHP] Zend 使用 Google Calendar API – 瀏覽事件
下一篇:[PHP] Zend 使用 Google Calendar API – 新增、刪除事件 – END

[...] « [PHP] Zend 使用 Google Calendar API – 環境建立架設 [PHP] Zend 使用 Google Calendar API – 編輯事件 [...]
[...] Comments « [PHP] Zend 使用 Google Calendar API – 編輯事件 [...]
您好:
請問要使用 Google Calendar API,對每一個事件是不是都要有一組 Google Account/Password?(依前一篇文章我想應該是)
所以如果我想要做一個 Calendar 網站給不同的群體使用,比如說幫實驗室A寫一個共用的Seminar Calendar,又幫實驗室B寫一個共用的Seminar Calendar,是不是需要(手動)申請不同的Google Accounts?
我在想如果能寫一個程式(平台)給團體可以共用的專屬 Calendar,那應該滿好用的。
不過如果每一個 Calendar都要申請一個 Google Account,那就比較麻煩了。
不知道我的理解有沒有錯?或其實沒有這麼麻煩?
感謝!