PHP Classes
Icontem

File: guestbook.class.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Tom Taylor  >  Guestbook v1  >  guestbook.class.php  
File: guestbook.class.php
Role: Class source
Content type: text/plain
Description: guestbook class file
Class: Guestbook v1
Post and display comments in a guestbook
 

Contents

Class file image Download
<?php
############################################################
	/*
	 *		Guestbook Class by Tom Taylor
	 *		Theatons Website Design
	 *		http://www.theatons.com
	 *		28th July 06 
	 *		For PHP 4.x.x
	 *		Developed using Zend Development Studio 5
	*/
############################################################



class Guestbook { 
	
	var $TableWidth = 690; 
	var $TableBorder = 1; 
	var $TableId = null; 
	var $RowClass = null;
	var $TdClass = null; 
	var $h4class = null;
	var $DivTitleClass = null;
	var $DivTimeClass = null; 
	var $DivAuthorClass = null; 
	var $Add_TextInputSize = 14; 
	var $Add_TextareaSize = 400; 
	var $Add_TextareaHeight = 150; 
	var $MessageLimit = 1000; 
	var $NameAlign = 'right'; 
	var $TimeSetting = 'jS F y';			// date format for the guestbook
	var $GuestbookPage = ''; 
	var $FormError = null; 
	var $isSent = false; 
	var $EmailsFrom = ''; 
	var $SubmitConfirmationEmail = 'Your entry to the guestbook has been submitted. It will be reviewed before appearing on the website'; 
	var $ConfirmMessage = 0; 
	var $myEmail = null; 
	
	
	function showEntrys() { 
			$p = new Pager();
			$limit = 20;
			$start = $p->findStart($limit);
			$count = mysql_num_rows(mysql_query("SELECT * FROM guestbook WHERE Verified='1' ORDER BY id DESC"));
			$pages = $p->findPages($count, $limit);
			$result = mysql_query("SELECT * FROM guestbook WHERE Verified='1' ORDER BY id DESC LIMIT ".$start.", ".$limit);
			$pagelist = $p->pageList($_GET['page'], $pages);
			
			echo '<h4 class="'.$this->h4class.'">Autographink Guestbook.</h4>';
			echo '<table width="'.$this->TableWidth.'" id="'.$this->TableId.'" border="'.$this->TableBorder.'">';
			
			if(isset($_GET['code'])) { $this->showCoded($_GET['code']); } 
			
			echo '<tr class="'.$this->RowClass.'"><td class="'.$this->TdClass.'" colspan="2" align="right">'.$pagelist.'</td></tr>'; 
			echo '<tr class="'.$this->RowClass.'"><td colspan="2"></td></tr>'; 
			
			while($info = mysql_fetch_array($result)) { 
		
				echo '<tr class="'.$this->RowClass.'">';
					echo '<td class="'.$this->TdClass.'"><div class="'.$this->DivTitleClass.'">'.$this->HasWebsite($info['Website'],$info['Title']).'</div></td>';
					echo '<td class="'.$this->TdClass.'"><div class="'.$this->DivTimeClass.'">'.$this->TimeFormat($info['Timestamp']).'</div></td>';
				echo '</tr>';
				echo '<tr class="'.$this->RowClass.'">';
					echo '<td colspan="2" class="'.$this->TdClass.'">'.$this->ReturnMessage($info['Message']).'</td>';
				echo '</tr>';
				echo '<tr class="'.$this->RowClass.'">';
					echo '<td colspan="2" class="'.$this->TdClass.'" align="'.$this->NameAlign.'"><div class="'.$this->DivAuthorClass.'">'.$this->Author($info['Email'], $info['Name']).'</div></td>';
				echo '</tr>';
				echo '<tr><td colspan="2" height="20"></td></tr>';
					
			}
			echo '<tr class="'.$this->RowClass.'"><td class="'.$this->TdClass.'" colspan="2" align="right">'.$pagelist.'</td></tr>'; 
			echo '<tr><td colspan="2" align="left" class="'.$this->TdClass.'"><a href="javascript:toggleLayer(\'addToGuestbook\');">Add a comment</a>';
				echo '<div id="addToGuestbook" '.$this->AutoDisplayAddForm().'>';
			 			$this->showAddForm(); 
				echo '</div>';
			echo '</td></tr>'; 
			echo '</table>'; 
	}
	
	
	
	// does the person have a website ? 
	function HasWebsite($website = null, $title = null) { 
		if($website != '') { 
			$website = str_replace("https://", "", $website); 
			$website = str_replace("http://", "", $website);  
			return '<a href="http://'.$website.'" title="'.$this.'">'.$title.'</a>';
		} else {
			return $title; 
		}	 
	}
	
	
	
	// return the correct time format 
	function TimeFormat($var) { 
		return date($this->TimeSetting,$var); 
	} 
	
	
	
	// replace the linebreaks, allow p tags. 
	function ReturnMessage($text) { 
		$text = str_replace("\n", "<br>", $text);
		$text = strip_tags($text, "<p> <br>");
		return $text; 
	}
	
	
	
	// has the personal left an email ?  
	function Author($email = null, $name = null) {  
		if(!empty($email)) { 
			return '<a href="mailto:'.$email.'" title="'.$name.'">'.$name.'</a>';
		} else {
			return $name; 
		}
	}
	
	function showCoded($code) { 
		$sql = "SELECT * FROM guestbook WHERE Code='".$this->Escape($code)."'"; 
		$res = mysql_query($sql) or die(mysql_error()); 
		if(mysql_num_rows($res) > 0) { 
			$info = mysql_fetch_assoc($res); 
				echo '<form method="post" action="'.$this->GuestbookPage.'">';
				echo '<tr class="'.$this->RowClass.'"><td colspan="2" class="'.$this->TdClass.'"><h4 align="center">Confirm or delete post</h4></td></tr>';
				echo '<tr class="'.$this->RowClass.'">';
					echo '<td class="'.$this->TdClass.'"><div class="'.$this->DivTitleClass.'">'.$this->HasWebsite($info['Website'],$info['Title']).'</div></td>';
					echo '<td class="'.$this->TdClass.'"><div class="'.$this->DivTimeClass.'">'.$this->TimeFormat($info['Timestamp']).'</div></td>';
				echo '</tr>';
				echo '<tr class="'.$this->RowClass.'">';
					echo '<td colspan="2" class="'.$this->TdClass.'">'.$this->ReturnMessage($info['Message']).'</td>';
				echo '</tr>';
				echo '<tr class="'.$this->RowClass.'">';
					echo '<td colspan="2" class="'.$this->TdClass.'" align="'.$this->NameAlign.'"><div class="'.$this->DivAuthorClass.'">'.$this->Author($info['Email'], $info['Name']).'</div></td>';
				echo '</tr>';
					echo '<input type="hidden" name="Code" value="'.$info['Code'].'" />'; 
				echo '<tr class="'.$this->RowClass.'"><td colspan="2" class="'.$this->TdClass.'">';
					echo '<input type="submit" name="Delete" value="Delete" />';
					echo '<input type="submit" name="Approve" value="Approve" />';
				echo '</td></tr>';
				echo '<tr class="'.$this->RowClass.'"><td colspan="2" height="20"></td></tr>';
		}
	}
	
	function checkAddorDelete() { 
		if(isset($_POST['Delete'])) { 
			mysql_query("DELETE from guestbook WHERE Code='".$_POST['Code']."'") or die(mysql_error()); 
		} elseif (isset($_POST['Approve'])) { 
			mysql_query("UPDATE guestbook SET Verified='1' WHERE Code='".$_POST['Code']."'"); 
		} 
	} 
	
############################################################
	/*
	 *		The adding side of the guestbook
	*/
############################################################


