1a1a3b679SAndreas Boehler<?php 2a1a3b679SAndreas Boehler 3*cb71a62aSAndreas Boehler/** 4*cb71a62aSAndreas Boehler * DokuWiki DAVCal PlugIn - Ajax component 5*cb71a62aSAndreas Boehler */ 6*cb71a62aSAndreas Boehler 7a1a3b679SAndreas Boehlerif(!defined('DOKU_INC')) die(); 8a1a3b679SAndreas Boehler 9a1a3b679SAndreas Boehlerclass action_plugin_davcal_ajax extends DokuWiki_Action_Plugin { 10a1a3b679SAndreas Boehler 11a1a3b679SAndreas Boehler /** 12*cb71a62aSAndreas Boehler * @var helper_plugin_davcal 13a1a3b679SAndreas Boehler */ 14a1a3b679SAndreas Boehler private $hlp = null; 15a1a3b679SAndreas Boehler 16a1a3b679SAndreas Boehler function __construct() { 17a1a3b679SAndreas Boehler $this->hlp =& plugin_load('helper','davcal'); 18a1a3b679SAndreas Boehler } 19a1a3b679SAndreas Boehler 20a1a3b679SAndreas Boehler function register(Doku_Event_Handler $controller) { 21a1a3b679SAndreas Boehler $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handle_ajax_call_unknown'); 22a1a3b679SAndreas Boehler } 23a1a3b679SAndreas Boehler 24a1a3b679SAndreas Boehler function handle_ajax_call_unknown(&$event, $param) { 25a1a3b679SAndreas Boehler if($event->data != 'plugin_davcal') return; 26a1a3b679SAndreas Boehler 27a1a3b679SAndreas Boehler $event->preventDefault(); 28a1a3b679SAndreas Boehler $event->stopPropagation(); 29a1a3b679SAndreas Boehler global $INPUT; 30a1a3b679SAndreas Boehler 31a1a3b679SAndreas Boehler $action = trim($INPUT->post->str('action')); 32a1a3b679SAndreas Boehler $id = trim($INPUT->post->str('id')); 33a1a3b679SAndreas Boehler $params = $INPUT->post->arr('params'); 34a1a3b679SAndreas Boehler $user = $_SERVER['REMOTE_USER']; 35a1a3b679SAndreas Boehler $write = false; 36a1a3b679SAndreas Boehler 37a1a3b679SAndreas Boehler $data = array(); 38a1a3b679SAndreas Boehler 39a1a3b679SAndreas Boehler $data['result'] = false; 40a1a3b679SAndreas Boehler $data['html'] = $this->getLang('unknown_error'); 41a1a3b679SAndreas Boehler 42*cb71a62aSAndreas Boehler // Check if we have access to the calendar ($id is given by parameters, 43*cb71a62aSAndreas Boehler // that's not necessarily the page we come from) 44a1a3b679SAndreas Boehler $acl = auth_quickaclcheck($id); 45a1a3b679SAndreas Boehler if($acl > AUTH_READ) 46a1a3b679SAndreas Boehler { 47a1a3b679SAndreas Boehler $write = true; 48a1a3b679SAndreas Boehler } 49a1a3b679SAndreas Boehler 50*cb71a62aSAndreas Boehler // Parse the requested action 51a1a3b679SAndreas Boehler switch($action) 52a1a3b679SAndreas Boehler { 53*cb71a62aSAndreas Boehler // Add a new Event 54a1a3b679SAndreas Boehler case 'newEvent': 55a1a3b679SAndreas Boehler if($write) 56a1a3b679SAndreas Boehler { 57a1a3b679SAndreas Boehler $data['result'] = true; 58a1a3b679SAndreas Boehler $data['html'] = $this->getLang('event_added'); 59a1a3b679SAndreas Boehler $this->hlp->addCalendarEntryToCalendarForPage($id, $user, $params); 60a1a3b679SAndreas Boehler } 61a1a3b679SAndreas Boehler else 62a1a3b679SAndreas Boehler { 63a1a3b679SAndreas Boehler $data['result'] = false; 64a1a3b679SAndreas Boehler $data['html'] = $this->getLang('no_permission'); 65a1a3b679SAndreas Boehler } 66a1a3b679SAndreas Boehler break; 67*cb71a62aSAndreas Boehler // Retrieve existing Events 68a1a3b679SAndreas Boehler case 'getEvents': 69a1a3b679SAndreas Boehler $startDate = $INPUT->post->str('start'); 70a1a3b679SAndreas Boehler $endDate = $INPUT->post->str('end'); 71a1a3b679SAndreas Boehler $data = $this->hlp->getEventsWithinDateRange($id, $user, $startDate, $endDate); 72a1a3b679SAndreas Boehler 73a1a3b679SAndreas Boehler break; 74*cb71a62aSAndreas Boehler // Edit an event 75a1a3b679SAndreas Boehler case 'editEvent': 76a1a3b679SAndreas Boehler if($write) 77a1a3b679SAndreas Boehler { 78a1a3b679SAndreas Boehler $data['result'] = true; 79a1a3b679SAndreas Boehler $data['html'] = $this->getLang('event_edited'); 80a1a3b679SAndreas Boehler $this->hlp->editCalendarEntryForPage($id, $user, $params); 81a1a3b679SAndreas Boehler } 82a1a3b679SAndreas Boehler else 83a1a3b679SAndreas Boehler { 84a1a3b679SAndreas Boehler $data['result'] = false; 85a1a3b679SAndreas Boehler $data['html'] = $this->getLang('no_permission'); 86a1a3b679SAndreas Boehler } 87a1a3b679SAndreas Boehler break; 88*cb71a62aSAndreas Boehler // Delete an Event 89a1a3b679SAndreas Boehler case 'deleteEvent': 90a1a3b679SAndreas Boehler if($write) 91a1a3b679SAndreas Boehler { 92a1a3b679SAndreas Boehler $data['result'] = true; 93a1a3b679SAndreas Boehler $data['html'] = $this->getLang('event_deleted'); 94a1a3b679SAndreas Boehler $this->hlp->deleteCalendarEntryForPage($id, $params); 95a1a3b679SAndreas Boehler } 96a1a3b679SAndreas Boehler else 97a1a3b679SAndreas Boehler { 98a1a3b679SAndreas Boehler $data['result'] = false; 99a1a3b679SAndreas Boehler $data['html'] = $this->getLang('no_permission'); 100a1a3b679SAndreas Boehler } 101a1a3b679SAndreas Boehler break; 102*cb71a62aSAndreas Boehler // Get personal settings 103a495d34cSAndreas Boehler case 'getSettings': 104a495d34cSAndreas Boehler $data['result'] = true; 105a495d34cSAndreas Boehler $data['settings'] = $this->hlp->getPersonalSettings($user); 106b269830cSAndreas Boehler $data['settings']['syncurl'] = $this->hlp->getSyncUrlForPage($id, $user); 107f69bb449SAndreas Boehler $data['settings']['privateurl'] = $this->hlp->getPrivateURLForPage($id); 108a495d34cSAndreas Boehler break; 109*cb71a62aSAndreas Boehler // Save personal settings 110a495d34cSAndreas Boehler case 'saveSettings': 111a495d34cSAndreas Boehler $settings = array(); 112a495d34cSAndreas Boehler $settings['weeknumbers'] = $params['weeknumbers']; 113a495d34cSAndreas Boehler $settings['timezone'] = $params['timezone']; 114a495d34cSAndreas Boehler $settings['workweek'] = $params['workweek']; 115a495d34cSAndreas Boehler if($this->hlp->savePersonalSettings($settings, $user)) 116a495d34cSAndreas Boehler { 117a495d34cSAndreas Boehler $data['result'] = true; 118a495d34cSAndreas Boehler $data['html'] = $this->getLang('settings_saved'); 119a495d34cSAndreas Boehler } 120a495d34cSAndreas Boehler else 121a495d34cSAndreas Boehler { 122a495d34cSAndreas Boehler $data['result'] = false; 123a495d34cSAndreas Boehler $data['html'] = $this->getLang('error_saving'); 124a495d34cSAndreas Boehler } 125a495d34cSAndreas Boehler break; 126a1a3b679SAndreas Boehler } 127a1a3b679SAndreas Boehler 128a1a3b679SAndreas Boehler // If we are still here, JSON output is requested 129a1a3b679SAndreas Boehler 130a1a3b679SAndreas Boehler //json library of DokuWiki 131a1a3b679SAndreas Boehler require_once DOKU_INC . 'inc/JSON.php'; 132a1a3b679SAndreas Boehler $json = new JSON(); 133a1a3b679SAndreas Boehler 134a1a3b679SAndreas Boehler //set content type 135a1a3b679SAndreas Boehler header('Content-Type: application/json'); 136a1a3b679SAndreas Boehler echo $json->encode($data); 137a1a3b679SAndreas Boehler } 138a1a3b679SAndreas Boehler 139a1a3b679SAndreas Boehler}