2 Stimmen

Sicherer gemeinsamer Google-Kalender

Ich arbeite gerade an einer kleinen Website. Die Idee ist sehr einfach: Es gibt zwei Gruppen von Nutzern, Büro und Arbeiter, die sich beide anmelden müssen, um Zugang zu der Website zu erhalten (die Website wurde mit dem Zend-Framework erstellt) .

Das Problem: Ich möchte einen Kalender haben, der für alle Benutzer zugänglich ist. Das Büropersonal kann den Kalender bearbeiten, während die Arbeitnehmer den Kalender nur einsehen können.

Ich möchte Google als Backend für den Kalender verwenden, da es sehr flexibel ist: Ein paar der Büroangestellten arbeiten von unterwegs (alle haben Android-Handys) so dass der Kalender für diese Nutzer freigegeben werden kann und sie ihre mobilen Geräte zur Aktualisierung des Kalenders verwenden können.

Das Problem, das ich habe, ist die gemeinsame Nutzung des Kalenders mit den Arbeitnehmern. Ich wollte den sichtbaren Kalender in eine gesicherte Seite einbetten - aber natürlich müsste der Benutzer als Google-Benutzer eingeloggt sein, um den Kalender zu sehen (er könnte nicht öffentlich sein). Ich hatte gehofft, ich könnte den Zend_Gdata_Calendar verwenden, aber es scheint keinen einfachen Weg zu geben, die Kalenderansicht zu erhalten. Gibt es eine Möglichkeit dies zu tun? Wäre es möglich, die Website dazu zu bringen, sich bei Google anzumelden und einen eingebetteten Kalender zu erhalten?

Die andere Seite ist, dass ich möchte, dass Office-Benutzer in der Lage sind, dem Kalender hinzuzufügen - was durch den Zend_Gdata_Calendar einfach genug ist - vielleicht nicht so ordentlich, wie ich es mir erhofft hatte.

Die andere Option, die ich dachte, war die Verwendung von Zend_Gdata_Calendar und einer jQuery-Kalender Möglicherweise können dann verschiedene Benutzer die verschiedenen Aufgaben übernehmen.

Gibt es irgendwelche guten Tutorials, die in dieser Situation helfen könnten?

2voto

Scoobler Punkte 9628

Nach langem Suchen habe ich mich entschlossen, meine eigene Lösung zu implementieren, da ich keine gefunden habe, die meinen Bedürfnissen entsprach.

Ich habe beschlossen, die FullCalendar Plugin . Es gibt eine gCal-Funktion, mit der die Daten aus einem Kalenderfeed abgerufen werden können, aber der Kalender muss öffentlich sein, um diese Funktion nutzen zu können. Also habe ich meine eigene erstellt.

In der Seitenansicht (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; ?>

In der calendarAction-Methode:

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

In meinem Kalender-Controler habe ich eine Funktion hinzugefügt, die ein json-Array zurückgibt (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);

Schließlich die unvollendete JS-Klasse (myCal.js) - Es ist unvollendet, da ich auf die bearbeitbare und Hinzufügen von Aktionen von fullcalendar und mit einigen Ajax-Aufrufe, um einen Dialog zu erstellen und neue Ereignisse hinzufügen, bearbeiten und löschen Ereignisse - sonst wäre dies im Grunde eine private eingebettet Google-Kalender (wie das, was angezeigt wird, um die Arbeitnehmer):

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X