<?php
/**
 * Main program file of PHPCSV Guestbook
 * See settings.php for configuration.
 * Edit page.php for change appearance.
 * See license.txt for licensing information.
 */
session_start();
include "settings.php";

function SendMail() {
    global $Titles;
    global $GBnotificationmailto;
    global $GBnotificationmailfrom;
    $message=$_POST['name']." ".$Titles[From]." ".$_POST['from']."("
    .$_POST['link'].", ".$_POST['email'].") ".$Titles[Wrote].":\r\n\r\n".$_POST['text']
    ."\r\n\r\n_____\r\n".$Titles[MailAdmin];
    mail($GBnotificationmailto, $Titles[MailSubject], $message,
    "From: ".$GBnotificationmailfrom." \r\n"."Content-type: text/plain; charset=utf-8\r\n"
    ."X-Mailer: PHP/".phpversion());
}

function ReadEntries() {
    global $GBdata;
    global $DataStatus;
    $fhandle=fopen($GBdata,"r") or $DataStatus="empty";
    for($e=0; $entrydata=fgetcsv($fhandle, 16384, ","); $e++) {
        $Entries["$e"]=$entrydata;
        $Entries["$e"][7]=$e+1;
    }
    fclose($fhandle);
    if (!$Entries[0]) $DataStatus="empty";
    return $Entries;
}

function SaveFile() {
    $filename = substr(md5(uniqid()), 0, 13).'.'.pathinfo($_FILES['uploadedfile']['name'], PATHINFO_EXTENSION);
    $uploaddir = 'upload/';
    $uploadfile = $uploaddir.$filename;
    if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $uploadfile)) {
        return $uploadfile;
    } else {
        return false;
    }
}

function CheckFile() {
    global $GBimagesize;
    if (getimagesize($_FILES['uploadedfile']['tmp_name'])) {
        if ((filesize($_FILES['uploadedfile']['tmp_name']))<($GBimagesize)) return SaveFile();
            else return false;
    } else return false;
}

function AddEntry() {
    global $GBdata;
    global $Titles;
    global $PageStatus;
    global $UploadedFile;
    $NewEntry[name]=$_POST['name'];
    $NewEntry[from]=$_POST['from'];
    $NewEntry[link]=$_POST['link'];
    $NewEntry[email]=$_POST['email'];
    if ($UploadedFile) $NewEntry[text]=$_POST['text']." <br><img src=\"$UploadedFile\">";
        else $NewEntry[text]=$_POST['text'];
    $NewEntry[datetime]=time();
    $NewEntry[response]="";
    $fhandle=fopen($GBdata,"a");
    fputcsv($fhandle,$NewEntry);
    fclose($fhandle);
    $PageStatus="added";
    $_SESSION['captcha']="";
}

function AddEntryView() {
    global $Titles;
    global $Values;
    global $PageStatus;
    global $GBcaptcha;
    global $GBtextlenght;
    global $GBupload;
    echo "<h2>",$Titles[Page],"</h2><br>\n";
    if ($PageStatus=="added") echo "$Titles[Added]"; else {
        $captchanumber11=rand(1, 4);
        $captchanumber12=rand(0, 9);
        $captchanumber21=rand(1, 4);
        $captchanumber22=rand(0, 9);
        $_SESSION['captcha']=md5(base64_encode(($captchanumber11.$captchanumber12)+($captchanumber21.$captchanumber22)));
        echo "<form action=index.php method=post enctype=\"multipart/form-data\">\n";
        echo "  $Titles[Name]: <input type=text name=\"name\" value=\"",$Values["name"],"\" maxlength=255> ($Titles[Required])<br>\n";
        echo "  $Titles[City]: <input type=text name=\"from\" value=\"",$Values["from"],"\" maxlength=255><br>\n";
        echo "  $Titles[Link]: <input type=text name=\"link\" value=\"",$Values["link"],"\" maxlength=255><br>\n";
        echo "  $Titles[Email]: <input type=text name=\"email\" value=\"",$Values["email"],"\" maxlength=255> ($Titles[NotPublic])<br>\n";
        echo "  $Titles[Text]:<br>\n  <textarea name=\"text\" wrap=virtual cols=50 rows=5  maxlength=$GBtextlenght>",$Values["text"],"</textarea><br>\n";
        if ($GBupload) {
            echo "  <label for=\"file\">".$Titles[FileUpload]."</label>\n";
            echo "  <input type=\"file\" name=\"uploadedfile\"><br>\n";
        }
        if ($GBcaptcha) echo "  $Titles[Captcha]: <font class=\"text\">$captchanumber11</font><font>$captchanumber11</font><font>$captchanumber12</font> $Titles[CaptchaPlus] <font>$captchanumber21</font><font>$captchanumber22</font><font class=\"text\">$captchanumber21</font> = <input type=text name=\"captcha\" size=2 maxlength=2> ?<br>\n";
        echo "  <input type=submit name=\"submit\" value=\"$Titles[Submit]\">\n";
        echo "</form>\n";
        if ($PageStatus=="emptyname") echo "$Titles[EmptyName]<br>\n";
        if ($PageStatus=="emptytext") echo "$Titles[EmptyText]<br>\n";
        if ($PageStatus=="wrongimage") echo "$Titles[WrongImage]<br>\n";
        if ($PageStatus=="wrongcaptcha") echo "$Titles[WrongCaptcha]<br>\n";
    }
}

