Jump to content

Add a feature to BellaBuzz


chibineko

Recommended Posts

Ohh I forgot to attach the codes of the BellaBuzz.

 

Please help me~~

 

functions.php

 

<?php
//-----------------------------------------------------------------------------
// BellaBuzz v1b Copyright © Jem Turner 2008 unless otherwise noted
// http://www.jemjabella.co.uk/
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License. See README.txt
// or LICENSE.txt for more information.
//-----------------------------------------------------------------------------



function doError($message) {
echo '<p style="color: red;">ERROR: '.$message.'</p>';
exit;
}
function doIpCheck($ip) {
$ipPattern = '/\b(??:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/i';
if (!preg_match($ipPattern, $ip)) return false;
else return true;
}

function doAskBox() {
?>
<form action="ask.php" method="post">
	<p>
		<input type="text" name="question" id="question" /> <label for="question">Question</label>
		<input type="submit" value="Ask" />
	</p>
</form>		
<?php
}

function doCount($cntype) {
if ($cntype == "all")
	return count(file(ANSWERED)) + count(file(UNANSWERED));
elseif ($cntype == "open")
	return count(file(UNANSWERED));
elseif ($cntype == "done")
	return count(file(ANSWERED));
}

function doAdminHeader() {
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
	<title>BellaBuzz Control Panel</title>
	<style type="text/css">
		* { font: 11px/15px Verdana, Sans-Serif; }
		h1, th { font-weight: bold; }
		td, th { border: 1px solid #eee; padding: 2px 4px; }
		table { border-collapse: collapse; width: 500px; }
		img { border: 0; }
	</style>
</head>
<body>
<?php
}
function doAdminFooter() {
echo "</body>\r\n</html>";
}

function doQuestionForm($quesid, $file) {
$questions = file($file);
list($question,$dateask,$ip,$answer,$dateanswer) = preg_split("/,(?! )/", $questions[$quesid]);
?>
<form action="admin.php?page=editprocess" method="post">
	<p>
		<input type="hidden" name="file" id="file" value="<?php echo $file; ?>" />
		<input type="hidden" name="quesid" id="quesid" value="<?php echo $quesid; ?>" />
		<input type="text" name="question" id="question" value="<?php echo stripslashes(trim($question, "\"\x00..\x1F")); ?>" /> <label for="question">Question</label><br>
		<textarea name="answer" id="answer" rows="5" cols="35"><?php echo stripslashes(trim($answer, "\"\x00..\x1F")); ?></textarea> <label for="answer">Answer</label><br>
		<input type="text" name="dateanswer" id="dateanswer" value="<?php echo date("Y-m-d H:i:s", time()); ?>"> <label for="dateanswer">Date Answered</label>
	</p>
	<p>
		<input type="text" name="ip" id="ip" value="<?php echo $ip; ?>" readonly="readonly"> <label for="ip">IP Address</label><br>
		<input type="text" name="dateask" id="dateask" value="<?php echo $dateask; ?>" readonly="readonly"> <label for="dateask">Date Asked</label><br>
		<input type="submit" value="Answer" />
	</p>
</form>
<?php
}
function doDisplayQuesAdmin($mode, $file, $limit) {
global $timestamp;

$questions = file($file);
?>
<table>
<tr><th>Question</th> <th>Date Asked</th> <th>IP</th> <th>Admin</th></tr>
<?php
$i = 0;
if (count($questions) >= $limit) $limit = $limit;
else $limit = count($questions);

while ($i < $limit) {
	$rowColour = ($i % 2) ? ' style="background: #fff;"' : ' style="background: #ffe;"';
	list($question,$date,$ip,$answer,$dateanswer) = preg_split("/,(?! )/", $questions[$i]);
	$ip = trim($ip, "\"\x00..\x1F");

	echo '<tr'.$rowColour.'><td>'.$question.'</td> <td>'.date($timestamp, strtotime($date)).'</td> <td><a href="http://www.geobytes.com/IpLocator.htm?GetLocation&ipaddress='.$ip.'"><img src="admin-icons/spy.gif" title="look-up IP: '.$ip.'" alt="look-up ip"></a></td> <td><a href="admin.php?page='.$mode.'&ques='.$i.'"><img src="admin-icons/pencil.gif" title="'.$mode.' question" alt="'.$mode.'"></a> <a href="admin.php?page=delete&ques='.$i.'&file='.$file.'" onclick="javascript:return confirm(\'Are you sure you want to delete this question?\')"><img src="admin-icons/stop.gif" title="delete question" alt="delete"></a></td></tr>';

	$i++;
}
?>
</table>
<?php
}

