<?php if (!defined('PmWiki')) exit();
/**
	Simple GTD Task List Manager for PmWiki
	Written by (c) Petko Yotov 2008-2015

	This text is written for PmWiki; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published
	by the Free Software Foundation; either version 3 of the License, or
	(at your option) any later version. See pmwiki.php for full details
	and lack of warranty.

	Copyright 2008-2015 Petko Yotov http://5ko.fr
*/
$RecipeInfo['GTD-TLM']['Version'] = '20150405';
  
Markup_e('gtd-tlm', '<split',
  '/\\(:gtd-tlm\\s*(.*?):\\)/i',
  "FmtGTD(\$pagename,\$m[1])");
  
SDV($GTDheader, "<script type='text/javascript'><!--
	AutoAppendStr = \"$[Autoappend/sticky is set to]\";
	//--></script><script type='text/javascript' src='\$FarmPubDirUrl/gtd-tlm.js'></script>");
SDV($GTDfooter, "<script type='text/javascript'><!--
	populate_itemlist(\"{\$GTDstartup}\");
	document.GTDactionform.itemlist.oncontextmenu=new Function('return false');
	document.GTDactionform.taglist.oncontextmenu=new Function('return false');
	//--></script>");
SDV($GTDform, <<<EOF
<form name='GTDactionform' onsubmit='return go(this.command.value);return false;' method="post" action="\$PageUrl">
<table border="0" cellpadding='0' cellspacing='2'>
<tr>
	<td valign='top' align='right'>$[Command]:</td>
	<td valign='top'>#GTDcmdline#</td>
</tr>
<tr>
	<td valign='top' align='right'><select name="taglist" size="#GTDlines#" onmouseup="click_list(this, btn(event));" ondblclick="click_list(this, 'DOUBLE');" class="gtd taglist">
<option value="">$[Tags]</option>
</select></td>
	<td valign='top'><select name="itemlist" size="#GTDlines#" onmouseup="click_list(this, btn(event));" class="gtd itemlist">
<option value="">$[Tasks]</option>
</select></td>
</tr></table>
$[Display]:
<input #GTDshow_top# id="c0" type="checkbox" name='show_top'  onclick="go('?');"/> <label for="c0"><b>!</b> $[Top]</label>
<input #GTDshow_next# id="c1" type="checkbox" name='show_next'  onclick="go('?');"/> <label for="c1">$[Next]</label>
<input #GTDshow_waitingfor# id="c2" type="checkbox" name='show_waitingfor'  onclick="go('?');"/> <label class='waitingfor' for="c2"><b>;</b> $[Waiting for]</label>
<input #GTDshow_done# id="c3" type="checkbox" name='show_done'  onclick="go('?');"/> <label class='done' for="c3"><b>.</b> $[Done]</label>
<input #GTDshow_maybe# id="c4" type="checkbox" name='show_maybe'  onclick="go('?');"/> <label class='maybe' for="c4"><b>?</b> $[Maybe]</label>
<input #GTDshow_ref# id="c5" type="checkbox" name='show_ref'  onclick="go('?');"/> <label class='ref' for="c5"><b>:</b> $[Reference]</label>

</form>
<form name="GTDdataform" method="post" action="\$PageUrl">
#GTDsubmitbutton#
<input type="hidden" name="basetime-tlm" value="#GTDnow#" />
<input type="hidden" name="datapage" value="#GTDdatapage#" />
<input type="hidden" name="rawdata" value="#GTDrawdata#" />
<input type="hidden" name="action" value="editGTDdata" />
</form>
EOF
);
SDV($GTDQuickRef, "
(:table class=frame cellspacing=6 style='font-size:small;':)
(:cell valign=top:)
'''Commands :'''\\\\
%kbd%'''+''' stuff @tag%% add a line\\\\
%kbd%'''*''' stuff%% autoappend \"stuff\" in next added lines\\\\
%kbd%'''=''' stuff @tag%% modify selected line\\\\
%kbd%'''?''' search -excl%% search for (filter) lines\\\\
'''tags :''' @context \$project @tag\\\\
'''line prefixes :''' %kbd%'''!''' high priority%% %kbd%'''.''' done%% \\\\
%kbd%'''?''' maybe%% %kbd%''';''' waitingfor%% %kbd%''':''' reference%%
(:cell valign=top:)
'''Task list :'''\\\\
right-click, shift+click : modify status\\\\
middle-click, ctrl+click : copy to command line\\\\
'''@Tag list :''' double-click : filter task list\\\\
right-click, shift+click : undo filter tasks\\\\
middle-click, ctrl+click : copy to command line\\\\
'''checks :''' filter tasks by status
(:tableend:)
");
SDV($GTDdefaultdata, "Add a task with \"+ stuff\" then press Enter.
After some additions/changes, press \"Save changes\".
Read the gtd-tlm cookbook manual \$pmwiki @online
. Created contexts @work @home @anywhere @phone @computer
? Check Cookbook:GTD-TLM for updates \$pmwiki @online");
SDVA($HandleActions, array('editGTDdata'=>'HandleGTD'));
SDVA($HandleAuth, array('editGTDdata' => 'edit'));

function FmtGTD($pagename, $args)
{
	global $FmtPV, $HTMLFooterFmt, $HTMLHeaderFmt, $GTDdefaultdata,
		$GTDform, $GTDheader, $GTDfooter, $GTDQuickRef, $Now, $GTD;
	static $TLMnum = 0;
	if($TLMnum>0) return;
	$TLMnum++;
	
	$opt = ParseArgs($args);
	$datapage = $GTD['datapage'] = MakePageName($pagename, IsEnabled($opt['datapage'], "$pagename-gtddata"));

	$dpage = RetrieveAuthPage($datapage,'read',1, READPAGE_CURRENT);//ask for pw if needed
	if(!$dpage) Abort("? No read permissions at $datapage.");

	if(!@$dpage['text'])$text = $GTDdefaultdata;
	else $text = preg_replace("/^\\s*\\[@\\s*(.*)\\s*@\\]\\s*$/s", '$1', $dpage['text']);
	$GTD['rawdata'] = htmlspecialchars($text);
	$GTD['now'] = $Now;

	foreach(array('top', 'waitingfor', 'next', 'done', 'maybe', 'ref') as $v)
		$GTD["show_$v"] = intval(IsEnabled($opt[$v], 1) ) ? 'checked="checked"' : '';
	$GTD["submitbutton"] = intval(@$opt['readonly']) ? '' :
		FmtPageName('<input name="b" type="button" value="$[Save changes]" onclick="savechanges();"/>', $pagename);
	$GTD['lines'] = IsEnabled($opt['lines'], 10);
	$clines = intval(IsEnabled($opt['clines'], 2)) ;
	if($clines<1) $clines = 2;
	$cmdattr = "name='command' class='gtd cmdline' ondblclick=\"this.value=''\" onblur='CMDfocus=0;' onkeydown='javascript:return keyCapt(event, 1);'";
	$GTD['cmdline'] = $clines == 1?
		"<input type='text' size='40' $cmdattr/>"
		:"<textarea rows='$clines' cols='40' $cmdattr></textarea>";

	if(@$opt['startup']) $FmtPV['$GTDstartup'] = "\"{$opt['startup']}\"";
	
	$HTMLHeaderFmt['gtd'] = $GTDheader;
	$HTMLFooterFmt['gtd'] = FmtPageName($GTDfooter, $pagename);
	
	$out = PPRE('/#GTD(\w+)#/', '$GLOBALS["GTD"][$m[1]]', FmtPageName($GTDform, $pagename));

	if(IsEnabled($opt['quickref'], 1))	return PRR(Keep($out)."\n$GTDQuickRef");
	else return Keep($out);
}
function HandleGTD($pagename, $auth='edit')
{
	$datapage = MakePageName($pagename, $_REQUEST['datapage']);
	$dpage = RetrieveAuthPage($datapage,$auth,1);#will ask for pw if needed
	$newpage = $dpage;
	$newpage['text'] = "[@\n". stripmagic($_REQUEST['rawdata'])."\n@]";
	UpdatePage($datapage, $dpage, $newpage);
	Redirect($pagename);
}