<?php
$clog_xml=simplexml_load_string(${'clog_xml_'.$clog_ref});// or die("Error: Cannot create object $ xml");

echo "<u>deco - delayed error correction / favourite mistakes</u><div class=\"clog_deco\">";
$deco_ref = $clog_ref;
${'txt_'.$deco_ref} = trim($clog_xml->clog_deco);



if ($member == NULL)
{
  echo "<span style=\"color: red;\">Your session has expired!</span><br />Please log in to view your favourite mistakes.";
}
else
{
?>
<?php
/************************************************************
 * This script collects favourite mistakes from the course log
 * - from most recent to oldest listed
 * - only from the most recent format (xml), i.e not from html
 * and puts them in tsv, txt and csv (; separated) files
 * *********************************************************/

// fetch course log to generate current course contents (and write into file)
// $course_log = $content; // works - keep!
$param1="%".$member."%";
$param2="%course_log%";
$stmt = $db2->prepare("SELECT * FROM cci_cel_courses WHERE member LIKE ? AND url LIKE ? ORDER BY url_order ASC") or die ('failed to prepare');
$stmt->execute(array($param1, $param2));

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
  {
$file_get_contents = file_get_contents($row['url']);
$file_deco = "tmp_files/course_contents_deco_$member.txt";
$fh_deco = fopen($file_deco, 'w') or die("can't open file $file_deco");
fwrite($fh_deco, $file_get_contents); // or die ("can't run fwrite fh_wl");
fclose($fh_deco) or die("can't fclose fh_deco");
}

//$course_log = file_get_contents($file_deco);
// $course_log = $content;
//echo $course_log;

$deco_sbook = "tmp_files/deco_tmp_sbook_$member.txt";
$fh_deco_sbook = fopen($deco_sbook, 'w') or die("can't open file $deco_sbook");

// find lesson references in course log
// REF PATTERN USED IN xml_load_file_ref_sbook.inc & wordlist_generate_sbook.inc
$xml_reference_pattern = '/([0-9]{1}-[0-6]{1}-[0-9]{1}|[0-9]{2}-[0-6]{1}-[0-9]{1})/m'; // MASTER incl lesson_00-0-0.xml

   if (preg_match_all($xml_reference_pattern,$course_log,$matches)) {
     foreach ($matches[0] as $reference) {
       $xml.$reference=simplexml_load_file("inc_xml/lesson_".$reference.".xml");// or die("Error: Cannot create object $ xml1");
       $deco = ($xml.$reference->clog_deco."\n");
       fwrite($fh_deco_sbook, $deco) or die ("can't run fwrite fh_deco_sbook reference->clog_deco");
       }
                 } // close if preg_match_all
fclose($fh_deco_sbook) or die("can't fclose fh_deco_sbook");

//} // endif line 7
?>


<?php
// INCLUDE FAVOURITE MISTAKES FROM COURSE LOG IN XML FORMAT
// 20200413-1641
// fetch course log to generate current course contents (and write into file)
// $course_log = $content; // works - keep!

/* failed w/ XML CLOG
$param1="%".$member."%";
$param2="%course_log%";
$stmt = $db2->prepare("SELECT * FROM cci_cel_courses WHERE member LIKE ? AND url LIKE ? ORDER BY url_order ASC") or die ('failed to prepare');
$stmt->execute(array($param1, $param2));

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
  {
$file_get_contents = file_get_contents($row['url']);
$file_wl = "tmp_files/course_contents_wl_$member.txt";
$fh_wl = fopen($file_wl, 'w') or die("can't open file $file_wl");
fwrite($fh_wl, $file_get_contents); // or die ("can't run fwrite fh_wl");
fclose($fh_wl) or die("can't fclose fh_wl");
}

$course_log = file_get_contents($file_wl);
//echo $course_log;
 */

// CREATE A NEW FILE ONLY FOR XML COURSE LOG
/*
$wl_xml_clog = "tmp_files/wordlist_tmp_xml_clog_$member.txt";
$fh_wl_xml_clog = fopen($wl_xml_clog, 'w') or die("can't open file $wl_xml_clog");

// FAILS with XML LOAD STRING - see workaround w/ sed script below
// USE PATTERN TO DIFFERENTIATE FROM OTHER IDS
$xml_clog_reference_pattern = '/(clog_ref="[0-9]{8}-[0-9]{4}")/m'; // example: 20190406-2035
if (preg_match_all($xml_clog_reference_pattern,$course_log,$matches)) {

// FOREACH SESSION (i.e. F2F, skype lesson)
     foreach ($matches[0] as $clog_ref) {
       // get only the reference and NOT the whole match
//       $clog_ref = preg_replace ('/clog_ref=/m', ' ', $clog_ref);
       $clog_ref = preg_replace ('/clog_ref=/m', '', $clog_ref);
       $clog_ref = preg_replace ('/"/m', '', $clog_ref);
       // DEBUG ONLY
       echo "clog ref is : ".$clog_ref."\n";
       fwrite($fh_wl_xml_clog, $clog_ref) or die ("can't run fwrite fh_wl_xml_clog clog_ref");

       // get xml contents
      $clog_xml=simplexml_load_string(${'clog_xml_'.$clog_ref});
       // DEBUG ONLY
      //$new_expressions = trim ($clog_xml->clog_expressions);
      $new_expressions = ($clog_xml->clog_expressions."\n");
      echo "<h2>(1=3) new expressions are here: \n</h2>".$new_expressions;
      fwrite($fh_wl_xml_clog, 'print me') or die ("can't run fwrite fh_wl_xml_clog reference->sbook_expressions");
      fwrite($fh_wl_xml_clog, $new_expressions) or die ("can't run fwrite fh_wl_xml_clog reference->sbook_expressions");

      echo "<h2>(4) checkpoint \n</h2>".$new_expressions;
*/

/*
      $new_expressions = new SimpleXmlElement('');
      $new_expressions = trim ($clog_xml->clog_expressions);
      echo "<h2>(5) new expressions are here: \n</h2>".$new_expressions;
//       fwrite($fh_wl_xml_clog, $new_expressions->asXML()) or die ("can't run fwrite fh_wl_xml_clog reference->sbook_expressions");
 */

/*
     } //     foreach ($matches[0] as $clog_ref) {
                 } // close if preg_match_all
fclose($fh_wl_xml_clog) or die("can't fclose fh_wl_xml_clog");
 */

/******************/
// WORKAROUND UNTIL CAN GET XML LOAD STRING TO FUNCTION
// check using array()
// copied from inc/wordlist_generate.inc & updated 20190306
// works for EF + sbook xml_load_file
// solution: see xml_load_file_ref_sbook.inc

$course_log = $content;
$start_marker_clog = "<clog_deco><![CDATA[";
$end_marker_clog = "]]><\/clog_deco>";

// GENERATE DECO IN TSV for XML CLOG
//$marker1 = ";";
$marker1 = "";
$marker2 = "\t";
//$marker3 = ";<br \/>";
//$marker3 = ";\\n";
$marker3 = "\t";
$marker4 = "\t";

$deco_xml_clog = "tmp_files/deco_xml_clog_$member.tsv";
$fh_deco_xml_clog = fopen($deco_xml_clog, 'w') or die("can't open file $deco_xml_clog");

//$sed_output_xml_clog = shell_exec ("sed -n '/$start_marker_clog/,/$end_marker_clog/p' $course_log | sed '/\=/!s/^/JOIN/g;' | sed -e :a -e '$!N;s/\\\nJOIN//;ta' -e 'P;D' | sed -e '/$start_marker_clog/ d; /$end_marker_clog/ d; /$end_marker_clog/ d; s/; / | /g; s/^[ \t]*//g; s/     //g; s/<!--//g; s/-->//g; /^$/ d; s/^/$marker1/; s/ = /$marker2/; s/$/$marker3/;'") or die ("can't run sed for xml clog tsv #1");
$sed_output_xml_clog = shell_exec ("sed -n '/$start_marker_clog/,/$end_marker_clog/p' $course_log ") or die ("can't run sed for xml clog tsv #1");
fwrite($fh_deco_xml_clog, $sed_output_xml_clog); // or die ("can't run fwrite sed_output");
fclose($fh_deco_xml_clog) or die("can't fclose fh_deco_xml_clog");

// GENERATE DECO IN CSV for XML CLOG
$marker10 = "";
$marker20 = ";";
//$marker3 = ";<br \/>";
//$marker3 = ";\\n";
$marker30 = ";";
$marker40 = ";";

$deco_xml_clog = "tmp_files/deco_xml_clog_$member.csv";
$fh_deco_xml_clog = fopen($deco_xml_clog, 'w') or die("can't open file $deco_xml_clog");

$sed_output_xml_clog = shell_exec ("sed -n '/$start_marker_clog/,/$end_marker_clog/p' $course_log ") or die ("can't run sed for xml clog tcsv #1");
fwrite($fh_deco_xml_clog, $sed_output_xml_clog); // or die ("can't run fwrite sed_output");
fclose($fh_deco_xml_clog) or die("can't fclose fh_deco_xml_clog");
?>

<?php
// copied from inc/wordlist_generate.inc & updated 20190306
// works for EF + sbook xml_load_file

//$marker1 = ";";
$marker1 = "";
$marker2 = "\t";
//$marker3 = ";<br \/>";
//$marker3 = ";\\n";
$marker3 = "\t";
$marker4 = "\t";

$file03 = "tmp_files/deco_sbook_$member.tsv";
$fh = fopen($file03, 'w') or die("can't open file $file");
$sed_output_xml_clog = shell_exec ("sed -n '/$start_marker_clog/,/$end_marker_clog/p' $course_log ") or die ("can't run sed for xml clog tsv #1");
fwrite($fh, $sed_output); // or die ("can't run fwrite sed_output");
fclose($fh) or die("can't fclose fh");

//echo "<h3>separated by a semi-colon ;</h3><br />\n";
$marker10 = "";
$marker20 = ";";
//$marker3 = ";<br \/>";
//$marker3 = ";\\n";
$marker30 = ";";
$marker40 = ";";

$file04 = "tmp_files/deco_sbook_$member.csv";
$fh = fopen($file04, 'w') or die("can't open file $file");
$sed_output_xml_clog = shell_exec ("sed -n '/$start_marker_clog/,/$end_marker_clog/p' $course_log ") or die ("can't run sed for xml clog csv #1");
fwrite($fh, $sed_output); // or die ("Your session has expired - Please log in"); // or die ("can't run fwrite sed_output 2");
fclose($fh) or die("can't fclose fh");
?>


<?php
// CAT RESULTS OF (HTML) COURSE LOG + EF + XML CLOG
// ef uses sbook

// tsv + tsv.txt (for iOS)
$file01tsv = file_get_contents("tmp_files/deco_xml_clog_$member.tsv");
$file02tsv = file_get_contents("tmp_files/deco_sbook_$member.tsv");
$file03tsv = file_get_contents("tmp_files/deco_$member.tsv");

$file123tsv = "tmp_files/deco_$member.txt"; // updated 20190407-0309 tsv + ef + xml clog
$fh123tsv = fopen($file123tsv, 'w') or die("can't open file sbook 123tsv");
fwrite($fh123tsv, $file01tsv.$file02tsv.$file03tsv) or die ("can't run fwrite fh123tsv");

fclose($fh123tsv) or die("can't fclose fh123tsv");

// cp tsv.txt to tsv.tsv for iOS users
$file123txt2tsv = "tmp_files/deco_$member.tsv";
$fh123txt2tsv = fopen($file123txt2tsv, 'w') or die("can't open file sbook tsv");
$file123txt2tsv = shell_exec ("cp tmp_files/deco_$member.txt tmp_files/deco_$member.tsv");
fclose($fh123txt2tsv) or die("can't fclose fh123txt2tsv");

// CSV
$file01csv = file_get_contents("tmp_files/deco_xml_clog_$member.csv");
$file02csv = file_get_contents("tmp_files/deco_sbook_$member.csv");
$file03csv = file_get_contents("tmp_files/deco_$member.csv");

$file123csv = "tmp_files/deco_$member.csv";
$fh123csv = fopen($file123csv, 'w') or die("can't open file sbook csv 123");
fwrite($fh123csv, $file01csv.$file02csv.$file03csv) or die ("can't run fwrite fh123 csv");
fclose($fh123csv) or die("can't fclose fh123csv");

echo "favourite mistakes here: <br />";
echo "<div class=\"popup\" onclick=\"popupFunction()\">";
echo "<img src=\"pix/icons8-dictionary-100.png\" width=\"35\" border=\"0\" alt=\"common_mistakes adapted for sbook\">";

echo "<div class=\"popuptext\" id=\"myPopup\">";

echo "<div class=\"tooltip\">";
echo "<img src=\"pix/anymemo_icon01.jpg\" width=\"20\" height=\"20\" alt=\"logo\">";
echo "<a download class=\"clog\" target=\"about_blank\" href=\"tmp_files/common_mistakes_$member.txt\"> txt</a> &nbsp; ";
echo "<div class=\"tooltiptext\">AnyMemo for Android</div>";
echo "</div><!-- end tooltip -->";

echo "<div class=\"tooltip\">";
echo "<img src=\"pix/iphone_icon01.jpg\" width=\"20\" height=\"20\" alt=\"logo\">";
echo "<a download class=\"clog\" target=\"about_blank\" href=\"tmp_files/common_mistakes_$member.tsv\"> tsv</a> &nbsp; ";
echo "<div class=\"tooltiptext\">AnkiApp / iAnki for iPhone and iPad</div>";
echo "</div><!-- end tooltip -->";

echo "<div class=\"tooltip\">";
echo "<img src=\"pix/libre_office_calc01.png\" width=\"20\" height=\"20\" alt=\"logo\">";
echo "<a download class=\"clog\" target=\"about_blank\" href=\"tmp_files/common_mistakes_$member.csv\"> csv</a> &nbsp; &nbsp; <h2>X</h2>";
echo "<div class=\"tooltiptext\">LibreOffice / Anki for Windows, MacOs, Linux...</div>";
echo "</div><!-- end tooltip -->";

echo "</div><!-- close popuptext -->";
echo "</div><!-- close popup -->";

} // if member is not null
?>

<script>
// https://www.w3schools.com/howto/howto_js_popup.asp
// When the user clicks on <div>, open the popup
function popupFunction() {
  var popup = document.getElementById("myPopup");
  popup.classList.toggle("show");
}
</script>