function doWrite($file2open, $data, $writetype) {
$file = fopen($file2open, $writetype) or die("Couldn't open the right questions file: the question could not be answered.");
if (flock($file, LOCK_EX)) {
	fwrite($file, $data);
	flock($file, LOCK_UN);
} else {
	exit("Couldn't open the right questions file: the question could not be answered.");
}
fclose($file);
}

function blanklinefix($inputfile) {
ignore_user_abort(true);
$content = file($inputfile);

if (count($content) > 0) {
	$content = array_diff(array_diff($content, array("")), array("\r\n"));

	$newContent = array();
	foreach ($content as $line) {
		$newContent[] = trim($line);
	}
	$newContent = implode("\r\n", $newContent);

	$fl = fopen($inputfile, "w+");
	if (flock($fl, LOCK_EX)) {
		fwrite($fl, $newContent);
		flock($fl, LOCK_UN);
	} else {
		echo 'The file: '.$inputfile.' could not be locked for writing; the blanklinefix function could not be applied at this time.';
	}
	fclose($fl);
}
ignore_user_abort(false);
}

blanklinefix(UNANSWERED);
blanklinefix(ANSWERED);

error_reporting(0);
?>

 

 

ask.php

 

<?php
//-----------------------------------------------------------------------------
// BellaBuzz v1b Copyright © Jem Turner 2008 unless otherwise noted
// http://www.jemjabella.co.uk/
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License. See README.txt
// or LICENSE.txt for more information.
//-----------------------------------------------------------------------------

require('prefs.php');

if ($_SERVER['REQUEST_METHOD'] != "POST")
doError("This page must not be accessed directly.");

$bots = "/(Indy|Blaiz|Java|libwww-perl|Python|OutfoxBot|User-Agent|PycURL|AlphaServer|DigExt|Jakarta|Missigua|psycheclone|LinkWalker|ZyBorg|Waterunicorn|ICS)/i";
if (preg_match($bots, $_SERVER['HTTP_USER_AGENT']) || empty($_SERVER['HTTP_USER_AGENT']) || $_SERVER['HTTP_USER_AGENT'] == " ")
doError("Tests on your user agent indicate that there's a high possibility you're a spam bot, and as such <strong>your question has been deleted</strong>.");

$ipPattern = '/\b(??:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/i';
if (doIpCheck($_SERVER['REMOTE_ADDR']) === false)
doError("Invalid IP; no need to fiddle with the SERVER array.");

if (empty($_POST['question']) || strlen($_POST['question']) < 10)
doError("No empty/spammy questions please.");

if ($blockurls == "yes") {
if (substr_count($_POST['question'], 'http://') > 0 || substr_count($_POST['question'], 'url=') > 0)
	doError("To prevent link spamming, no URLs can be posted.");
}

if (doCount("open") == 0)
$question = '"'.preg_replace("/,(?! )/", ", ", trim(strip_tags($_POST['question']))).'",'.date("Y-m-d H:i:s", time()).','.$_SERVER['REMOTE_ADDR'].",,";
else 
$question = "\r\n".'"'.preg_replace("/,(?! )/", ", ", trim(strip_tags($_POST['question']))).'",'.date("Y-m-d H:i:s", time()).','.$_SERVER['REMOTE_ADDR'].",,";

doWrite(UNANSWERED, $question, "a");

if ($emailonask == "yes")
mail($admin_email, "New question asked", "A question has been asked:\r\n".$_POST['question']."\r\nIP: ".$_SERVER['REMOTE_ADDR'], "From: $admin_email");
?>


<p>Your question was successfully added  thank you! <a href="questions.php">return to questions?</a></p>

 

 

questions.php

 

<?php
//-----------------------------------------------------------------------------
// BellaBuzz v1b Copyright © Jem Turner 2008 unless otherwise noted
// http://www.jemjabella.co.uk/
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License. See README.txt
// or LICENSE.txt for more information.
//-----------------------------------------------------------------------------

require('prefs.php');
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<title>BellaBuzz</title>
<style type="text/css">
	* { font: 11px/15px Verdana, Sans-Serif; }
	.question { font-weight: bold; font-size: 12px; }
	.answer { font-style: italic; }
	.dates { display: block; text-align: right; font-size: 10px; }
