register_hook('TOOLBAR_DEFINE', 'AFTER', $this, 'insert_button', array ());
$controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, '_ajax_call');
}
/**
* Inserts the toolbar button
*/
function insert_button(Doku_Event $event, $param) {
$event->data[] = array(
'type' => 'format',
'title' => 'InlineEdit',
'icon' => '../../plugins/inlineedit/images/inlineedit.png',
'sample' => '',
'open' => '',
'close'=>'',
'insert'=>'',
);
}
function _ajax_call(Doku_Event $event, $param) {
if ($event->data !== 'plugin_inlineedit') {
return;
}
//no other ajax call handlers needed
$event->stopPropagation();
$event->preventDefault();
/* @var $INPUT \Input */
global $INPUT;
$itemPos = $INPUT->int('id'); //input index on the server
$input_str = trim($INPUT->str('input')); //input string
/* @var $Hajax \helper_plugin_ajaxedit */
$Hajax = $this->loadHelper('ajaxedit');
$data=$Hajax->getWikiPage(); //
//find "our" fsinput fields
$found=explode("",$data);
//find pagemods
@preg_match_all('=[\w\W]*?=',$data,$pagemod_found, PREG_OFFSET_CAPTURE);
$calc_index = -1;
if ($itemPos < count($found)) {
for($index = 0; $index < count($found); $index++) {
$offset = 0;
for($ii = 0; $ii<=$index; $ii++) {
$offset += strlen($found[$ii])+8;
}
$pagemod_found_flag = 0;
foreach($pagemod_found[0] as $pagemod_f) { //check if fsinput is in pagemod area
if($offset > $pagemod_f[1] && $offset< ($pagemod_f[1]+strlen($pagemod_f[0]))) {
$pagemod_found_flag = 1;
}
// print_r([$index,$calc_index,$input_index,$offset,$pagemod_f,($pagemod_f[1]+strlen($pagemod_f[0]))]);
}
if(!$pagemod_found_flag) { //we are looking for fsinput outside of pagemod
$calc_index++;
}
if($calc_index == $itemPos){
break ;
}
}
$found[$index+1] = ltrim($found[$index+1]);
$stop=strpos($found[$index+1],"");
if ($stop === FALSE) {
$Hajax->error('Cannot find object, please contact your admin!');
}
else {
$oldstr = substr($found[$index+1],0,$stop);
$newstr=$input_str;
if($stop == 0){
$found[$index+1]= $newstr.$found[$index+1];
}
else {
$found[$index+1]=str_replace($oldstr,$newstr,$found[$index+1]);
}
}
$displayStr = $newstr ? $newstr : '...';
$data=implode("",$found);
$param = array(
'text' => $displayStr,
'msg' => $this->getLang('success'),
);
$summary = "Inlineedit ".$itemPos." changed from ".$oldstr." to ".$newstr;
$Hajax->saveWikiPage($data,$summary,false,$param);
}
}
}