xref: /plugin/davcal/action/ajax.php (revision cb71a62a32c9da24e9fd44e8cf1e3b9946e1dec2)
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}