diff options
-rw-r--r-- | htdocs/deletepost.php | 57 | ||||
-rw-r--r-- | htdocs/postings.php | 2 | ||||
-rw-r--r-- | htdocs/src/Post.inc.php | 34 | ||||
-rw-r--r-- | htdocs/src/PostIterator.inc.php | 10 | ||||
-rw-r--r-- | htdocs/src/base.inc.php | 5 | ||||
-rw-r--r-- | htdocs/src/config.inc.php.example | 1 | ||||
-rwxr-xr-x | scripts/cleanup_old_posts.php | 30 | ||||
-rw-r--r-- | scripts/forward_emails.php | 96 |
8 files changed, 229 insertions, 6 deletions
diff --git a/htdocs/deletepost.php b/htdocs/deletepost.php new file mode 100644 index 0000000..7ebec19 --- /dev/null +++ b/htdocs/deletepost.php @@ -0,0 +1,57 @@ +<?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"; + +// Make sure we have all the needed information +if (!isset($_GET['id']) or !is_numeric($_GET['id']) + or !isset($_GET['secret'])) { + errorNotFound(); +} + +// Get the post. +$post = Post::getById($_GET['id']); + +// Got a post with the right secretid? +if (!$post and $post->getSecretId() == $_GET['secret']) { + errorNotFound(); +} + +if (isset($_GET['confirmed'])) { + // Delete post + $post->delete(); + + echo "<p>Your post has been removed.</p>"; + + echo "<p><a href=\"". $GLOBALS['CONFIG']['urlroot'] + ."\">Return to homepage</a>.</p>"; + +} else { + // Are you sure... + echo "<p>Are you sure you want to remove your posting titled " + . $post->getName() ."?</p>"; + echo "<p><a href=\"". $_SERVER['REQUEST_URI'] + ."&confirmed\">Yes, delete it</a> "; + echo "<a href=\"". $GLOBALS['CONFIG']['urlroot'] + ."\">No, do not delete</a></p>"; +} + +require_once "src/footer.inc.php"; + +function errorNotFound() { + // TODO: Better 404 error + echo "404"; + exit; +} + +?> + diff --git a/htdocs/postings.php b/htdocs/postings.php index 7550e18..ee178cb 100644 --- a/htdocs/postings.php +++ b/htdocs/postings.php @@ -51,6 +51,8 @@ if (isset($_GET['moderate'])) { echo "<h2>". $post->getName() ."</h2>"; echo "<p>Date: ". date('r', $post->getTimestamp()) ."</p>"; +echo "<p>Email: <a href=\"mailto:". $post->getPublicEmail() ."\">" + . $post->getPublicEmail() ."</a></p>"; echo "<p class=\"desc\">". str_replace("\n", '<br />', $post->getDescription()) diff --git a/htdocs/src/Post.inc.php b/htdocs/src/Post.inc.php index c05cb7e..4a109d2 100644 --- a/htdocs/src/Post.inc.php +++ b/htdocs/src/Post.inc.php @@ -88,7 +88,7 @@ class Post { } else { // Creating... set special fields. $info['stage'] = 'verification'; - $info['secretid'] = uniqid(); + $info['secretid'] = uniqid('', true); $info['created'] = date('Y-m-d H:i:s'); try { @@ -108,6 +108,16 @@ class Post { } } + public function delete() { + $db = getDatabase(); + + // Delete Images + $db->delete('image', 'post_id=' . $this->getId()); + + // Delete Post + $db->delete('post', 'id=' . $this->getId()); + } + public function getId() { return $this->info['id']; } @@ -167,6 +177,10 @@ class Post { return $this->info['email']; } + public function getPublicEmail() { + return 'posting-' . $this->getId() .'@'. $GLOBALS['CONFIG']['emaildomain']; + } + public function setEmail($value) { $this->info['email'] = $value; } @@ -254,7 +268,7 @@ class Post { $email->setSubject($GLOBALS['CONFIG']['sitetitle'] . " Email Validation"); - $url = $GLOBALS['CONFIG']['urlroot'] . '/validate.php?id=' . $this->getSecretId(); + $url = buildUrl('validate.php?id=' . $this->getSecretId()); $email->appendMessage("Please click on the link below to verify your email address.\n\n"); $email->appendMessage($url); @@ -265,14 +279,22 @@ class Post { public function sendAcceptance() { $email = new Email($this->getEmail()); - $email->setSubject($GLOBALS['CONFIG']['sitetitle'] . " Posting Approved"); + $email->setSubject($GLOBALS['CONFIG']['sitetitle'] + . " Posting Approved"); $email->appendMessage("Your posting titled ". $this->getName() ." has been approved by our moderation team.\n\n"); - $url = $GLOBALS['CONFIG']['urlroot'] . '/postings/' - . $this->getId() .'.html'; - $email->appendMessage("You can view your post at $url."); + // View URL + $url = buildUrl('postings/' . $this->getId() . '.html'); + $email->appendMessage("You can view your post at $url.\n\n"); + + // Delete URL + $url = buildUrl('deletepost.php?id=' . $this->getId() + . '&secret=' . $this->getSecretId()); + $email->appendMessage("Your posting will expire in " . + $GLOBALS['CONFIG']['expiretime'] + . " days. If you would like to remove it sooner, go to $url.\n"); $email->send(); } diff --git a/htdocs/src/PostIterator.inc.php b/htdocs/src/PostIterator.inc.php index 43c1a05..a269853 100644 --- a/htdocs/src/PostIterator.inc.php +++ b/htdocs/src/PostIterator.inc.php @@ -37,6 +37,16 @@ class PostIterator implements Iterator { $this->where[] = "category_id='$category_id'"; } + public function filterCreated($after, $before = false) { + $sqlafter = date('Y-m-d H:i:s', $after); + $this->where[] = "created > '$sqlafter'"; + + if ($before !== false) { + $sqlbefore = date('Y-m-d H:i:s', $before); + $this->where[] = "created < '$sqlbefore'"; + } + } + public function orderBy($order) { $this->order = $order; } diff --git a/htdocs/src/base.inc.php b/htdocs/src/base.inc.php index d7a9354..7d48ca7 100644 --- a/htdocs/src/base.inc.php +++ b/htdocs/src/base.inc.php @@ -41,5 +41,10 @@ function __autoload($class) { require_once "$class.inc.php"; } +function buildUrl($tail='') { + return 'http://' . $GLOBALS['CONFIG']['domain'] + . $GLOBALS['CONFIG']['urlroot'] . "/$tail"; +} + ?> diff --git a/htdocs/src/config.inc.php.example b/htdocs/src/config.inc.php.example index d0d912c..0a4a8d4 100644 --- a/htdocs/src/config.inc.php.example +++ b/htdocs/src/config.inc.php.example @@ -20,6 +20,7 @@ $CONFIG = array( 'email_from' => 'community@myfoursquarechurch.com', 'emaildomain' => 'listandshare.com', + 'domain' => 'localhost', 'urlroot' => '/~jesse/p4s/community/htdocs', 'root' => '/Users/jesse/Development/P4Square/community/htdocs', 'uploads' => '/Users/jesse/Development/P4Square/community/uploads', diff --git a/scripts/cleanup_old_posts.php b/scripts/cleanup_old_posts.php new file mode 100755 index 0000000..6a3986a --- /dev/null +++ b/scripts/cleanup_old_posts.php @@ -0,0 +1,30 @@ +#!/usr/bin/php +<?php + +/* Foursquare Community Site + * + * Copyright (C) 2011 Foursquare Church. + * + * Developers: Jesse Morgan <jmorgan@foursquarestaff.com> + * + */ + +require_once "../htdocs/src/base.inc.php"; + +$pi = new PostIterator(); + +$diff = $CONFIG['expiretime'] * 86400; + +$pi->filterCreated(0, time() - $diff); +$pi->query(); + +$count = 0; +foreach ($pi as $post) { + $post->delete(); + $count++; + +} + +// TODO: Add Logging? + +?> diff --git a/scripts/forward_emails.php b/scripts/forward_emails.php new file mode 100644 index 0000000..bd4846f --- /dev/null +++ b/scripts/forward_emails.php @@ -0,0 +1,96 @@ +#!/usr/bin/php +<?php + +/* Foursquare Community Site + * + * Copyright (C) 2011 Foursquare Church. + * + * Developers: Jesse Morgan <jmorgan@foursquarestaff.com> + * + */ + +require_once "../htdocs/src/base.inc.php"; + +// Read the email +$fd = fopen("php://stdin", "r"); +$email = ""; +while (!feof($fd)) { + $email .= fread($fd, 1024); +} +fclose($fd); + +// Parse the email +$headers = ""; +$to = ""; +$from = ""; +$subject = ""; +$message = ""; + +$splitmsg = split("\n", $email); + +$inheaders = true; +foreach ($splitmsg as $line) { + if ($inheaders) { + // This is a header + if ($line == '') { + $inheaders = false; + + } else { + $header = split(':', $line, 2); + + switch (strtolower(trim($header[0]))) { + case 'from': + $from = $header[1]; + break; + + case 'subject': + $subject = $header[1]; + break; + + case 'delivered-to': + $to = $header[1]; + break; + + default: + $headers .= "$line\n"; + } + } + + } else { + // Messsage line + $message .= "$line\n"; + } +} + + +// Get the post id and post. +preg_match("/posting-(.+)@.+/", $to, $identifiers); + +if (!isset($identifiers[1]) or !is_numeric($identifiers[1])) { + mailFailure("Invalid id"); +} + +$id = $identifiers[1]; + +$post = Post::getById($id); + +if (!$post or $post->getStage() != 'approved') { + mailFailure('Invalid post'); +} + +// Valid Post... forward the message. +$newsubject = "[" . $CONFIG['sitetitle'] . "] $subject"; + +if (mail($post->getEmail(), $newsubject, $message, $headers)) { + exit 0; + +} else { + exit 2; +} + +function mailFailure($message='') { + echo "5.1.1 $message\n"; + exit 1; +} + +?> |