- <?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']) && 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->setTimestamp($ymd);
- $date = $dateTime->format('Y-m-d');
- $ymd2 = date("Y-m-d", strtotime("$date"));
- //echo $ymd2;
-
- $returnstring = "<div class=\"sub-header\">$justdate</div>\n";
- $count = 0;
-
- $moodfile = @fopen($moodlog, "r");
- if ($moodfile) {
- while (($line = fgets($moodfile)) !== false) {
- /***
- * if date < 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 <> ""){
- 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) < $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 .= "<span class=\"datehist\">$fulldate</span>\n<span class=\"hpyhist\">[$mood]</span><span class=\"pretexthist\">$newstr</span>\n";
-
- foreach($newpos as $pos)
- $returnstring .= "<span class=\"preposhist\" onclick=\"addFilterPos($(this).text());\">$pos</span>\n";
- foreach($newneg as $neg)
- $returnstring .= "<span class=\"preneghist\" onclick=\"addFilterNeg($(this).text());\">$neg</span>\n";
- foreach($newcon as $con)
- $returnstring .= "<span class=\"preconhist\" onclick=\"addFilterCon($(this).text());\">$con</span>\n";
- $returnstring .= "<br />";
- }
-
- }
- fclose($moodfile);
- return ($count > 0)? $returnstring : "0";
- } else {
- return "!ERROR! File: ".$moodfile." doesn't exist. !ERROR!<br />";
- }
- }
-
- function main_cal(){
- global $moodlog;
- $toreturn = "";
-
- $moodfile = @fopen($moodlog, "r");
- if ($moodfile) {
- $newtimes = array();
- while (($line = fgets($moodfile)) !== false) {
- /***
- * if date < 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) < $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->setDate($dt2[0], $dt2[1], $dtd[0]);
- //$justdate = $dateTime->format('Y-m-d');
- $dtd = explode(" ", $datetime);
- $justdate = $dtd[0];
-
- $newtimes[$justdate][] = $mood;
- }
- fclose($moodfile);
- foreach($newtimes as $date=>$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->setDate($dt22[0], $dt22[1], $dtd2[0]);
- $justdate2 = $dateTime->getTimestamp();
-
- $toreturn .= "\"$justdate2\":$average,";
- }
-
- return substr($toreturn, 0, -1);
- } else {
- return "!ERROR! File: ".$moodfile." doesn't exist. !ERROR!<br />";
- }
- }
-
- 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 < 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) < $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=>$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!<br />";
- }
- }
-
- 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->setTimestamp($ymd);
- $date = $dateTime->format('Y-m-d');
- $date = date("Y-m-d", strtotime("$date"));
-
- //$currentTime = new DateTime();
- //$currentTime = DateTime::createFromFormat( 'U', $ymd );
- //$date = $currentTime->format( 'c' );
-
- $cutoff = strtotime("$date -0 day");
-
- //echo $date." cutoff: ".$cutoff;
- //$date = new DateTime();
- //$date->setTimestamp($ymd);
- //echo $date->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) < $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 <> ""){
- 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!<br />";
- }
- }
-
- 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 <> ""){
- 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!<br />";
- }
- }
-
- 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 <> ""){
- 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!<br />";
- }
- }
-
- 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";
- }
-
- ?>
-
- <html>
- <head>
-
- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
- <script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script>
- <script type="text/javascript" src="https://cdn.jsdelivr.net/cal-heatmap/3.3.10/cal-heatmap.min.js"></script>
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/cal-heatmap/3.3.10/cal-heatmap.css" />
- <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700" rel="stylesheet">
- <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
- <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
- <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
- <link rel="stylesheet" href="style.css" >
- </head>
- <body>
-
- <center>
- <?php if($error <> ""){echo $error; } ?>
-
- <div class="banner">
- <div class="header"><a href="/?logout"><i class="fas fa-heartbeat" ></i></a> moodlog.txt</div>
-
- <div class="new-log">
-
- <input type="range" id="happyval" value="5" min="1" max="10"/>
- <input class="input" id="tags" placeholder="(+,-,@) description"/>
- <input type="button" value="+" onClick="updatePretext();"/>
- <input type="button" value="add" class="add" onClick="submitMood();"/>
-
- </div>
- <div class="preview">
- <span class="date">2018-09-11 20:27</span><span class="hpyno">[5]</span><span class="pretext" onClick="updatePretext();"></span></div>
-
- <div class="filter" style="display:none">
- <span class="filtitle">Filters:</span>
- <span class="fas fa-search" style="float:right;font-size:15px;" onclick="applyFilters();"></span>
- </div>
- </div>
-
- <div id="cal-heatmap"></div>
-
- <div class="top10s">
- <div class="toppos">
- <div class="sub-header">Top 5 positive</div>
- </div>
- <div class="topneg">
- <div class="sub-header">Top 5 negative</div>
- </div>
- <div class="topcon">
- <div class="sub-header">Top 5 context</div>
- </div>
- <div class="latpos">
- <div class="sub-header">Latest 5 positive</div>
- </div>
- <div class="latneg">
- <div class="sub-header">Latest 5 negative</div>
- </div>
- <div class="latcon">
- <div class="sub-header">Latest 5 context</div>
- </div>
- </div>
-
- <div class="fullday">
- <div class="previewhist">
-
- <?php
- $result = today(date("Y-m-d"));
- if($result != "0")
- echo $result;
- ?>
-
- </div>
- </div>
- </center>
-
- <script src="script.js"></script>
-
- </body>
- </html>