<?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; global $GBcityfield; global $GBlinkfield; global $GBsubjectfield; global $GBcategoryfield; $message=$_POST["name"]; if ($GBcityfield) $message=$message." ".$Titles["From"]." ".$_POST["from"]; $message=$message."("; if ($GBlinkfield) $message=$message.$_POST["link"].", "; $message=$message.$_POST["email"].") ".$Titles["Wrote"]; if ($GBsubjectfield) $message=$message." ".$_POST["subj"]; if ($GBcategoryfield) $message=$message." [".$_POST["category"]."]"; $message=$message.":\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"][10]=$e+1; } fclose($fhandle); if (!isset($Entries[0])) $DataStatus="empty"; else 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 AddHttp($Link) { if (!$Link=="") if (!preg_match("~^(?:f|ht)tps?://~i",$Link)) { $Link = "http://".$Link; } return $Link; } function AddEntry() { global $GBdata; global $Titles; global $PageStatus; global $UploadedFile; global $GBcityfield; global $GBlinkfield; global $GBsubjectfield; global $GBcategoryfield; global $GBstriptags; if (!$GBstriptags) $NewEntry["name"]=$_POST["name"]; else $NewEntry["name"]=strip_tags($_POST["name"]); if ($GBcityfield) { if (!$GBstriptags) $NewEntry["from"]=$_POST["from"]; else $NewEntry["from"]=strip_tags($_POST["from"]); } else $NewEntry["from"]=""; if ($GBlinkfield) { if (!$GBstriptags) $NewEntry["link"]=AddHttp($_POST["link"]); else $NewEntry["link"]=AddHttp(strip_tags($_POST["link"])); } else $NewEntry["link"]=""; $NewEntry["email"]=$_POST["email"]; if (!$GBstriptags) $NewEntry["text"]=$_POST["text"]; else $NewEntry["text"]=strip_tags($_POST["text"]); if ($UploadedFile) $NewEntry["text"]=$NewEntry["text"]." <br><img src=\"$UploadedFile\">"; $NewEntry["datetime"]=time(); $NewEntry["response"]=""; if ($GBsubjectfield) { if (!$GBstriptags) $NewEntry["subj"]=$_POST["subj"]; else $NewEntry["subj"]=strip_tags($_POST["subj"]); } else $NewEntry["subj"]=""; if ($GBcategoryfield) $NewEntry["category"]=strip_tags($_POST["category"]); else $NewEntry["category"]=""; if (isset($_SESSION["reply"])) { $NewEntry["reply"]=$_SESSION["reply"][5]; unset($_SESSION["reply"]); } else $NewEntry["reply"]=""; $NewEntry["number"]=""; $NewEntry["lock"]=""; $NewEntry["sticky"]=""; $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; global $GBcityfield; global $GBlinkfield; global $GBsubjectfield; global $GBcategoryfield; echo "<h2>",$Titles["Page"],"</h2><br>\n"; if ($PageStatus=="added") echo $Titles["Added"]."<br>\n"; $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"; if ($GBcityfield) echo " ",$Titles["City"],": <input type=text name=\"from\" value=\"",$Values["from"],"\" maxlength=255><br>\n"; if ($GBlinkfield) 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"; if ($GBsubjectfield) echo " ",$Titles["Subject"],": <input type=text name=\"subj\" value=\"",$Values["subj"],"\" maxlength=255><br>\n"; if ($GBcategoryfield) { echo " ",$Titles["Category"],": <select name=\"category\">"; foreach($GBcategoryfield as $Category) { echo " <option value=\"$Category\""; if ($Values["category"]==$Category) echo " selected=\"selected\""; echo ">$Category</option>"; } echo "</select><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<9; $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; global $GBcategoryfield; if ($GBsearch) { echo "<form action=index.php method=post>"; if ($GBcategoryfield) { echo "<input type=text name=\"serachq\" value=\"\" maxlength=255 list=\"browsers\">"; echo "<datalist id=\"browsers\">"; foreach ($GBcategoryfield as $category) echo " <option value=\"",$category,"\">"; echo "</datalist>"; } else echo "<input type=text name=\"serachq\" value=\"\" maxlength=255>"; echo "<input type=submit name=\"search\" value=\"",$Titles["Search"],"\">"; echo "</form>"; } } function SinlgeEntry($Entry) { global $Titles; global $GBreplies; global $GBreadmore; global $GBcityfield; global $GBlinkfield; global $GBsubjectfield; global $GBcategoryfield; global $GBshownumbers; global $GBreplies; echo " "; if ($GBreplies&&isset($Entry[9])&&$Entry[9]) echo "<div class=\"reply\">"; echo "<div class=\"entry\"><div class=\"messages_header\"><h4>"; if ($Entry[11]) echo "[",$Titles["Locked"],"] "; if ($Entry[12]) echo "[",$Titles["Sticky"],"] "; if ($GBreplies&&isset($Entry[9])&&$Entry[9]) echo "⤷ "; else echo "◦ "; if ($GBshownumbers) echo $Entry[10],". "; 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]),", "; if ($GBreplies&&isset($Entry[9])&&$Entry[9]) { echo $Titles["Replied"]; } else echo $Titles["Wrote"]; if (($GBsubjectfield)&&($Entry[7])) echo " ",$Titles["About"]," '",$Entry[7],"'"; if (($GBcategoryfield)&&($Entry[8])) echo " [",$Entry[8],"]"; echo ":</div></h4><br>\n"; if ($GBreadmore>0) { $Message=strip_tags($Entry[4]); if (strlen($Message)>$GBreadmore) { $readmorenumber="readmore".$Entry[10]; if ($_POST[$readmorenumber]) echo " ",nl2br($Entry[4]),"<br>\n"; else { $Message = substr($Message, 0, $GBreadmore); $Message = substr($Message, 0, strrpos($Message, ' '))."... <form action=\"\" method=\"post\"><button type=\"submit\" name=\"readmore".$Entry[10]."\" value=\"read\" class=\"btn-link\">".$Titles["ReadMore"]."</button></form>"; echo " ",nl2br($Message),"<br>\n"; } } else echo " ",nl2br($Entry[4]),"<br>\n"; } else echo " ",nl2br($Entry[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"; if ($GBreplies&&!($Entry[11])) { echo "<form action=index.php method=post>"; echo "<p align=\"right\"><button type=submit name=\"reply\" value=\"",$Entry[10],"\">",$Titles["Reply"],"</button></p>"; echo "</form>"; } echo "</div>"; if ($GBreplies&&isset($Entry[9])&&$Entry[9]) echo "</div>"; echo "<hr>\n"; } function EntriesView() { global $Titles; global $DataStatus; global $Entries; global $GBpagination; global $GBreadmore; global $GBcityfield; global $GBlinkfield; global $GBsubjectfield; global $GBcategoryfield; global $GBreplies; global $GBstickylocked; if (isset($_SESSION["reply"])) { echo $Titles["Replying"],"<br>\n"; } if ($GBstickylocked) { if (isset($Entries)) { $EntriesStickySorted=$Entries; $i = count($Entries); while (--$i >= 0) { if (isset($EntriesStickySorted[$i][12])&&($EntriesStickySorted[$i][12]=="on")) { $item = $EntriesStickySorted[$i]; unset($EntriesStickySorted[$i]); array_push($EntriesStickySorted, $item); } } $Entries=array_values($EntriesStickySorted); } } if ($GBreplies) { if (isset($Entries)) { $EntriesReplySorted=$Entries; foreach($Entries as $Entry) { if (isset($Entry[9])) { unset($a); unset($b); foreach($EntriesReplySorted as $n=>$EntrySort) if ($EntrySort[5]==$Entry[5]) $a=$n; foreach($EntriesReplySorted as $n=>$EntrySort) if ($EntrySort[5]==$Entry[9]) { if (isset($EntrySort[12])&&$EntrySort[12]=="on") $b=$n-1; else $b=$n; } if (isset($b)) { if (!(isset($Entry[12])&&$Entry[12]=="on")) { $out=array_splice($EntriesReplySorted, $a, 1); array_splice($EntriesReplySorted, $b, 0, $out); } } } } $Entries=$EntriesReplySorted; } } if ($DataStatus=="empty") echo $Titles["EmptyFile"]; else if(isset($_POST["search"])&&isset($_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 (isset($_GET["page"])) switch ($_GET["page"]) { case $Titles["First"]: $CurrentPage=0; break; case $Titles["Last"]: $CurrentPage=(int)((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; SinlgeEntry($Entries[$e]); } 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 { if (isset($Entries[0])) { $Entries=array_reverse($Entries); foreach($Entries as $e=>$Entry) SinlgeEntry($Entry); } } } if ($GBreplies) $GBshownumbers=false; if(isset($_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 (isset($_POST["captcha"])&&(md5(base64_encode($_POST["captcha"]))==$_SESSION["captcha"])) { if (!isset($PageStatus)=="wrongimage") { AddEntry(); if ($GBnotificationmailto) SendMail(); } } else if (!$GBcaptcha) { if (!isset($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"]["subj"]=$_POST["subj"]; $_SESSION["value"]["category"]=$_POST["category"]; $_SESSION["value"]["email"]=$_POST["email"]; $_SESSION["value"]["text"]=$_POST["text"]; $Values=$_SESSION["value"]; } else if (isset($_SESSION["value"])) Unset($_SESSION["value"]); } $Entries=ReadEntries(); if(isset($_POST["reply"])) { $_SESSION["reply"]=$Entries[$_POST["reply"]-1]; $GBsearch=false; unset($Entries); $GBreplies=false; $Entries[0]=$_SESSION["reply"]; } else unset($_SESSION["reply"]); include "page.php"; ?>