	function showAddForm() { 
		echo '<h4 class="'.$this->h4class.'">Add an entry to the guestbook.</h4>';
		echo '<form action="'.$this->GuestbookPage.'?add=1" method="POST">';
		echo '<table cellpadding="4">';
			if(isset($this->FormError)) { echo '<tr><td colspan="2><h5 align="center" style="color:red">'.$this->FormError.'</h5></td></tr>'; } 
			if($this->isSent == false) { 
				echo '<tr>';
					echo '<td>Name*:</td>';
					echo '<td><input type="text" name="Name" value="'.$this->sent('Name').'" size="'.$this->Add_TextInputSize.'" /></td>';
				echo '</tr>';
				echo '<tr>';
					echo '<td>Email*:</td>';
					echo '<td><input type="text" name="Email" value="'.$this->sent('Email').'" size="'.$this->Add_TextInputSize.'" /></td>';
				echo '</tr>';
				echo '<tr>';
					echo '<td>Website:</td>';
					echo '<td><input type="text" name="Website" value="'.$this->sent('Website').'" size="'.$this->Add_TextInputSize.'" /></td>';
				echo '</tr>';
				echo '<tr>';
					echo '<td>Title*:</td>';
					echo '<td><input type="text" name="Title" value="'.$this->sent('Title').'" size="'.$this->Add_TextInputSize.'" /></td>';
				echo '</tr>';
				echo '<tr>';
					echo '<td valign="top">Message*:</td>';
					echo "<td><textarea name=\"Message\" style=\"width:".$this->Add_TextareaSize."; height:".$this->Add_TextareaHeight."\" id=\"Message\"  onKeyUp=\"Contar('Message','sMessage','{CHAR} characters left.',".$this->MessageLimit.");\">".$this->sent('Message')."</textarea><br /><span id=\"sMessage\">".$this->MessageLimit." characters left.</span></td>";
				echo '</tr>';
				echo '<tr>';
					echo '<td colspan="2" align="left"><input type="submit" name="addToGuestbook" value="Add Comments" /></td>';
				echo '</tr>'; 
				// hidden fields
				echo '<input type="hidden" name="TimeStamp" value="'.time().'" />';
			} else { 
				echo '';
			} 
		echo '</table>';
	}
		
	
	// value for form input fields
	function sent($value) { 
		if(isset($_POST[$value])) { return $_POST[$value]; } 
		else { return ''; } 
	}
	
	
	// if the form has been submitted, set the display so you dont havt to click the link to open it
	function AutoDisplayAddForm() { 
		if(isset($_GET['add'])) { 
			return 'style="display:block;"'; 
		} else {
			return;
		}
	} 
	
	
	// form validation
	function CheckForm($post) { 
		if(
			(isset($post['Name']) && $post['Name'] != '') &&
			(isset($post['Title']) && $post['Title'] != '') &&
			(isset($post['Email']) && $post['Email'] != '') &&
			(isset($post['Message']) && $post['Message'] != '') 
		) { 
			if(!$post['Email'] == "" && (!strstr($post['Email'],"@")) || !strstr($post['Email'],"."))  {
				// the email is not empty, does contain @ and has a . - return false
				$this->FormError = 'Email is not valid';
				return false;
			}			
			return true; 
		} else { 
			$this->FormError = 'Please ensure all fields are filled in.'; 
			return false;;
		}
	}
	
	
	// sending the emails 
	function SendConfirmEmail() { 
		$code = sha1($this->RandomString());
		
		$sql = "INSERT into guestbook 
				(TimeStamp, Email, Name, Website, Title, Message, Verified, Code) 
				VALUES ('".$this->Escape($_POST['TimeStamp'])."', 
						'".$this->Escape($_POST['Email'])."', 
						'".$this->Escape($_POST['Name'])."',
						'".$this->Escape($_POST['Website'])."',
						'".$this->Escape($_POST['Title'])."',
						'".$this->Escape($_POST['Message'])."',
						'0',
						'".$this->Escape($code)."')";
		
		$res = mysql_query($sql) or die(mysql_error());
		$id = mysql_insert_id(); 
		
		if($this->ConfirmMessage == 1) { 
			$message = $this->SubmitConfirmationEmail;
			$this->email($_POST['Email'], 'Your Guestbook entry.', $message);
		} 
		
		$message = '<h4>Guestbook Entry</h4>';
		$message .= '<p>A sucessfull submission was made to the guestbook.</p> <p>Name: '.$_POST['Name'].'</p><p>Time:'.$this->TimeFormat($_POST['TimeStamp']).'</p>';
		$message .= '<p><a href="'.$this->GuestbookPage.'?id='.$id.'&code='.$code.'">Click here to view ( then confirm or delete )</a></p>';
		$message .= '<p>Regards, <br />Guestbook</p>';
		$subject = 'Guestbook Entry'.$this->TimeFormat($_POST['TimeStamp']);
		if($this->email($this->myEmail, $subject, $message) == false ) { 
			die("There was a problem sending an email to the guestbook owner");
		} 
		
		$this->isSent = true; 
	}
	
	
	// escape the strings for sql
	function Escape($string) { 
		return  mysql_real_escape_string($string);
	}

	
	// email function
	function email($to, $subject, $message) {
			
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
		$headers .= 'To: '.$to. "\r\n";
		$headers .= 'From: '.$this->EmailsFrom. "\r\n";

		if(mail($to, $subject, $message, $headers)) return true;
		else return false; 
	}
	
	
	function RandomString($length=11) {
		$randstr='';
		srand((double)microtime()*1000000);
		//our array add all letters and numbers if you wish
		$chars = array ( 'a','b','c','d','e','f');
		for ($rand = 0; $rand <= $length; $rand++)
		{
		$random = rand(0, count($chars) -1);
		$randstr .= $chars[$random];
		}
		return $randstr;
	}

############################################################
	/*
	 *		Javascript show/hide add to guestbook form
	*/
############################################################

