parent
4af061f2fe
commit
21c00c2553
@ -0,0 +1,180 @@ |
||||
<?php if (!defined('PmWiki')) exit(); |
||||
/* |
||||
Mainly based on PageFeed by Daniel Roesler (diafygi) |
||||
http://www.pmwiki.org/wiki/Cookbook/PageFeed |
||||
conversation array imported from it |
||||
|
||||
http://fabien.benetou.fr/Wiki/MemoryRecipe |
||||
|
||||
TODO |
||||
support the regex syntax function calls as done in groupkeypages.php |
||||
clean unused code |
||||
test with the W3C that feeds generated are proper |
||||
update recipe date and name |
||||
transform the default call without argument |
||||
abstract the date checking function |
||||
and facilitate any pattern |
||||
addition, substraction, from list, from math func (e.g. mod), ... |
||||
note that if backward compability of files is important the 3 formers can remain empty |
||||
but ideally the local/config.php file should be modified |
||||
weighting for the composite function should read local PTV |
||||
if unsset then use the default behavior |
||||
make the content of description easier to change |
||||
create a variable at the head of the script |
||||
ignore empty date field |
||||
else Unix epoch bug |
||||
|
||||
! behavior_recall seems to be the most general |
||||
modify it to accept negative -> support of preparation |
||||
modify it to accept exp as default -> support of memory-recipe |
||||
*/ |
||||
|
||||
## Recipe version information |
||||
$RecipeInfo['MemoryManagement']['Version'] = '2011-06-20'; |
||||
|
||||
## Add action for pagefeed |
||||
SDV($HandleActions['memorizationMM'], 'MemorizationMM'); |
||||
SDV($HandleActions['recallMM'], 'BehaviorRecallMM'); |
||||
SDV($HandleActions['preparationMM'], 'PreparationMM'); |
||||
|
||||
# from http://www.pmwiki.org/wiki/PmWiki/Functions |
||||
function FeedTextMM($pagename, &$page, $tag) { |
||||
$text = RetrieveAuthSection("ReadingNotes.GroupHeader",""); |
||||
$content = MarkupToHTML($pagename, $text); |
||||
$text = RetrieveAuthSection($pagename, '##Chapter2'); |
||||
$content .= MarkupToHTML($pagename, $text); |
||||
return "<$tag><![CDATA[$content]]></$tag>"; |
||||
} |
||||
|
||||
function MemorizationMM($pagename, $auth = 'read'){ GenerateFeed(title,description,feedfile,timedirection,pattern); } |
||||
function BehaviorRecallMM($pagename, $auth = 'read'){ GenerateFeed(); } |
||||
function PreparationMM($pagename, $auth = 'read'){ GenerateFeed(); } |
||||
|
||||
## Create feed from page history |
||||
function GenerateFeed() { |
||||
# consider defaults : exp, +, ... |
||||
global $FarmD, $WikiTitle, $ScriptUrl; |
||||
|
||||
#### location of the resulting feed |
||||
$feedfile = $FarmD."/pub/memoryfeeds/recallfeed.xml"; #change to a pattern when support arguments |
||||
#$feedfile = $FarmD."/pub/memoryfeeds/memorizationfeed.xml"; #change to a pattern when support arguments |
||||
#$feedfile = $FarmD."/pub/memoryfeeds/preparationfeed.xml"; #change to a pattern when support arguments |
||||
if (!file_exists($feedfile)){ |
||||
if (!touch($feedfile)){ |
||||
print "Creation of the feed file fails, check write permissions for pmWiki and $feedfile.\nMake sure the target directory exists and with the right write permissions."; |
||||
return; |
||||
} |
||||
} |
||||
# open $feed as read |
||||
$feed_oldcontent = file_get_contents($feedfile); |
||||
$feed_newcontent = ''; |
||||
|
||||
#### patterns to use |
||||
$exponential_pattern = array(1,10,30,60,120,350,700,1500,3000,7000,15000,30000,100000); //exp |
||||
$monthly_pattern = array(1,30,60,90,120,150,180,210,240,270,300); //mod30 |
||||
$weekly_pattern = array(1,7,14,21,28,35,43,50,57,64,71,78,85,93,100,101,107,114,121,128,135,143,150,157,164,171,178,185,193,200); //mod7 |
||||
$daily_pattern = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30); //mod1 |
||||
|
||||
#### variables to check value of |
||||
$varname='recall'; |
||||
#$varname='startrecall'; |
||||
#$varname='startprepare'; |
||||
|
||||
|
||||
$pages = ListPages(); |
||||
|
||||
# 2 loops can be probably optimized since they are ordered by date |
||||
foreach ($pages as $page) { |
||||
if ( isset(PageTextVar($page,$varname)) ) { |
||||
$params = explode(" ",$recall); |
||||
$patternrecall = $params[1]; |
||||
$daterecall = $params[0]; |
||||
switch($patternrecall){ |
||||
case "daily": $datestorecall = $daily_pattern; break; |
||||
case "weekly": $datestorecall = $weekly_pattern; break; |
||||
case "monthly": $datestorecall = $monthly_pattern; break; |
||||
default: $datestorecall = $exponential_pattern; break; |
||||
} |
||||
$current_unix_day = strtotime(date("Y-m-d")); |
||||
$sign = "+"; |
||||
# else $sign = "-"; |
||||
foreach ($datestorecall as $day) { |
||||
$checkdate = strtotime((preg_replace("/(\d+)\/(\d+)\/(\d+)/",'$3-$2-$1',$daterecall)." $sign $day days")); |
||||
# print $daterecall . " + " . $day . " (" . $checkdate . ") == " . date("d/m/Y"); |
||||
if ($checkdate==$current_unix_day) |
||||
{ |
||||
# generate GUID |
||||
$item_GUID = $page.'_'.date("Y-m-d"); |
||||
# if not present in file using a regex on the GUID |
||||
if (preg_match("/$item_GUID/",$feed_oldcontent) == 0) |
||||
{ |
||||
# generate date |
||||
$feed_newitemdate = date(DATE_RSS, time()); |
||||
# transform line to XML format |
||||
$cleaned_page_name = str_replace(".","/",$page); |
||||
global $FmtV; |
||||
$pagecontent = FmtPageName($FmtV, $page); |
||||
# does this actually work?! |
||||
|
||||
$ItemTitle = "<title>Day $day recall for page $page started at $daterecall</title>"; |
||||
$ItemLink = "<link>$ScriptUrl/$cleaned_page_name#BehaviorRecallDay$day</link>"; |
||||
$ItemDescription = "<description>This is to improve behaviors you decided yourself were valuable. Also don't forget to improve those instructions to be more and more efficient!$pagecontent</description>"; |
||||
/* |
||||
<title>Day $day recall for page $page started at $daterecall</title> |
||||
<link>$ScriptUrl/$cleaned_page_name#MemorizationDay$day</link>" |
||||
FeedText($page,$page,"description") |
||||
|
||||
<title>Day $day of preparation for page $page started at $dateprepare</title> |
||||
<link>$ScriptUrl/$page</link> |
||||
<description>This is to improve preparation of things you will have to produce. Also don't forget to improve those instructions to be more and more efficient!</description> |
||||
*/ |
||||
|
||||
$feed_newitem = "<item>\n |
||||
$ItemTitle |
||||
$ItemLink |
||||
$ItemDescription |
||||
<guid>$item_GUID</guid> |
||||
<pubDate>$feed_newitemdate</pubDate>\n</item>"; |
||||
|
||||
# appending the item |
||||
$feed_newcontent .= $feed_newitem; |
||||
} |
||||
break; #we can't have 2 days at the same time, move on to the next page |
||||
} |
||||
# print "<br/>"; |
||||
} # check if the next recall day is today |
||||
} # check if the next page is tagged |
||||
} |
||||
# feed should be properly updated |
||||
|
||||
$feed_newdate = date(DATE_RSS, time()); |
||||
$ChannelTitle = "BehaviorRecall"; |
||||
#$ChannelTitle="Memorization"; |
||||
#$ChannelTitle="Preparation"; |
||||
$feed_header = "<?xml version=\"1.0\"?>\n<rss version=\"2.0\">
|
||||
<channel> |
||||
<title>$ChannelTitle feed for $WikiTitle .</title> |
||||
<link>$ScriptUrl</link> |
||||
<description>Receive links as reminded to periodic behaviors you want to transform to habits.</description> |
||||
<lastBuildDate>$feed_newdate</lastBuildDate>"; |
||||
|
||||
$feed_footer = "\n</channel>\n</rss>"; |
||||
|
||||
print $feed_header; |
||||
print $feed_oldcontent; |
||||
print $feed_newcontent; |
||||
|
||||
print $feed_footer; |
||||
|
||||
$write_result = file_put_contents($feedfile,$feed_oldcontent.$feed_newcontent); |
||||
if (!$write_result){ |
||||
if (strlen($feed_oldcontent.$feed_newcontent)>0){ |
||||
print "Creation of the feed file fails, check write permissions for pmWiki and $feedfile."; |
||||
return; |
||||
} else { |
||||
print "No item to generate, did you correctly tag your pages?"; |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue