2

我正在一個小型網站上工作。它有一個非常簡單的想法,有兩套用戶,辦公室和工作人員,都必須登錄訪問該網站(該網站是用Zend框架構建的)安全共享Google日曆

問題:我想要一個所有用戶都可以訪問的日曆。辦公室工作人員可以編輯日曆,工作人員只能查看日曆。

我真的想用戶谷歌作爲後端的日曆,由於它的靈活性:一對夫婦的上班族在路上(都有Android手機)所以日曆可以與這些用戶,他們可以共享上工作可以使用他們的移動設備來更新日曆。

我得到的問題是與工作人員共享日曆。我想將可見日曆嵌入到受保護的頁面中 - 但顯然用戶必須以谷歌用戶身份登錄才能查看日曆(它不能公開)。我曾希望我可以使用Zend_Gdata_Calendar,但看起來並不是獲取日曆視圖的簡單方法。有沒有辦法做到這一點? 是否有可能讓網站auth與谷歌並獲得嵌入日曆?

另一方面,我希望辦公室用戶能夠添加到日曆 - 這很容易通過Zend_Gdata_Calendar - 可能不像我所希望的那樣整潔。

我在想的另一個選擇是使用Zend_Gdata_Calendar和jQuery Calendar,然後允許不同的用戶完成不同的任務。

有沒有什麼好的教程可以幫助在這種情況下?

回答

2

好的,經過大量的搜索,我決定實現我自己的解決方案,因爲我找不到滿足我需求的解決方案。我已決定使用FullCalendar Plugin。它具有gCal功能,可以從日曆提要中獲取數據,但日曆需要公開才能使用此功能。所以我創造了我自己的。

在頁面視圖(calendar.phtml):

<?php if ($this->worker == "office"): ?> 
     <div id='calendar'></div> 
    <?php else: ?> 
     <iframe src="https://www.google.com/calendar/embed?showTitle=0&amp;showCalendars=0&amp;showTz=0&amp;height=600&amp;wkst=2&amp;hl=en_GB&amp;bgcolor=%23FFFFFF&amp;src=YOU-CALENDAR-LINK&amp;color=%2329527A&amp;ctz=Europe%2FLondon&pvttk=YOUR-PRIVATE-KEY" 
      style="border-width:0;" 
      width="580" 
      height="600" 
      frameborder="0" 
      scrolling="no"></iframe> 
    <?php endif; ?> 

在calendarAction方法:

$this->view->jQuery()->addStyleSheet($this->view->baseUrl('css/JQuery/fullcalendar.css')); 
    $this->view->jQuery()->addJavascriptFile($this->view->baseUrl('js/fullcalendar.js')); 
    $this->view->jQuery()->addJavascriptFile($this->view->baseUrl('js/myCal.js')); 

在我的日曆的Controler我添加了一個函數返回一個JSON陣列(CalendarControler.php ):

$startDate = $this->_getParam('start'); 
    $startDate = date("Y-m-d", $startDate); 
    $endDate = $this->_getParam('end'); 
    $endDate = date("Y-m-d", $endDate); 
    // Remove the view & layout 
    $this->_helper->layout->disableLayout(); 
    $this->_helper->viewRenderer->setNoRender(true); 
    // Query Google GData for the calendar 
    $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; 
    $source = "YOU-APP-NAME"; 
    $user = "USERNAME"; 
    $pass = "PASSWORD"; 
    $client = Zend_Gdata_ClientLogin::getHttpClient($user,$pass,$service,null,$source); 
    $cal = new Zend_Gdata_Calendar($client); 
    $events = array(); 
    $query = $cal->newEventQuery(); 
    $query->setUser('default'); 
    $query->setVisibility('private'); 
    $query->setStartMin($startDate); 
    $query->setStartMax($endDate); 
    $eventFeed = $cal->getCalendarEventFeed($query); 
    // Loop through the returned events: 
    foreach ($eventFeed as $event) 
    { 
     $temp['id'] = $event->id->text; 
     $temp['title'] = $event->title->text; 
     $temp['allDay'] = false; 
     foreach ($event->when as $when) 
     { 
      $temp['start'] = date("D M j Y H:i:s eO", strtotime($when->startTime)); 
      $temp['end'] = date("D M j Y H:i:s eO", strtotime($when->endTime)); 
     } 
     array_push($events, $temp); 
    } 
    echo json_encode($events); 

最後未完成的JS類(myCal.js) - 它是未完成的,因爲我是l掛鉤到fullcalendar的可編輯和添加動作,並使用一些ajax調用來創建對話框並添加新事件,編輯事件和刪除事件 - 否則這基本上就是一個私人嵌入式Google日曆(就像工作人員顯示的那樣) :

$j("#calendar").fullCalendar({  
     editable: false,    
     header: { 
      left: "prev,next today", 
      center: "title", 
      right: "month,basicWeek,agendaDay"}, 
     events: "calendar/events"}); 
+0

感謝您發表該內容。那麼,這是否仍然要求日曆是公開的,或者Gdata_ClientLogin是否允許登錄到可​​以訪問日曆的帳戶,以便顯示私人日曆? – jwinn 2012-01-25 16:46:37