<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">&lt;?php
/*
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
*/
session_start();
include('config.php');
$error = "";

if(isset($_REQUEST['password']) &amp;&amp; md5($_REQUEST['password']) == $password){
	$_SESSION['loggedin'] = true;
}

if(!isset($_SESSION['loggedin']) || isset($_GET['logout'])){
	if(isset($_SESSION['loggedin']))
		unset($_SESSION['loggedin']);
	include('login.html');
	die();
}

/***
 * actions here for API / AJAX 
 */
if(isset($_GET['action'])){
	switch ($_GET['action']) {
		case 'main_cal': // get unfiltered main cal averages - output JSON
			header('Content-Type: application/json');
			$result = main_cal();
			echo "{".$result."}";
			break;
		case 'filtered_cal': // get filtered main cal averages (filter=+test-test@test-test...) - output JSON
			header('Content-Type: application/json');
			if(isset($_GET['filter'])){
				$result = filtered_cal($_GET['filter']);
				echo "{".$result."}";
			}else{
				echo "0";
			}
			break;
		case 'date': // get specific date's log - output HTML
			if(isset($_GET['date'])){
				$result = today($_GET['date']);
				echo $result;
			}else{
				echo "0";
			}
			break;
		case 'date_average': // get specific date's average - output no.
			if(isset($_GET['date'])){
				$result = day_avg($_GET['date']);
				echo $result;
			}else{
				echo "0";
			}
			break;
		case 'latest': // get latest 5 tags - output JSON
			if(isset($_GET['tag'])){
				$result = latest($_GET['tag']);
				echo $result;
			}else{
				echo "0";
			}
			break;
		case 'top': // get top 5 tags - output JSON
			if(isset($_GET['tag'])){
				$result = toptag($_GET['tag']);
				echo $result;
			}else{
				echo "0";
			}
			break;
		case 'alltag': // get all tags in popularity order - output JSON
			$result = alltag();
			echo $result;
			break;
		case 'save':
			if(isset($_GET['log'])){ // save a new moodlog
				$result = new_log($_GET['log']);
				echo $result;
			}else{
				echo "0";
			}
			break;
		default:
			# code...
			break;
	}
	die();
}

//$result = today("2018-09-13");
//echo $result;

function today($ymd){
	global $moodlog;
	$ymd = strtotime($ymd);
	$dateTime = new \DateTime(null, new DateTimeZone('Europe/London'));
	$dateTime-&gt;setTimestamp($ymd);
	$date = $dateTime-&gt;format('Y-m-d');
	$ymd2 = date("Y-m-d", strtotime("$date"));
//echo $ymd2;

	$returnstring = "&lt;div class=\"sub-header\"&gt;$justdate&lt;/div&gt;\n";
	$count = 0;

	$moodfile = @fopen($moodlog, "r");
	if ($moodfile) {
	    while (($line = fgets($moodfile)) !== false) {
	    	/***
	    	 * if date &lt; cutoff stop adding
	    	 */
	    	$cutoff = $date = strtotime(date("Y-m-d", strtotime("$ymd2 -0 day")));

	     	$newpos = array();
	     	$newneg = array();
	     	$newcon = array();
	     	$newstr = "";

	        $split1 = explode("[", $line);
	        $split2 = explode("]", $split1[1]);
	        $words = explode(" ", $split2[1]);
	        foreach($words as $word){
	        	if($word &lt;&gt; ""){
		        	switch (mb_substr($word[0], 0, 1)) {
		        		case '+':
		        			$newpos[] = $word;
		        			break;
		        		case '-':
		        			$newneg[] = $word;
		        			break;
		        		case '@':
		        			$newcon[] = $word;
		        			break;
		        		default:
		        			$newstr .= " $word";
		        			break;
		        	}
		        }
	        }

	        $datetime = $split1[0];
	        if(strtotime($datetime) &lt; $cutoff)
	        	break;
	        $justdate = date("Y-m-d", strtotime($datetime));
	        if(strtotime($ymd2) == strtotime($justdate)){
	        	$count++;
		        $mood = $split2[0];
		        $fulldate = date("Y-m-d H:i", strtotime($datetime));
				$returnstring .= "&lt;span class=\"datehist\"&gt;$fulldate&lt;/span&gt;\n&lt;span class=\"hpyhist\"&gt;[$mood]&lt;/span&gt;&lt;span class=\"pretexthist\"&gt;$newstr&lt;/span&gt;\n";

				foreach($newpos as $pos)
		       		$returnstring .= "&lt;span class=\"preposhist\" onclick=\"addFilterPos($(this).text());\"&gt;$pos&lt;/span&gt;\n";
		       	foreach($newneg as $neg)
		       		$returnstring .= "&lt;span class=\"preneghist\" onclick=\"addFilterNeg($(this).text());\"&gt;$neg&lt;/span&gt;\n";
		       	foreach($newcon as $con)
		       		$returnstring .= "&lt;span class=\"preconhist\" onclick=\"addFilterCon($(this).text());\"&gt;$con&lt;/span&gt;\n";
		       	$returnstring .= "&lt;br /&gt;";
	     	}
	       	
	    }
	    fclose($moodfile);
	    return ($count &gt; 0)? $returnstring : "0";
	} else {
	    return "!ERROR! File: ".$moodfile." doesn't exist. !ERROR!&lt;br /&gt;";
	} 
}

