From 62f6354368ef960ab7410b4de90301dad5e64a14 Mon Sep 17 00:00:00 2001
From: shish <shish@7f39781d-f577-437e-ae19-be835c7a54ca>
Date: Sun, 18 May 2008 03:32:28 +0000
Subject: [PATCH] remove use of sql date types (different databases have wildly
 different support for them; storing integer times is easier...)

git-svn-id: file:///home/shish/svn/shimmie2/trunk@856 7f39781d-f577-437e-ae19-be835c7a54ca
---
 contrib/ipban/main.php  | 27 ++++++++++++++++++---------
 contrib/ipban/theme.php |  3 ++-
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/contrib/ipban/main.php b/contrib/ipban/main.php
index 6dc3a5b6..f395153c 100644
--- a/contrib/ipban/main.php
+++ b/contrib/ipban/main.php
@@ -37,7 +37,7 @@ class IPBan extends Extension {
 
 		if(is_a($event, 'InitExtEvent')) {
 			global $config;
-			if($config->get_int("ext_ipban_version") < 3) {
+			if($config->get_int("ext_ipban_version") < 4) {
 				$this->install();
 			}
 			
@@ -102,12 +102,12 @@ class IPBan extends Extension {
 					id {$database->engine->auto_increment},
 					banner_id INTEGER NOT NULL,
 					ip CHAR(15) NOT NULL,
-					end DATETIME NOT NULL,
+					end INTEGER,
 					reason TEXT NOT NULL,
 					INDEX (end)
 				) {$database->engine->create_table_extras};
 			");
-			$config->set_int("ext_ipban_version", 3);
+			$config->set_int("ext_ipban_version", 4);
 		}
 
 		// ===
@@ -136,6 +136,15 @@ class IPBan extends Extension {
 			$database->execute("CREATE INDEX bans__end ON bans(end)");
 			$config->set_int("ext_ipban_version", 3);
 		}
+
+		if($config->get_int("ext_ipban_version") == 3) {
+			$database->execute("ALTER TABLE bans CHANGE end old_end DATE NOT NULL");
+			$database->execute("ALTER TABLE bans ADD COLUMN end INTEGER");
+			$database->execute("UPDATE bans SET end = UNIX_TIMESTAMP(old_end)");
+			$database->execute("ALTER TABLE bans DROP COLUMN old_end");
+			$database->execute("CREATE INDEX bans__end ON bans(end)");
+			$config->set_int("ext_ipban_version", 4);
+		}
 	}
 // }}}
 // deal with banned person {{{
@@ -172,7 +181,7 @@ class IPBan extends Extension {
 
 	private function get_active_bans() {
 		global $database;
-		$bans = $database->get_all("SELECT * FROM bans WHERE (end > now() OR isnull(end))");
+		$bans = $database->get_all("SELECT * FROM bans WHERE (end > ? OR isnull(end))", array(time()));
 		if($bans) {return $bans;}
 		else {return array();}
 	}
@@ -182,13 +191,13 @@ class IPBan extends Extension {
 		$parts = array();
 		if(preg_match("/^(\d+) (day|week|month)s?$/i", $end, $parts)) {
 			$sql = "INSERT INTO bans (ip, reason, end, banner_id)
-			        VALUES (?, ?, now() + interval {$parts[1]} {$parts[2]}, ?)";
-			$database->Execute($sql, array($ip, $reason, $user->id));
+			        VALUES (?, ?, ?, ?)";
+			$database->Execute($sql, array($ip, $reason, strtotime("+{$parts[1]} {$parts[2]}"), $user->id));
 		}
 		else {
-			$sql = "INSERT INTO bans (ip, reason, end, banner_id)
-			        VALUES (?, ?, ?, ?)";
-			$database->Execute($sql, array($ip, $reason, $end, $user->id));
+			$sql = "INSERT INTO bans (ip, reason, banner_id)
+			        VALUES (?, ?, ?)";
+			$database->Execute($sql, array($ip, $reason, $user->id));
 		}
 	}
 
diff --git a/contrib/ipban/theme.php b/contrib/ipban/theme.php
index 43ddc0fa..473754bf 100644
--- a/contrib/ipban/theme.php
+++ b/contrib/ipban/theme.php
@@ -14,11 +14,12 @@ class IPBanTheme extends Themelet {
 	public function display_bans($page, $bans) {
 		$h_bans = "";
 		foreach($bans as $ban) {
+			$end_human = date('Y-m-d', $ban['end']);
 			$h_bans .= "
 				<tr>
 					<td>{$ban['ip']}</td>
 					<td>{$ban['reason']}</td>
-					<td>{$ban['end']}</td>
+					<td>{$end_human}</td>
 					<td>
 						<form action='".make_link("ip_ban/remove")."' method='POST'>
 							<input type='hidden' name='id' value='{$ban['id']}'>