function Search($SearchQuery) {
    $Entries=ReadEntries();
    $SearchResultCount=0;
    $SearchResult=false;
    foreach($Entries as $e=>$Entry) {
        for($p=0; $p<7; $p++) {
            if (mb_stristr($Entry[$p],$SearchQuery)) {
                $SearchResult[$SearchResultCount][0]=$e;
                $SearchResult[$SearchResultCount][1]=$Entry;
                $SearchResultCount++;
                break;
            }
        }
    }
    return $SearchResult;
}

function AddSearchBar() {
    global $Titles;
    global $GBsearch;
    if ($GBsearch) {
        echo "<form action=index.php method=post>";
        echo "<input type=text name=\"serachq\" value=\"\" maxlength=255>";
        echo "<input type=submit name=\"search\" value=\"$Titles[Search]\">";
        echo "</form>";
    }
}

function EntriesView() {
    global $Titles;
    global $DataStatus;
    global $Entries;
    global $GBpagination;
    global $GBreadmore;
    if ($DataStatus=="empty") echo "$Titles[EmptyFile]";
        else if($_POST['search']&&$_POST['serachq']) {
            $SearchResult=Search($_POST['serachq']);
            if ($SearchResult) {
                $GBpagination=0;
                unset($Entries);
                foreach($SearchResult as $n=>$Entry) $Entries[$n]=$Entry[1];
            } else echo "$Titles[NoResult]: '",$_POST['serachq'],"'.<br>\n";
        }
        if (($GBpagination>0)&&(count($Entries)>$GBpagination)) {
            $Entries=array_reverse($Entries);
            if ($_GET['page']) switch ($_GET['page']) {
                case $Titles[First]:
                    $CurrentPage=0;
                    break;
                case $Titles[Last]:
                    $CurrentPage=intdiv((count($Entries)-1),$GBpagination);
                    break;
                case "$Titles[Previous]":
                    $CurrentPage=$_SESSION['currentpage']-1;
                    break;
                case "$Titles[Next]":
                    $CurrentPage=$_SESSION['currentpage']+1;
                    break;
                default:
                    $CurrentPage=$_GET['page']-1;
            }
                else $CurrentPage=0;
            for ($e = ($GBpagination*$CurrentPage); $e < ($GBpagination*($CurrentPage+1)); $e++) {
                if ($e>=count($Entries)) break;
                echo "  <div class=\"entry\"><div class=\"messages_header\"><h4>",$Entries[$e][7],". ";
                if ($Entries[$e][2]) echo "<a href=\"",$Entries[$e][2],"\">";
                echo "<b>",$Entries[$e][0],"</b>";
                if ($Entries[$e][2]) echo "</a>";
                if ($Entries[$e][1]) echo " ",$Titles[From]," <b>",$Entries[$e][1],"</b>";
                echo ", ",date("j.m.Y, H:i",$Entries[$e][5]),", ",$Titles[Wrote],":</div></h4><br>\n";
                if ($GBreadmore>0) {
                    $Message=strip_tags($Entries[$e][4]);
                    if (strlen($Message)>$GBreadmore) {
                        $readmorenumber="readmore".$Entries[$e][7];
                        if ($_POST[$readmorenumber]) echo "  ",nl2br($Entries[$e][4]),"<br>\n";
                            else {
                                $Message = substr($Message, 0, $GBreadmore);
                                $Message = substr($Message, 0, strrpos($Message, ' '))."... <form action=\"\" method=\"post\"><button type=\"submit\" name=\"readmore".$Entries[$e][7]."\" value=\"read\" class=\"btn-link\">".$Titles[ReadMore]."</button></form>";
                                echo "  ",nl2br($Message),"<br>\n";
                            }
                    } else echo "  ",nl2br($Entries[$e][4]),"<br>\n";
                } else echo "  ",nl2br($Entries[$e][4]),"<br>\n";
                if ($Entries[$e][6]) echo "<br><i><b>$Titles[Response]:</b><br>\n";
                if ($Entries[$e][6]) echo nl2br($Entries[$e][6]),"</i><br>\n";
                echo "</div><hr>\n";
            }
            echo "<form action=index.php method=\"get\">\n";
            if ($CurrentPage>0) {
                echo "    <input type=\"submit\" value=\"$Titles[First]\" name=\"page\"/>\n";
                echo "    <input type=\"submit\" value=\"$Titles[Previous]\" name=\"page\"/>\n";
            }
            for ($p = ($CurrentPage-2); $p <= ($CurrentPage+2); $p++) {
                $page = $p+1;
                if (($p>=0)&&($p<(count($Entries)/$GBpagination))) {
                    echo "    <input type=\"submit\" value=\"$page\" name=\"page\"";
                    if ($p==$CurrentPage) echo " disabled";
                    echo "/>\n";
                }
            }
            if ($CurrentPage<((count($Entries)/$GBpagination)-1)) {
                echo "    <input type=\"submit\" value=\"$Titles[Next]\" name=\"page\"/>\n";
                echo "    <input type=\"submit\" value=\"$Titles[Last]\" name=\"page\"/>\n";
            }
            echo "</form>\n";
            $_SESSION['currentpage']=$CurrentPage;
        } else {
            $Entries=array_reverse($Entries);
            foreach($Entries as $e=>$Entry) {
                echo "  <div class=\"entry\"><div class=\"messages_header\"><h4>",$Entry[7],". ";
                if ($Entry[2]) echo "<a href=\"$Entry[2]\">";
                echo "<b>",$Entry[0],"</b>";
                if ($Entry[2]) echo "</a>";
                if ($Entry[1]) echo " ",$Titles[From]," <b>",$Entry[1],"</b>";
                echo ", ",date("j.m.Y, H:i",$Entry[5]),", ",$Titles[Wrote],":</div></h4><br>\n";
                if (($GBreadmore>0)&&(!$SearchResult)) {
                    $Message=strip_tags($Entries[$e][4]);
                    if (strlen($Message)>$GBreadmore) {
                        $readmorenumber="readmore".$Entries[$e][7];
                        if ($_POST[$readmorenumber]) echo "  ",nl2br($Entries[$e][4]),"<br>\n";
                            else {
                                $Message = substr($Message, 0, $GBreadmore);
                                $Message = substr($Message, 0, strrpos($Message, ' '))."... <form action=\"\" method=\"post\"><button type=\"submit\" name=\"readmore".$Entries[$e][7]."\" value=\"read\" class=\"btn-link\">".$Titles[ReadMore]."</button></form>";
                                echo "  ",nl2br($Message),"<br>\n";
                            }
                    } else echo "  ",nl2br($Entries[$e][4]),"<br>\n";
                } else echo "  ",nl2br($Entries[$e][4]),"<br>\n";
                if ($Entry[6]) echo "<br><i><b>$Titles[Response]:</b><br>\n";
                if ($Entry[6]) echo nl2br($Entry[6]),"</i><br>\n";
                echo "</div><hr>\n";
            }
        }
}

