代码之家  ›  专栏  ›  技术社区  ›  Scoobler

安全共享谷歌日历

  •  2
  • Scoobler  · 技术社区  · 15 年前

    我在一个小规模的网站上工作。它有一个非常简单的想法,有两组用户,办公室和工人,都必须登录到访问网站。 (该站点使用Zend框架构建) .

    问题:我想要一个所有用户都可以访问的日历。办公室职员可以编辑日历,而工人只能查看日历。

    我真的想用谷歌作为日历的后端,因为它的灵活性:一些办公室工作人员在路上工作 (都有安卓手机) 因此,日历可以与这些用户共享,他们可以使用移动设备更新日历。

    我的问题是和工人们共享日历。我想把可查看的日历嵌入到一个安全的页面中——但是很明显,用户必须以谷歌用户的身份登录才能查看日历(它不能是公共的)。我曾希望我可以使用Zend_Gdata_日历,但似乎没有一种简单的方法来获得日历视图。有什么办法吗? 是否可以让该网站通过谷歌认证并获得嵌入日历?

    另一方面,我希望Office用户能够添加到日历中——通过Zend_-Gdata_日历就足够容易了——也许不像我希望的那样整洁。

    我想的另一个选择是使用Zend_Gdata_日历和 jQuery Calendar 可能,然后允许不同的用户执行不同的任务。

    在这种情况下,有没有什么好的教程可以帮助你?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Scoobler    15 年前

    好吧,经过大量的搜索,我决定实现我自己的解决方案查找,因为我在那里找不到符合我需要的解决方案查找。

    我决定用 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; ?>
    

    在日历法中:

        $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'));  
    

    在日历控制器中,我添加了一个函数来返回JSON数组(calendarController.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)——它是未完成的,因为我将挂接到可编辑和添加完整日历的操作上,并使用一些Ajax调用来创建对话框和添加新事件、编辑事件和删除事件——否则,这基本上是一个私有的嵌入Google日历。R(如向工人展示的内容):

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