function main_cal(){
	global $moodlog;
	$toreturn = "";
	
	$moodfile = @fopen($moodlog, "r");
	if ($moodfile) {
		$newtimes = array();
	    while (($line = fgets($moodfile)) !== false) {
	    	/***
	    	 * if date &lt; cutoff stop adding
	    	 */
	    	$cutoff = $date = strtotime(date("Y-m-d", strtotime("-10 month")));

	        $split1 = explode("[", $line);
	        $split2 = explode("]", $split1[1]);

	        $datetime = $split1[0];
	        if(strtotime($datetime) &lt; $cutoff)
	        	break;

	        $mood = $split2[0];
	        //$justdate = date("Y-m-d", strtotime($datetime));
	         //$dt2 = explode("-", $datetime);
		 //$dtd = explode(" ", $dt2[2]);
		 //$dateTime = new \DateTime(null, new DateTimeZone('Europe/London'));
		 //$dateTime-&gt;setDate($dt2[0], $dt2[1], $dtd[0]);
		 //$justdate = $dateTime-&gt;format('Y-m-d');
		$dtd = explode(" ", $datetime);
		$justdate = $dtd[0];

		$newtimes[$justdate][] = $mood;
	    }
	    fclose($moodfile);
	    foreach($newtimes as $date=&gt;$md){
	    	$average = round(array_sum($md) / count($md));
	    	
//$datetime = strtotime($date);
		$dt22 = explode("-", $date);
                $dtd2 = explode(" ", $dt22[2]);
                $dateTime = new \DateTime(null, new DateTimeZone('Europe/London'));
                $dateTime-&gt;setDate($dt22[0], $dt22[1], $dtd2[0]);
                $justdate2 = $dateTime-&gt;getTimestamp();

	    	$toreturn .= "\"$justdate2\":$average,";
	    }

	    return substr($toreturn, 0, -1);
	} else {
	    return "!ERROR! File: ".$moodfile." doesn't exist. !ERROR!&lt;br /&gt;";
	} 
}