if($_POST['submit']) {
    if (!$_POST['text']) $PageStatus="emptytext";
    if (!$_POST['name']) $PageStatus="emptyname";
    if ($GBupload) {
        if ($_FILES['uploadedfile']['tmp_name']) {
            $UploadedFile=CheckFile();
            if (!$UploadedFile) {
                $PageStatus="wrongimage";
            }
        }
    }
    if (($_POST['name'])&&($_POST['text']))
        if ($_POST["captcha"]&&(md5(base64_encode($_POST["captcha"]))==$_SESSION["captcha"])) {
            if (!$PageStatus=="wrongimage") {
                AddEntry();
                if ($GBnotificationmailto) SendMail();
            }
        } else if (!$GBcaptcha) {
                if (!$PageStatus=="wrongimage") {
                    AddEntry();
                    if ($GBnotificationmailto) SendMail();
                }
            } else $PageStatus="wrongcaptcha";
    if (($PageStatus)&&!($PageStatus=="added")) {
        $SESSION["value"]["name"]=$_POST['name'];
        $SESSION["value"]["from"]=$_POST['from'];
        $SESSION["value"]["link"]=$_POST['link'];
        $SESSION["value"]["email"]=$_POST['email'];
        $SESSION["value"]["text"]=$_POST['text'];
        $Values=$SESSION["value"];
    } else Unset($SESSION["value"]);
}

$Entries=ReadEntries();

include "page.php";
?>