	function JavascriptShowHide() { 
		
		######################################################
		#
		#	*  Javascript toggle layer function
		# 	*  Unkown author
		#
		######################################################
		
		echo '
		<script type="text/javascript" language="javascript"> 
		
		function toggleLayer(whichLayer) {
			if (document.getElementById)
			{
				// this is the way the standards work
				var style2 = document.getElementById(whichLayer).style;
				style2.display = style2.display? "":"block";
			}
			else if (document.all)
			{
				// this is the way old msie versions work
				var style2 = document.all[whichLayer].style;
				style2.display = style2.display? "":"block";
			}
			else if (document.layers)
			{
				// this is the way nn4 works
				var style2 = document.layers[whichLayer].style;
				style2.display = style2.display? "":"block";
			}
		}
		
		</script>';
	}
	
	function JavascriptMessageLimit() { 
		
		######################################################
		#
		#	*  Javascript Message Limit
		# 	*  Written by Steve
		#
		######################################################
		
		echo "
		<script type=\"text/javascript\" language=\"javascript\"> 
		
			function getObject(obj) {
			  var theObj;
			  if(document.all) {
			    if(typeof obj==\"string\") {
			      return document.all(obj);
			    } else {
			      return obj.style;
			    }
			  }
			  if(document.getElementById) {
			    if(typeof obj==\"string\") {
			      return document.getElementById(obj);
			    } else {
			      return obj.style;
			    }
			  }
			  return null;
			}
		
			function Contar(entrada,salida,texto,caracteres) {
			  var entradaObj=getObject(entrada);
			  var salidaObj=getObject(salida);
			  var longitud=caracteres - entradaObj.value.length;
			  if(longitud <= 0) {
				longitud=0;
				texto='<span class=\"disable\"> '+texto+' </span>';
				entradaObj.value=entradaObj.value.substr(0,caracteres);
			  }
			  salidaObj.innerHTML = texto.replace(\"{CHAR}\",longitud);
			}
		
		</script>";
	} 
	
	
	

}
?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products