From d69c19b7a138659962d3c20c2487f4f13da997c5 Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Tue, 24 May 2011 15:01:09 -0700 Subject: Working on email validation --- htdocs/new-post.php | 6 ++-- htdocs/src/Cif_Database.inc.php | 2 +- htdocs/src/Email.inc.php | 72 +++++++++++++++++++++++++++++++++++++++++ htdocs/src/Post.inc.php | 70 +++++++++++++++++++++++++++++++++++++-- htdocs/src/config.inc.php | 8 +++-- htdocs/validate.php | 19 +++++++++++ 6 files changed, 169 insertions(+), 8 deletions(-) create mode 100644 htdocs/src/Email.inc.php create mode 100644 htdocs/validate.php diff --git a/htdocs/new-post.php b/htdocs/new-post.php index 7312e5f..0d1556c 100644 --- a/htdocs/new-post.php +++ b/htdocs/new-post.php @@ -31,7 +31,7 @@ if (isset($_POST['category'])) { $error .= "

$desc is a required field.

"; } else { - $values[$field] = addslashes($_POST[$field]); + $values[$field] = trim($_POST[$field]); } } @@ -44,9 +44,11 @@ if (isset($_POST['category'])) { $post->setEmail($values['email']); $post->setCategory($values['category']); - $post->setTitle($values['title']); + $post->setName($values['title']); $post->setDescription($values['description']); + // TODO: Set the source of the post. + if ($post->save()) { $post->sendValidation(); diff --git a/htdocs/src/Cif_Database.inc.php b/htdocs/src/Cif_Database.inc.php index e78889c..cc42b14 100644 --- a/htdocs/src/Cif_Database.inc.php +++ b/htdocs/src/Cif_Database.inc.php @@ -111,7 +111,7 @@ class Cif_Database { } /** - * Insert a collection of rows into the database. + * Insert a row into the database. * * @param string $table The table to update. * @param array $row Arrays of fields mapped to values for the new row. diff --git a/htdocs/src/Email.inc.php b/htdocs/src/Email.inc.php new file mode 100644 index 0000000..b828780 --- /dev/null +++ b/htdocs/src/Email.inc.php @@ -0,0 +1,72 @@ + + * + */ + +class Email { + private $subject; + private $to; + private $from; + private $fromname; + private $message; + private $headers; + + public function __construct($to) { + $this->to = $to; + $this->from = $GLOBALS['CONFIG']['email_from']; + $this->message = ""; + $this->headers = array(); + } + + public function setFrom($from) { + $this->from = $from; + + if (strstr($from, "<")) + $this->fromname = preg_replace("/([^<>]+) <([^<>]+)>/", "$1", $from); + } + + public function setSubject($subject) { + $this->subject = $subject; + } + + public function addHeader($header, $value) { + $this->headers[] = "$header: $value"; + } + + public function appendMessage($message) { + $this->message .= $message; + } + + public function send($logprefix="") { + // Headers + if ($this->fromname) { + $headers = "From: ". $this->fromname ." <". $this->from .">\n"; + } else { + $headers = "From: ". $this->from ."\n"; + } + $headers .= "Reply-To: ". $this->from ."\n"; + $headers .= "Date: ". date("r") ."\n"; + $headers .= join("\n", $this->headers); + + if ($GLOBALS['CONFIG']['production']) { + $ret = mail($this->to, $this->subject, $this->message, $headers); + + } else { + // If we're not in production, save to file instead of emailing. + $fh = fopen($GLOBALS['CONFIG']['root'].'/emails.log', 'a'); + fwrite($fh, sprintf("To: %s\n%s\nSubject: %s\n\n%s\n\n", + $this->to, $headers, $this->subject, $this->message)); + fclose($fh); + } + + // TODO: Add logger + //$GLOBALS['logger']->log_email($ret, $this->to, $this->subject, $logprefix); + } +} + +?> diff --git a/htdocs/src/Post.inc.php b/htdocs/src/Post.inc.php index 22d2fce..cfd7d07 100644 --- a/htdocs/src/Post.inc.php +++ b/htdocs/src/Post.inc.php @@ -12,10 +12,18 @@ require_once "base.inc.php"; class Post { private $info; + private $indatabase = false; public function __construct($info=null) { - $this->info = $info; + $this->info = is_null($info) ? array() : $info; + + if ($info !== null and isset($info['id'])) { + $this->indatabase = true; + + } else { + $this->indatabase = false; + } } public static function getById($id) { @@ -51,21 +59,54 @@ class Post { public function save() { $db = getDatabase(); - // TODO: Implement Save + // Cleanup Info + foreach ($this->info as $key=>$value) $info[$key] = addslashes($value); + + // Save or create? + if ($this->indatabase) { + return $db->update('post', $info, "WHERE `id`='". $this->getId() ."'"); + + } else { + // Creating... set special fields. + $info['stage'] = 'verification'; + $info['secretid'] = uniqid(); + + $ret = $db->insert('post', $info); + + if ($ret) { + $this->info['id'] = $ret; + $this->info['stage'] = 'verification'; + $this->info['secretid'] = $info['secretid']; + } + + return $ret; + } } public function getId() { return $this->info['id']; } + public function getSecretId() { + return $this->info['secretid']; + } + public function getName() { return htmlspecialchars($this->info['name']); } + public function setName($value) { + $this->info['name'] = $value; + } + public function getDescription() { return htmlspecialchars($this->info['description']); } + public function setDescription($value) { + $this->info['description'] = $value; + } + public function getStage() { return $this->info['stage']; } @@ -82,6 +123,18 @@ class Post { return $this->info['created']; } + public function getEmail() { + return $this->info['email']; + } + + public function setEmail($value) { + $this->info['email'] = $value; + } + + public function setCategory($value) { + $this->info['category_id'] = $value; + } + public function getAge() { $diff = time() - $this->info['createdts']; @@ -105,6 +158,19 @@ class Post { public function getLocation() { return $this->info['location']; } + + public function sendValidation() { + $email = new Email($this->getEmail()); + + $email->setSubject($GLOBAL['CONFIG']['sitetitle'] . " Email Validation"); + + $url = $GLOBALS['CONFIG']['urlroot'] . '/validate.php?id=' . $this->getSecretId(); + + $email->appendMessage("Please click on the link below to verify your email address.\n\n"); + $email->appendMessage($url); + + $email->send(); + } } ?> diff --git a/htdocs/src/config.inc.php b/htdocs/src/config.inc.php index 1ca6808..f1308b6 100644 --- a/htdocs/src/config.inc.php +++ b/htdocs/src/config.inc.php @@ -16,12 +16,14 @@ $CONFIG = array( 'dbname' => 'p4scommunity', // Site Information - 'sitetitle' => 'Foursquare Community', + 'sitetitle' => 'Foursquare Community', + 'email_from' => 'community@myfoursquarechurch.com', + 'urlroot' => 'http://localhost/~jesse/p4s/community/htdocs', - 'root' => '/Users/jesse/Development/P4Square/community/htdocs', - 'debug' => true, + 'debug' => true, + 'production' => false, ); set_include_path(get_include_path() . PATH_SEPARATOR . $CONFIG['root'].'/src'); diff --git a/htdocs/validate.php b/htdocs/validate.php new file mode 100644 index 0000000..272640b --- /dev/null +++ b/htdocs/validate.php @@ -0,0 +1,19 @@ + + * + */ + +require_once "src/base.inc.php"; + +require_once "src/header.inc.php"; + +echo "

Email Verification

"; + +if (isset($_POST + +?> -- cgit v1.2.3