首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

在 PHP 应用程序中集成 Google Calendar(4)

在 PHP 应用程序中集成 Google Calendar(4)

添加新事件通过客户机应用程序显示事件已经实现。那么如何添加新事件呢?
实际情况并没有看到的那么复杂。通过 Calendar Data API 很容易向日程表添加新事件。创建一个 XML 编码的新事件 <entry> 并 POST 给日程表提要就行了。 给出了一个例子:
清单 4. 新事件的 entry 例子
1
2
3
4
5
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom">
  <atom:title type="text">Dinner with the gang</atom:title>
  <gd:when xmlns:gd="http://schemas.google.com/g/2005"
  startTime="2008-06-23T18:00:00+05:30" endTime="2008-06-23T20:00:00+05:30"/>
</atom:entry>




如果使用 Zend 库就更简单了,只需要调用 insertEvent() 方法,该方法将创建  所示的 XML 并提交给日程表提要。 提供了一个 Web 表单让用户输入事件的有关信息,然后使用 Zend 库构造相应的 XML 并保存到日程表中:
清单 5. 通过表单添加新事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Adding calendar events</title>
    <style>
    body {
      font-family: Verdana;      
    }
    li {
      border-bottom: solid black 1px;      
      margin: 10px;
      padding: 2px;
      width: auto;
      padding-bottom: 20px;
    }
    h2 {
      color: red;
      text-decoration: none;  
    }
    span.attr {
      font-weight: bolder;  
    }
    </style>   
  </head>
  <body>
    <h1>Add Event</h1>
    <?php if (!isset($_POST['submit'])) { ?>
    <form method="post" action="
     <?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
      Event title: <br/>
      <input name="title" type="text" size="15" /><p/>
      Start date (dd/mm/yyyy): <br/>
      <input name="sdate_dd" type="text" size="2" />
      <input name="sdate_mm" type="text" size="2" />
      <input name="sdate_yy" type="text" size="4" /><p/>
      Start time (hh:mm): <br/>
      <input name="sdate_hh" type="text" size="2" />
      <input name="sdate_ii" type="text" size="2" /><br/>
      End  date (dd/mm/yyyy): <br/>
      <input name="edate_dd" type="text" size="2" />
      <input name="edate_mm" type="text" size="2" />
      <input name="edate_yy" type="text" size="4" /><p/>
      End  time (hh:mm): <br/>
      <input name="edate_hh" type="text" size="2" />
      <input name="edate_ii" type="text" size="2" /><br/>
      <input name="submit" type="submit" value="Save" />      
    </form>
    <?php
    } else {
      // load classes
      require_once 'Zend/Loader.php';
      Zend_Loader::loadClass('Zend_Gdata');
      Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
      Zend_Loader::loadClass('Zend_Gdata_Calendar');
      Zend_Loader::loadClass('Zend_Http_Client');
      
      // connect to service
      $gcal = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
      $user = "username@gmail.com";
      $pass = "pass";
      $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $gcal);
      $gcal = new Zend_Gdata_Calendar($client);
      
      // validate input
      if (empty($_POST['title'])) {
        die('ERROR: Missing title');
      }
      
      if (!checkdate($_POST['sdate_mm'], $_POST['sdate_dd'], $_POST['sdate_yy'])) {
        die('ERROR: Invalid start date/time');        
      }
      
      if (!checkdate($_POST['edate_mm'], $_POST['edate_dd'], $_POST['edate_yy'])) {
        die('ERROR: Invalid end date/time');        
      }
      
      $title = htmlentities($_POST['title']);
      $start = date(DATE_ATOM, mktime($_POST['sdate_hh'], $_POST['sdate_ii'],
       0, $_POST['sdate_mm'], $_POST['sdate_dd'], $_POST['sdate_yy']));
      $end = date(DATE_ATOM, mktime($_POST['edate_hh'], $_POST['edate_ii'],
       0, $_POST['edate_mm'], $_POST['edate_dd'], $_POST['edate_yy']));

      // construct event object
      // save to server      
      try {
        $event = $gcal->newEventEntry();        
        $event->title = $gcal->newTitle($title);        
        $when = $gcal->newWhen();
        $when->startTime = $start;
        $when->endTime = $end;
        $event->when = array($when);        
        $gcal->insertEvent($event);   
      } catch (Zend_Gdata_App_Exception $e) {
        echo "Error: " . $e->getResponse();
      }
      echo 'Event successfully added!';      
    }
    ?>
  </body>
</html>




实际上由两部分组成:Web 表单和处理表单所提交数据的 PHP 代码。表单如  所示:
图 3. 添加新事件的 Web 表单用户在表单中输入详细的事件信息并提交后,脚本第二部分派上用场了。脚本首先初始化开启 Calendar Data API 验证连接的 HTTP 客户机。然后验证 Web 表单的输入,检查事件的开始和结束日期,然后将日期转化成 RFC 3339 格式。
如果输入的数据有效,则创建新的 EventEntry 对象。该对象表示将插入到日程表的新事件,并公开了 newTitle() 和 newWhen() 方法,用于设置事件的标题和始末日期。设置完这些对象属性后,insertEvent() 方法将事件保存到 Google 服务器。添加的事件应该立即可以在日程表中看到。
显示了成功添加新事件后的结果:
图 4. 添加新事件的结果
返回列表