</style>
</head>
<body>

<p>There are currently <?php echo doCount("done"); ?> answered, and <?php echo doCount("open"); ?> unanswered questions.</p>

<?php doAskBox(); ?>

<?php
$count = doCount("done");
if ($count > 0) {
if (isset($_GET['page']) && is_numeric($_GET['page'])) $pg = $_GET['page'];
else $pg = 1;

$questions = file(ANSWERED);
$numpages = ceil($count/$perpage);

if (isset($sortby) && $sortby == "oldest") {
	krsort($questions);
	$questions = array_values($questions);
}

echo '<p>';
if ($perpage < $count) {
	if ($pg > 1 && $pg <= $numpages) echo '<a href="questions.php?page='.($pg - 1).'">Prev</a> · ';
	else echo "Prev · ";

	for ($x = 1; $x <= $numpages; $x++) {
		if ($x == $pg) echo '[<strong>'.$x.'</strong>] ';
		else echo '<a href="questions.php?page='.$x.'">'.$x.'</a> ';
	}

	if ($pg < $numpages) echo ' · <a href="questions.php?page='.($pg + 1).'">Next</a>';
	else echo " · Next";
}
echo  '</p>';

$i = $perpage * ($pg - 1); 
$end = $i + $perpage;

if ($end > $count) $end = $count;

while ($i<$end) {
	list($question,$dateask,$ip,$answer,$dateanswer) = preg_split("/,(?! )/", $questions[$i]);
	$question = trim(stripslashes($question), "\"\x00..\x1F");
	$answer = trim(stripslashes($answer), "\"\x00..\x1F");
?>
	<p>
		<span class="question"><?php echo $question; ?></span><br>
		<span class="answer"><?php echo nl2br($answer); ?></span><br>
		<span class="dates">Asked: <?php echo date($timestamp, strtotime($dateask)); ?> | Answered: <?php echo date($timestamp, strtotime($dateanswer)); ?></span>
	</p>
<?php
	$i++;
}
} else {
echo '<p>No answered questions.</p>';
}
?>

</body>
</html>

 

 

prefs.php

 

<?php
//-----------------------------------------------------------------------------
// BellaBuzz v1b Copyright © Jem Turner 2008 unless otherwise noted
// http://www.jemjabella.co.uk/
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License. See README.txt
// or LICENSE.txt for more information.
//-----------------------------------------------------------------------------


// ADMIN SETTINGS
$admin_name = "admin";   // admin username (numbers and letters only)
$admin_pass = "password";   // admin password
$admin_email = "you@your-domain.com";   // admin e-mail address
$secret = "pleasechangeme123";   // this is like a second password. you won't have to remember it, so make it random


// GENERAL SETTINGS
$emailonask = "no";	// (yes or no) email admin when new question is asked
$perpage = 10;   // number of questions per page
$timestamp = "dS F, y";   // timestamp for last update on index.php (see php.net/date)
$showall = "yes"; // (yes or no) show unanswered questions as well as answered
$blockurls = "yes"; // (yes or no) block urls to help prevent spam
$sortby = "newest"; // (newest or oldest) sort questions preference


// REQUIRED TO WORK
define("ANSWERED", "answered.txt");
define("UNANSWERED", "unanswered.txt");
require_once('functions.php');
?>

 

 

admin.php

 

<?php
//-----------------------------------------------------------------------------
// BellaBuzz v1b Copyright © Jem Turner 2008 unless otherwise noted
// http://www.jemjabella.co.uk/
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License. See README.txt
// or LICENSE.txt for more information.
//-----------------------------------------------------------------------------

@require('prefs.php');

