summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2011-06-01 12:15:26 -0700
committerJesse Morgan <jesse@jesterpm.net ; true>2011-06-01 12:15:26 -0700
commit9ad57b3d8d1000f17962bb0ba00a8958b2f141db (patch)
tree515f444d429b999516e530e5d35fcaac6424f1a9
parenta070cbe9627fcc29ef2f91b8f7578080203e6ad1 (diff)
Added scripts, email addresses, other minor modifications
-rw-r--r--htdocs/deletepost.php57
-rw-r--r--htdocs/postings.php2
-rw-r--r--htdocs/src/Post.inc.php34
-rw-r--r--htdocs/src/PostIterator.inc.php10
-rw-r--r--htdocs/src/base.inc.php5
-rw-r--r--htdocs/src/config.inc.php.example1
-rwxr-xr-xscripts/cleanup_old_posts.php30
-rw-r--r--scripts/forward_emails.php96
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;
+}
+
+?>