function filtered_cal($filter){
	global $moodlog;
	$toreturn = "";

	$pattern = '/(?=[+-@][a-zA-Z0-9])/';
	$limit = -1;
	$flags = PREG_SPLIT_NO_EMPTY;
	$tags = preg_split ($pattern, $filter, $limit, $flags);

	$moodfile = @fopen($moodlog, "r");
	if ($moodfile) {
		$newtimes = array();
	    while (($line = fgets($moodfile)) !== false) {
	    	/***
	    	 * if date &lt; cutoff stop adding
	    	 */
	    	$cutoff = $date = strtotime(date("Y-m-d", strtotime("-10 month")));

	        $split1 = explode("[", $line);
	        $split2 = explode("]", $split1[1]);

	        $datetime = $split1[0];
	        if(strtotime($datetime) &lt; $cutoff)
	        	break;

	        $mood = $split2[0];
	        $justdate = date("Y-m-d", strtotime($datetime));

	        $words = explode(" ", $split2[1]);
	        
	        foreach($words as $word){
	        	$word = trim($word);
	        	if (in_array($word, $tags, true))
	        		$newtimes[$justdate][] = $mood;
	        }
	        
	    }
	    fclose($moodfile);
	    foreach($newtimes as $date=&gt;$md){
	    	$average = round(array_sum($md) / count($md));
	    	$datetime = strtotime("$date");
	    	$toreturn .= "\"$datetime\":$average,";
	    }

	    return substr($toreturn, 0, -1);
	} else {
	    return "!ERROR! File: ".$moodfile." doesn't exist. !ERROR!&lt;br /&gt;";
	} 
}

function day_avg($ymd){
	global $moodlog;
	$mood = array();
	$average = 0;

	$moodfile = @fopen($moodlog, "r");
	//$date = date("Y-m-d", $ymd);
	//$date = date("Y-m-d", strtotime("$date +1 day"));

	$dateTime = new \DateTime(null, new DateTimeZone('Europe/London'));
	$dateTime-&gt;setTimestamp($ymd);
	$date = $dateTime-&gt;format('Y-m-d');
	$date = date("Y-m-d", strtotime("$date"));

	//$currentTime = new DateTime();
	//$currentTime = DateTime::createFromFormat( 'U', $ymd );
	//$date = $currentTime-&gt;format( 'c' );

	$cutoff = strtotime("$date -0 day");
	
	//echo $date." cutoff: ".$cutoff;
	//$date = new DateTime();
	//$date-&gt;setTimestamp($ymd);
	//echo $date-&gt;format('U = Y-m-d H:i:s') . "\n";

	if ($moodfile) {
	    while (($line = fgets($moodfile)) !== false) {

	        $split1 = explode("[", $line);
	        $split2 = explode("]", $split1[1]);

	        $datetime = $split1[0];
	        if(strtotime($datetime) &lt; $cutoff)
	        	break;

	        if(strncmp($date, $datetime, 10) == 0 )
		        $mood[] = $split2[0];	
	    }
	 //   echo "$ymd ";
	 //   echo $date;
	 //   print_r($mood);
	    if($mood)
	    	$average = round(array_sum($mood) / count($mood));
	    return $average;
	} else {
	    return "0";
	} 
}

function latest($tag){
	global $moodlog;
	$count = 0;
	

	$newpos = array();
 	$newneg = array();
 	$newcon = array();

	$moodfile = @fopen($moodlog, "r");
	if ($moodfile) {
	    while (($line = fgets($moodfile)) !== false) {

	     	$newstr = "";

	        $split1 = explode("[", $line);
	        $split2 = explode("]", $split1[1]);
	        $words = explode(" ", $split2[1]);
	        foreach($words as $word){
	        	if($word &lt;&gt; ""){
		        	switch (mb_substr($word[0], 0, 1)) {
		        		case '+':
		        			$newpos[] = trim($word);
		        			break;
		        		case '-':
		        			$newneg[] = trim($word);
		        			break;
		        		case '@':
		        			$newcon[] = trim($word);
		        			break;
		        	}
		        }
	        }

	       
	       	
	    }
	    fclose($moodfile);
	    switch ($tag) {
			case 'pos':
				$newpos = array_unique($newpos);
				$newArray = array_slice($newpos, 0, 5, false);
				break;
			case 'neg':
				$newneg = array_unique($newneg);
				$newArray = array_slice($newneg, 0, 5, false);
				break;
			case 'con':
				$newcon = array_unique($newcon);
				$newArray = array_slice($newcon, 0, 5, false);
				break;
			default:
				return 0;
				break;
		}
		return json_encode($newArray);
	    
	} else {
	    return "!ERROR! File: ".$moodfile." doesn't exist. !ERROR!&lt;br /&gt;";
	} 
}