if (isset($_COOKIE['bellabuzz'])) {
if ($_COOKIE['bellabuzz'] == md5($admin_pass.$secret)) {
	if (isset($_GET['page'])) $page = $_GET['page'];
	else $page = NULL;

	doAdminHeader();
	switch($page) {
	case "answer":
		if (!isset($_GET['ques']) || !is_numeric($_GET['ques']))
			exit("Invalid question.");

		doQuestionForm($_GET['ques'], UNANSWERED);
	break;
	case "edit":
		if (!isset($_GET['ques']) || !is_numeric($_GET['ques']))
			exit("Invalid question.");

		doQuestionForm($_GET['ques'], ANSWERED);
	break;
	case "editprocess":
		if ($_SERVER['REQUEST_METHOD'] != "POST")
			doError("This page must not be accessed directly.");

		if (doIpCheck($_SERVER['REMOTE_ADDR']) === false)
			doError("Invalid IP; no need to fiddle with the readonly form elements.");

		foreach ($_POST as $key => $val) {
			$$key = preg_replace("/,(?! )/", ", ", trim(strip_tags($val)));
		}

		$answer = str_replace("<br /><br /><br /><br />", "<br /><br />", preg_replace("([\r\n])", "<br />", $answer));
		$storeit = '"'.$question.'",'.$dateask.','.$ip.',"'.$answer.'",'.$dateanswer;

		if ($file == "answered.txt") {
			$questions = file(ANSWERED);
			$questions[$quesid] = $storeit;
			doWrite(ANSWERED, implode($questions), "w");
		} elseif ($file == "unanswered.txt") {
			$openquestions = file(UNANSWERED);
			unset($openquestions[$quesid]);
			doWrite(UNANSWERED, implode($openquestions), "w");

			$questions = file(ANSWERED);
			$questions[] = "\r\n".$storeit;
			doWrite(ANSWERED, implode($questions), "w");
		}

		echo '<p>Question answered. <a href="admin.php">Return to main?</a></p>';
	break;
	case "delete":
		if (!isset($_GET['ques']) || !is_numeric($_GET['ques']))
			exit("Invalid question.");

		if (!isset($_GET['file']) && ($_GET['file'] != "answered.txt" || $_GET['file'] != "unanswered.txt"))
			exit("Invalid file");

		$questions = file($_GET['file']);
		unset($questions[$_GET['ques']]);
		doWrite($_GET['file'], implode($questions), "w");

		echo '<p>Question deleted. <a href="admin.php">Return to main?</a></p>';
	break;
	case "viewall":
		if (!isset($_GET['file']) && ($_GET['file'] != "answered.txt" || $_GET['file'] != "unanswered.txt"))
			exit("Invalid file");

		if ($_GET['file'] == "unanswered.txt") {
			echo '<h1>Unanswered Questions</h1>';
			doDisplayQuesAdmin("answer", UNANSWERED, doCount("open"));
		} else {
			echo '<h1>Answered Questions</h1>';
			doDisplayQuesAdmin("edit", ANSWERED, doCount("done"));
		}
	break;
	default:
?>
		<h1>Latest Unanswered Questions</h1>
<?php
		if (doCount("open") > 0) doDisplayQuesAdmin("answer", UNANSWERED, $perpage);
		else echo '<p>No unanswered questions.</p>';
?>
		<p><a href="admin.php?page=viewall&file=unanswered.txt">View all unanswered</a></p>

		<h1>Latest Answered Questions</h1>
<?php
		if (doCount("done") > 0) doDisplayQuesAdmin("edit", ANSWERED, $perpage);
		else echo '<p>No answered questions.</p>';
?>
		<p><a href="admin.php?page=viewall&file=answered.txt">View all answered</a></p>
<?php
	break;
	}
	doAdminFooter();
	exit;
} else {
	exit("<p>Bad cookie. Clear 'em out and start again.</p>");
}
}

if (isset($_GET['p']) && $_GET['p'] == "login") {
if ($_POST['name'] != $admin_name || $_POST['pass'] != $admin_pass) {
	doAdminHeader();
?>
		<p>Sorry, that username and password combination is not valid. Try again.</p>

	    <form method="post" action="admin.php">
	    Username:<br>
	    <input type="text" name="name"><br>
	    Password:<br>
	    <input type="password" name="pass"><br>
	    <input type="submit" name="submit" value="Login">
	    </form>
<?php
	doAdminFooter();
	exit;
} else if ($_POST['name'] == $admin_name && $_POST['pass'] == $admin_pass) {
	setcookie('bellabuzz', md5($_POST['pass'].$secret), time()+(31*86400));
	header("Location: admin.php");
	exit;
} else {
	setcookie('bellabuzz', NULL, NULL);
	header("Location: admin.php");
	exit;
}
}
doAdminHeader();
?>
    <form method="post" action="admin.php?p=login">
    Username:<br>
    <input type="text" name="name"><br>
    Password:<br>
    <input type="password" name="pass"><br>
    <input type="submit" name="submit" value="Login">
    </form>
<?php
doAdminFooter();
?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.