Custom Google Calendar Sync

Getestet in VtigerCRM 6.1 und 6.0!

Mit dieser Modifikation können Sie den internen Google Calendar Sync auch mit einem Kalender verwenden, welcher nicht der Standardkalender Ihres Accounts ist.

Bevor du die Modifikation integrierst, installiere meine Vtiger Tools. Erweiterung. Diese ist absolut notwendig, da ich die Verwaltung für die Kalendarauswahl darin implementiert habe um die Modifikationen gering zu halten.

Nach der Installation der Vtiger Tools drücke einmal „Initialize“ in der „Google Calendar“ Sektion. Damit hast du die Funktion initialisiert.

1. Datei: /modules/Google/connectors/Calendar.php

1.1 Suche

$query = $calendars->newEventQuery($query);

Danach einfügen

        /* modified by swarnat - mod61.01 */
        if($this->calendarId !== null) {
            $query->setUser($this->calendarId);
        }
        /* modified by swarnat - mod61.01 */

1.2 Suche

$createdEntry = $gContact->insertEvent($entity);

Ersetze diese Zeile mit

                    /* modified by swarnat - mod61.01 */
                    try {
                        if($this->calendarId !== null) {
                            $createdEntry = $gContact->insertEvent($entity, "http://www.google.com/calendar/feeds/".$this->calendarId."/private/full");
                        } else {
                            $createdEntry = $gContact->insertEvent($entity);
                        }
                    } catch (Exception $e) {
                        var_dump($e->getMessage());
                    }
                    /* modified by swarnat - mod61.01 */

1.3 Suche (Das Ende der Datei)

}
?>

Zuvor einfügen

    /* modified by swarnat - mod61.01 */
    public function getCalendarList() {
        $gdata = new Zend_Gdata_Calendar($this->apiInstance);
        $calendarList = $gdata->getCalendarListFeed();
        $calendars = array();
        foreach ($calendarList as $calendar) {
            $calendars[] = array('title' => (string)$calendar->title, 'id' => (string)$calendar->id);
        }
        return $calendars;
    }
    protected $calendarId = null;
    public function setCalendarId($calendarId) {
        $this->calendarId = $calendarId;
    }
    /* modified by swarnat - mod61.01 */

2. Datei: /modules/Google/controllers/Calendar.php

2.1 Suche

    public function getSourceType() {
        return 'Events';
    }

Danach einfügen

    /* modified by swarnat - mod61.01 */
    public function getCalendarId() {
        $adb = \PearDatabase::getInstance();
        $sql = 'SELECT calendar_id FROM vtiger_gcal_sync WHERE user_id = ?';
        $result = $adb->pquery($sql, array($this->user->id));
        if($adb->num_rows($result) == 0) {
            return null;
        }
 
        return $adb->query_result($result, 0, 'calendar_id');
    }
 
    public function getCalendarList() {
        return $this->targetConnector->getCalendarList();
    }
    public function setCalendarId($calendarId) {
        $this->targetConnector->setCalendarId($calendarId);
    }
    /* modified by swarnat - mod61.01 */

3. Datei: /modules/Google/models/Module.php

Diese Datei existiert nur in VtigerCRm 6.1, da 6.0 ein Löschen der Verbindung nicht vorsieht!

3.1 Suche

$db->pquery($query, array($module, $id));

Danach einfügen

        /* modified by swarnat - mod61.01 */
        $query = "DELETE FROM vtiger_gcal_sync WHERE user_id = ?";
        $db->pquery($query, array($id));
        /* modified by swarnat - mod61.01 */

4. Datei: /modules/Google/views/List.php

4.1 Suche

$controller = new Google_Calendar_Controller($user);

Danach einfügen

        /* modified by swarnat - mod61.01 */
        $calId = $controller->getCalendarId();
        if(empty($calId)) {
            $list = $controller->getCalendarList();
            $this->viewer->assign('calendars', $list);
            $this->viewer->view('GCalChooser.tpl', 'SwVtTools');
 
            return;
        }
        $controller->setCalendarId($calId);
        /* modified by swarnat - mod61.01 */