function toptag($tag){
	global $moodlog;
	$count = 0;
	

	$newpos = array();
 	$newneg = array();
 	$newcon = array();

	$moodfile = @fopen($moodlog, "r");
	if ($moodfile) {
	    while (($line = fgets($moodfile)) !== false) {

	     	$newstr = "";

	        $split1 = explode("[", $line);
	        $split2 = explode("]", $split1[1]);
	        $words = explode(" ", $split2[1]);
	        foreach($words as $word){
	        	if($word &lt;&gt; ""){
		        	switch (mb_substr($word[0], 0, 1)) {
		        		case '+':
		        			$newpos[] = trim($word);
		        			break;
		        		case '-':
		        			$newneg[] = trim($word);
		        			break;
		        		case '@':
		        			$newcon[] = trim($word);
		        			break;
		        	}
		        }
	        }

	       
	       	
	    }
	    fclose($moodfile);
	    switch ($tag) {
			case 'pos':
				$acv=array_count_values($newpos); 
				arsort($acv); 
				$result=array_keys($acv); 
				$newArray = array_slice($result, 0, 5, false);
				break;
			case 'neg':
				$acv=array_count_values($newneg); 
				arsort($acv); 
				$result=array_keys($acv); 
				$newArray = array_slice($result, 0, 5, false);
				break;
			case 'con':
				$acv=array_count_values($newcon); 
				arsort($acv); 
				$result=array_keys($acv); 
				$newArray = array_slice($result, 0, 5, false);
				break;
			default:
				return 0;
				break;
		}
		return json_encode($newArray);
	    
	} else {
	    return "!ERROR! File: ".$moodfile." doesn't exist. !ERROR!&lt;br /&gt;";
	} 
}

function alltag(){
	global $moodlog;
	$count = 0;
	

	$newtag= array();

	$moodfile = @fopen($moodlog, "r");
	if ($moodfile) {
	    while (($line = fgets($moodfile)) !== false) {

	     	$newstr = "";

	        $split1 = explode("[", $line);
	        $split2 = explode("]", $split1[1]);
	        $words = explode(" ", $split2[1]);
	        foreach($words as $word){
	        	if($word &lt;&gt; ""){
		        	switch (mb_substr($word[0], 0, 1)) {
		        		case '+':
		        			$newtag[] = trim($word);
		        			break;
		        		case '-':
		        			$newtag[] = trim($word);
		        			break;
		        		case '@':
		        			$newtag[] = trim($word);
		        			break;
		        	}
		        }
	        }  	
	    }
	    fclose($moodfile);
	    
		$acv=array_count_values($newtag); 
		arsort($acv); 
		$result=array_keys($acv); 
		
		return json_encode($result);
	    
	} else {
	    return "!ERROR! File: ".$moodfile." doesn't exist. !ERROR!&lt;br /&gt;";
	} 
}

function new_log($log){
	global $moodlog;
	$pattern = '/(?=[+-@|][a-zA-Z0-9])/';
	$limit = -1;
	$flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE;
	$result = preg_split ($pattern, $log, $limit, $flags);
	//print_r($result);

	$timestamp = date("Y-m-d H:i");
	$no = rtrim($result[0], "|");
	$msg = "";
	$pos = "";
	$neg = "";
	$con = "";

	foreach($result as $item){
		switch ($item[0]) {
			case '|':
				$msg .= substr($item, 1)." ";
				break;
			case '+':
				$pos .= "$item ";
				break;
			case '-':
				$neg .= "$item ";
				break;
			case '@':
				$con .= "$item ";
				break;
		}
	}
	$toadd = "$timestamp [$no] ".$msg.$pos.$neg.$con."\n";
	$toadd .= file_get_contents($moodlog);
	file_put_contents($moodlog, $toadd);
	echo "1";
}

