1*f4b18c92SGill B.<?php 2*f4b18c92SGill B.if(!defined('DOKU_INC')) die(); 3*f4b18c92SGill B. 4*f4b18c92SGill B.class action_plugin_kanban extends DokuWiki_Action_Plugin { 5*f4b18c92SGill B. public function register(Doku_Event_Handler $controller) { 6*f4b18c92SGill B. $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handle_ajax'); 7*f4b18c92SGill B. } 8*f4b18c92SGill B. 9*f4b18c92SGill B. 10*f4b18c92SGill B. public function handle_started(Doku_Event $event, $param) { 11*f4b18c92SGill B. global $JSINFO; 12*f4b18c92SGill B. global $INPUT; 13*f4b18c92SGill B. 14*f4b18c92SGill B. // Get the logged-in username from the REMOTE_USER environment variable 15*f4b18c92SGill B. $user = $INPUT->server->str('REMOTE_USER'); 16*f4b18c92SGill B. echo json_encode(['user' => $user]); 17*f4b18c92SGill B. if($user) { 18*f4b18c92SGill B. $JSINFO['user'] = $user; 19*f4b18c92SGill B. } 20*f4b18c92SGill B. } 21*f4b18c92SGill B. 22*f4b18c92SGill B. 23*f4b18c92SGill B.public function handle_ajax(Doku_Event $event, $param) { 24*f4b18c92SGill B. if ($event->data !== 'kanban_save') return; // Must match call in JS 25*f4b18c92SGill B. $event->preventDefault(); 26*f4b18c92SGill B. $event->stopPropagation(); 27*f4b18c92SGill B. 28*f4b18c92SGill B. global $INPUT, $conf; 29*f4b18c92SGill B. $board = $INPUT->str('board'); 30*f4b18c92SGill B. $cardId = $INPUT->str('card_id'); 31*f4b18c92SGill B. 32*f4b18c92SGill B. // Dynamically build the path in data/kanban/ 33*f4b18c92SGill B. $kanbanDir = '../' . '.' .$conf['savedir'] . '/kanban/' . $board . '/'; // added '../' . '.' . in the beginning path otherwise it writes to ./exe/data directory....annoying 34*f4b18c92SGill B. if (!is_dir($kanbanDir)) io_makeFileDir($kanbanDir . 'placeholder.txt'); 35*f4b18c92SGill B. 36*f4b18c92SGill B. echo $kanbanDir; //debugging line 37*f4b18c92SGill B. 38*f4b18c92SGill B. $file = $kanbanDir . $cardId . '.json'; 39*f4b18c92SGill B. 40*f4b18c92SGill B. $data = file_exists($file) ? json_decode(io_readFile($file), true) : ['id' => $cardId]; 41*f4b18c92SGill B. 42*f4b18c92SGill B. 43*f4b18c92SGill B. //$newNote = $currNote . ' | ' . $data['note']; 44*f4b18c92SGill B. // Update fields sent by AJAX 45*f4b18c92SGill B. if ($INPUT->has('column')) $data['column'] = $INPUT->str('column'); 46*f4b18c92SGill B. if ($INPUT->has('name')) $data['name'] = $INPUT->str('name'); 47*f4b18c92SGill B. if ($INPUT->has('importance')) $data['importance'] = $INPUT->str('importance'); 48*f4b18c92SGill B. if ($INPUT->has('desc')) $data['desc'] = $INPUT->str('desc'); 49*f4b18c92SGill B. if ($INPUT->has('checked')) $data['checked'] = $INPUT->str('checked'); 50*f4b18c92SGill B. if ($INPUT->has('note')) $data['note'] = $INPUT->str('note'); 51*f4b18c92SGill B. 52*f4b18c92SGill B. io_saveFile($file, json_encode($data)); 53*f4b18c92SGill B. echo json_encode(['status' => 'success']); 54*f4b18c92SGill B.} 55*f4b18c92SGill B. 56*f4b18c92SGill B.}