hall of fame

master
Fabien Benetou 13 years ago
parent 507900f991
commit 0281ac21e7
  1. 50
      pmwiki_recipes/exercises.php
  2. 4
      shell_scripts/pmwiki_recipes_info_listing

@ -6,6 +6,10 @@ error_reporting(0);
# generate exercises based on wiki content and its structure
#
# still to implement (cf http://fabien.benetou.fr/Cookbook/Cognition#DailyExercisesFeed )
# refactor in classes?
# random type is not implemented properly enough for score tracking
# e.g. highest score from random appear as other exercise
# after 1 random exercise, going back to the same type of the last picked exercise
# which of those group corresponds the graph visualization V, A, B or C?
# using groupnetworkvisualization.php
# what is the correct order for pages A, B and C on descending criteria i A>B>C? A>C>B? B>C>A? B>A>C? C>B>A? C>A>B?
@ -24,11 +28,12 @@ error_reporting(0);
# does page A contains word X, Y or Z? (type=pagehasexpression)
# which of those page corresponds the updates visualization V, A, B or C? (type=historyvisualization)
# is page A linked to page B? (type=pagelink)
# consider a difficulty parameter
# difficulty parameter
# should be linked to the counter
# e.g. increasing the number of possibilities (at least 1 out of 5 pages instead of at least 1 out of 3)
# consider doing a trip rather than random jumps
# do a graph traversal rather than random jumps
# i.e. if pick randomly from the linked pages or from the group or from the the whole wiki of the previous page
# consider https://research.cc.gatech.edu/inc/game-forge
$RecipeInfo['Exercises']['Version'] = '2015-16-08';
@ -43,11 +48,15 @@ function Exercises($pagename, $auth){
$difficulty = (int) $_GET["difficulty"];
list($group,$page) = explode(".",$pagename);
$availableexercisetypes = array("pagelink", "expressioninpage", "pagehasexpression", "historyvisualization");
//should also test if the pim_functions.php generated the PJS has been loaded, else not make historyvisualization available
$availableexercisetypes = array("pagelink", "expressioninpage", "pagehasexpression");
if (file_exists($FarmD."/pub/visualization/edits_per_page/" ))
//the pim_functions.php generated the PJS has been loaded before
$availableexercisetypes[] = "historyvisualization";
if ($type=="random" || $type=="")
$type= $availableexercisetypes[rand(0,count($availableexercisetypes)-1)];
if ($type=="random" || $type=="") {
$type= $availableexercisetypes[array_rand($availableexercisetypes)];
$random=true;
}
$result = "";
$verbatimresult = "";
@ -61,10 +70,12 @@ function Exercises($pagename, $auth){
// this could also be consider a difficulty, the shorter the harder
// it can be overwritten per each exercise
// tracking the current score
$counterparam = "";
if ( $counter > 0) {
$counterparam = "counter=$counter&";
}
// the pattern should be improve, e.g. remove PmWiki. , RecentChanges, GroupFooter, GroupHeader, Template, ...
if ($group == "AllPages"){
// equivalent to getting ALL pages
@ -392,17 +403,36 @@ Markup("exercisesresults", "directives", "/\(:exercisesresults:\)/", ExercisesRe
# consider first sparklines for visuals
function ExercisesResults(){
global $ScriptUrl, $FarmD, $Author;
$availableexercisetypes = array("pagelink", "expressioninpage", "pagehasexpression", "historyvisualization");
$activityfile = $FarmD."/wiki.d/.exercisesscores";
if (file_exists($activityfile)) {
$raw_scores = file_get_contents($activityfile);
$allscores = explode("\n",$raw_scores);
rsort($allscores,SORT_NUMERIC);
//dirty, but array_filter with an lambda to test for current exercise didn't work
foreach ($allscores as $score ) {
list($counter,$author,$type,$time) = explode(",",$score);
if ($Author == $author) $author = "<b>$author</b>";
// $Author somehow never gets initialized
if ($counter != "")
$past_scores .= "<li> $counter done by $author doing $type at $time</li>\n";
if ($counter.$author.$type.$time != "")
$structuredanswers[] = array("counter"=>$counter,"author"=>$author,"type"=>$type,"time"=>$time);
}
// could instead filter by exercise and sort by highest score, listing the top3 score per per exercise
$past_scores .= "<table><tr>";
foreach ($availableexercisetypes as $exercisetype){
$past_scores .= "<td><a href=\"?action=Exercises&type=$exercisetype\">$exercisetype</a></td>";
}
$past_scores .= "</tr><tr>";
foreach ($availableexercisetypes as $exercisetype){
$past_scores .= "<td valign=\"top\">";
$answers_added = 1;
foreach ($structuredanswers as $sa){
if ($sa["type"]==$exercisetype && $answers_added<4){
$past_scores .= "".$sa["counter"]." done by ".$sa["author"]." (".date("H:m m/d/y",$sa["time"]).")<br/>";
$answers_added++;
}
}
$past_scores .= "</td>";
}
$past_scores .= "</tr></table>";
} else {
$past_scores = "Currently no scores have been recorded. Consider starting an exercise first";
// print "Go above the minimum threshold of good answers while being logged in.";

@ -41,8 +41,8 @@ do
echo "* functions";
for FUNCTION in `grep ^function $SCRIPT | sed "s/^function \(.*\)(.*/\1/"`
do
PARAMS=`grep "^function $FUNCTION" $SCRIPT | sed "s/^function $FUNCTION(\(.*\)).*/\1/"`
FUNCTIONLINE=`grep -n "^function $FUNCTION" $SCRIPT | sed "s/:.*//"`;
PARAMS=`grep "^function $FUNCTION(" $SCRIPT | sed "s/^function $FUNCTION(\(.*\)).*/\1/"`
FUNCTIONLINE=`grep -n "^function $FUNCTION(" $SCRIPT | sed "s/:.*//"`;
echo "** [[$REPOSITORYURL/$SCRIPT#l$FUNCTIONLINE|$FUNCTION($PARAMS)]]";
done
echo "";

Loading…
Cancel
Save