xref: /plugin/davcal/action/ajax.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1<?php
2
3if(!defined('DOKU_INC')) die();
4
5class action_plugin_davcal_ajax extends DokuWiki_Action_Plugin {
6
7    /**
8     * @var helper_plugin_publish
9     */
10    private $hlp = null;
11
12    function __construct() {
13        $this->hlp =& plugin_load('helper','davcal');
14    }
15
16    function register(Doku_Event_Handler $controller) {
17        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handle_ajax_call_unknown');
18    }
19
20    function handle_ajax_call_unknown(&$event, $param) {
21      if($event->data != 'plugin_davcal') return;
22
23      $event->preventDefault();
24      $event->stopPropagation();
25      global $INPUT;
26
27      $action = trim($INPUT->post->str('action'));
28      $id = trim($INPUT->post->str('id'));
29      $params = $INPUT->post->arr('params');
30      $user = $_SERVER['REMOTE_USER'];
31      $write = false;
32
33      $data = array();
34
35      $data['result'] = false;
36      $data['html'] = $this->getLang('unknown_error');
37
38      $acl = auth_quickaclcheck($id);
39      if($acl > AUTH_READ)
40      {
41          $write = true;
42      }
43
44      switch($action)
45      {
46          case 'newEvent':
47              if($write)
48              {
49                  $data['result'] = true;
50                  $data['html'] = $this->getLang('event_added');
51                  $this->hlp->addCalendarEntryToCalendarForPage($id, $user, $params);
52              }
53              else
54              {
55                  $data['result'] = false;
56                  $data['html'] = $this->getLang('no_permission');
57              }
58          break;
59          case 'getEvents':
60              $startDate = $INPUT->post->str('start');
61              $endDate = $INPUT->post->str('end');
62              $data = $this->hlp->getEventsWithinDateRange($id, $user, $startDate, $endDate);
63
64          break;
65          case 'editEvent':
66              if($write)
67              {
68                  $data['result'] = true;
69                  $data['html'] = $this->getLang('event_edited');
70                  $this->hlp->editCalendarEntryForPage($id, $user, $params);
71              }
72              else
73              {
74                  $data['result'] = false;
75                  $data['html'] = $this->getLang('no_permission');
76              }
77          break;
78          case 'deleteEvent':
79              if($write)
80              {
81                  $data['result'] = true;
82                  $data['html'] = $this->getLang('event_deleted');
83                  $this->hlp->deleteCalendarEntryForPage($id, $params);
84              }
85              else
86              {
87                  $data['result'] = false;
88                  $data['html'] = $this->getLang('no_permission');
89              }
90          break;
91      }
92
93
94
95
96      // If we are still here, JSON output is requested
97
98      //json library of DokuWiki
99      require_once DOKU_INC . 'inc/JSON.php';
100      $json = new JSON();
101
102      //set content type
103      header('Content-Type: application/json');
104      echo $json->encode($data);
105    }
106
107}