diff --git a/pmwiki_recipes/exercises.php b/pmwiki_recipes/exercises.php index 9d94e48..ed7fb7c 100644 --- a/pmwiki_recipes/exercises.php +++ b/pmwiki_recipes/exercises.php @@ -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 = "$author"; - // $Author somehow never gets initialized - if ($counter != "") - $past_scores .= "
  • $counter done by $author doing $type at $time
  • \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 .= ""; + foreach ($availableexercisetypes as $exercisetype){ + $past_scores .= ""; + } + $past_scores .= ""; + foreach ($availableexercisetypes as $exercisetype){ + $past_scores .= ""; } + $past_scores .= "
    $exercisetype
    "; + $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"]).")
    "; + $answers_added++; + } + } + $past_scores .= "
    "; } 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."; diff --git a/shell_scripts/pmwiki_recipes_info_listing b/shell_scripts/pmwiki_recipes_info_listing index e815e00..e91f172 100755 --- a/shell_scripts/pmwiki_recipes_info_listing +++ b/shell_scripts/pmwiki_recipes_info_listing @@ -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 "";