?&gt;

&lt;html&gt;
	&lt;head&gt;

		&lt;link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous"&gt;
		&lt;script type="text/javascript" src="https://d3js.org/d3.v3.min.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="https://cdn.jsdelivr.net/cal-heatmap/3.3.10/cal-heatmap.min.js"&gt;&lt;/script&gt;
		&lt;link rel="stylesheet" href="https://cdn.jsdelivr.net/cal-heatmap/3.3.10/cal-heatmap.css" /&gt;
		&lt;link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700" rel="stylesheet"&gt;
		&lt;link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"&gt;
		&lt;link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous"&gt;
  		&lt;script src="https://code.jquery.com/jquery-1.12.4.js"&gt;&lt;/script&gt;
  		&lt;script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"&gt;&lt;/script&gt;
		&lt;link rel="stylesheet" href="style.css" &gt;
	&lt;/head&gt;
	&lt;body&gt;
		
		&lt;center&gt;
			&lt;?php if($error &lt;&gt; ""){echo $error; } ?&gt;

			&lt;div class="banner"&gt;
				&lt;div class="header"&gt;&lt;a href="/?logout"&gt;&lt;i class="fas fa-heartbeat" &gt;&lt;/i&gt;&lt;/a&gt; moodlog.txt&lt;/div&gt;

				&lt;div class="new-log"&gt;
					
					  &lt;input type="range" id="happyval" value="5" min="1" max="10"/&gt;
					  &lt;input  class="input" id="tags" placeholder="(+,-,@) description"/&gt;
					  &lt;input type="button" value="+" onClick="updatePretext();"/&gt;
					  &lt;input type="button" value="add" class="add" onClick="submitMood();"/&gt;
					
				&lt;/div&gt;
				&lt;div class="preview"&gt;
					&lt;span class="date"&gt;2018-09-11 20:27&lt;/span&gt;&lt;span class="hpyno"&gt;[5]&lt;/span&gt;&lt;span class="pretext" onClick="updatePretext();"&gt;&lt;/span&gt;&lt;/div&gt;

				&lt;div class="filter" style="display:none"&gt;
					&lt;span class="filtitle"&gt;Filters:&lt;/span&gt;
					&lt;span class="fas fa-search" style="float:right;font-size:15px;" onclick="applyFilters();"&gt;&lt;/span&gt;
				&lt;/div&gt;
			&lt;/div&gt;

			&lt;div id="cal-heatmap"&gt;&lt;/div&gt;

			&lt;div class="top10s"&gt;
				&lt;div class="toppos"&gt;
					&lt;div class="sub-header"&gt;Top 5 positive&lt;/div&gt;
				&lt;/div&gt;
				&lt;div class="topneg"&gt;
					&lt;div class="sub-header"&gt;Top 5 negative&lt;/div&gt;
				&lt;/div&gt;
				&lt;div class="topcon"&gt;
					&lt;div class="sub-header"&gt;Top 5 context&lt;/div&gt;
				&lt;/div&gt;
				&lt;div class="latpos"&gt;
					&lt;div class="sub-header"&gt;Latest 5 positive&lt;/div&gt;
				&lt;/div&gt;
				&lt;div class="latneg"&gt;
					&lt;div class="sub-header"&gt;Latest 5 negative&lt;/div&gt;
				&lt;/div&gt;
				&lt;div class="latcon"&gt;
					&lt;div class="sub-header"&gt;Latest 5 context&lt;/div&gt;
				&lt;/div&gt;
			&lt;/div&gt;

			&lt;div class="fullday"&gt;
				&lt;div class="previewhist"&gt;
					
					&lt;?php
						$result = today(date("Y-m-d"));
						if($result != "0")
							echo $result;
					?&gt;
					
				&lt;/div&gt;
			&lt;/div&gt;
		&lt;/center&gt;

		&lt;script src="script.js"&gt;&lt;/script&gt;
 
	&lt;/body&gt;
&lt;/html&gt;
</pre></body></html>