summaryrefslogtreecommitdiff
path: root/htdocs
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2011-05-24 15:01:09 -0700
committerJesse Morgan <jesse@jesterpm.net ; true>2011-05-24 15:01:09 -0700
commitd69c19b7a138659962d3c20c2487f4f13da997c5 (patch)
tree2300eaa3ed16fd31b8e844df72bb49434298a2e8 /htdocs
parenta1bbd6bfb8dd3812c70acdeff793cd9d78bdc219 (diff)
Working on email validation
Diffstat (limited to 'htdocs')
-rw-r--r--htdocs/new-post.php6
-rw-r--r--htdocs/src/Cif_Database.inc.php2
-rw-r--r--htdocs/src/Email.inc.php72
-rw-r--r--htdocs/src/Post.inc.php70
-rw-r--r--htdocs/src/config.inc.php8
-rw-r--r--htdocs/validate.php19
6 files changed, 169 insertions, 8 deletions
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 .= "<p>$desc is a required field.</p>";
} 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 @@
+<?php
+
+/* Foursquare Community Site
+ *
+ * Copyright (C) 2011 Foursquare Church.
+ *
+ * Developers: Jesse Morgan <jmorgan@foursquarestaff.com>
+ *
+ */
+
+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 @@
+<?php
+
+/* Foursquare Community Site
+ *
+ * Copyright (C) 2011 Foursquare Church.
+ *
+ * Developers: Jesse Morgan <jmorgan@foursquarestaff.com>
+ *
+ */
+
+require_once "src/base.inc.php";
+
+require_once "src/header.inc.php";
+
+echo "<h2>Email Verification</h2>";
+
+if (isset($_POST
+
+?>