2

私は小規模なウェブサイトで作業しています。それは非常に簡単なアイデアを持っている、オフィスと労働者の2つのセットがあり、どちらもサイトにアクセスするためにログインする必要があります(サイトはZendフレームワークで構築されています)安全な共有Googleカレンダー

問題:すべてのユーザーがアクセスできるカレンダーを作成したいと考えています。オフィスの職員はカレンダーを編集することができ、従業員はカレンダーを見ることしかできません。

私は本当に、その柔軟性にカレンダーのバックエンドとしてユーザーGoogleにしたい:オフィスワーカーのカップルは(Android携帯電話を持っているすべての)道路上で動作ので、カレンダーがそれらのユーザーと共有し、彼らすることができますモバイルデバイスを使用してカレンダーを更新できます。

問題は、カレンダーをワーカーと共有することです。表示可能なカレンダーを保護されたページに埋め込みたいのですが、カレンダーを表示するにはユーザーがGoogleユーザーとしてログインする必要があります(パブリックにすることはできません)。私はZend_Gdata_Calendarを使うことができると思っていましたが、カレンダービューを取得する簡単な方法ではないようです。これを行う方法はありますか? ウェブサイトをGoogleで認証して埋め込みカレンダーを取得することは可能でしょうか?

もう一方の側では、オフィスユーザがカレンダーに追加できるようにしたいと思っています.Zend_Gdata_Calendarを通して簡単には簡単です。私が望んでいたほどうまくいかないかもしれません。

私が考えていたもう1つの選択肢は、Zend_Gdata_CalendarとjQuery Calendarを使用していた可能性があり、さまざまなユーザーが異なるタスクを実行できるようにすることでした。

この状況で役立つチュートリアルはありますか?

答えて

2

多くの検索の後、自分のニーズに合ったソリューションを見つけることができなかったので、自分のソリューションの見解を実装することに決めました。

私はFullCalendar Pluginを使用することを決めました。カレンダーフィードからデータを取得するgCal関数がありますが、この関数を使用するにはカレンダーを公開する必要があります。だから私は自分自身を作成し​​ました。ページビューで

(calendar.phtml):calendarAction法で

<?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; ?> 

$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では、私は(CalendarControler.phpをJSON配列を返すように機能を追加しました):

$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呼び出しを使ってダイアログを作成し、新しいイベントを追加したり、イベントを編集したり、イベントを削除したりすることができます。そうしないと、基本的には、 :

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

ありがとうございます。では、カレンダーを公開する必要がありますか、Gdata_ClientLoginはカレンダーにアクセスできるアカウントにログインできるようにしていますか? – jwinn

+1

こんにちはjwinn、あなたは正しいですClientLoginは、ログインするとプライベートカレンダーからエントリを取得することができます。私は誰もが公開URLを見つけた場合、カレンダー公開をする危険にさらされたくありませんでした。 – Scoobler

関連する問題