summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/shownotice.php8
-rw-r--r--actions/twitapistatuses.php10
-rwxr-xr-xclasses/Deleted_notice.php44
-rw-r--r--classes/Notice.php14
-rwxr-xr-x[-rw-r--r--]classes/laconica.ini11
-rw-r--r--db/laconica.sql14
6 files changed, 97 insertions, 4 deletions
diff --git a/actions/shownotice.php b/actions/shownotice.php
index 8f73dc824..3d7319489 100644
--- a/actions/shownotice.php
+++ b/actions/shownotice.php
@@ -84,7 +84,13 @@ class ShownoticeAction extends OwnerDesignAction
$this->notice = Notice::staticGet($id);
if (empty($this->notice)) {
- $this->clientError(_('No such notice.'), 404);
+ // Did we used to have it, and it got deleted?
+ $deleted = Deleted_notice::staticGet($id);
+ if (!empty($deleted)) {
+ $this->clientError(_('Notice deleted.'), 410);
+ } else {
+ $this->clientError(_('No such notice.'), 404);
+ }
return false;
}
diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php
index c9943698d..e3d366ecc 100644
--- a/actions/twitapistatuses.php
+++ b/actions/twitapistatuses.php
@@ -396,8 +396,14 @@ class TwitapistatusesAction extends TwitterapiAction
} else {
// XXX: Twitter just sets a 404 header and doens't bother
// to return an err msg
- $this->clientError(_('No status with that ID found.'),
- 404, $apidata['content-type']);
+ $deleted = Deleted_notice::staticGet($notice_id);
+ if (!empty($deleted)) {
+ $this->clientError(_('Status deleted.'),
+ 410, $apidata['content-type']);
+ } else {
+ $this->clientError(_('No status with that ID found.'),
+ 404, $apidata['content-type']);
+ }
}
}
diff --git a/classes/Deleted_notice.php b/classes/Deleted_notice.php
new file mode 100755
index 000000000..474d0b6f4
--- /dev/null
+++ b/classes/Deleted_notice.php
@@ -0,0 +1,44 @@
+<?php
+/*
+ * Laconica - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, Control Yourself, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('LACONICA')) { exit(1); }
+
+/**
+ * Table Definition for notice
+ */
+require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
+
+class Deleted_notice extends Memcached_DataObject
+{
+ ###START_AUTOCODE
+ /* the code below is auto generated do not remove the above tag */
+
+ public $__table = 'deleted_notice'; // table name
+ public $id; // int(4) primary_key not_null
+ public $profile_id; // int(4) not_null
+ public $uri; // varchar(255) unique_key
+ public $created; // datetime() not_null
+ public $deleted; // datetime() not_null
+
+ /* Static get */
+ function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Deleted_notice',$k,$v); }
+
+ /* the code above is auto generated do not remove the tag below */
+ ###END_AUTOCODE
+}
diff --git a/classes/Notice.php b/classes/Notice.php
index c2770edbe..4e9aff4f5 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -75,7 +75,21 @@ class Notice extends Memcached_DataObject
$this->blowFavesCache(true);
$this->blowSubsCache(true);
+ // For auditing purposes, save a record that the notice
+ // was deleted.
+
+ $deleted = new Deleted_notice();
+
+ $deleted->id = $this->id;
+ $deleted->profile_id = $this->profile_id;
+ $deleted->uri = $this->uri;
+ $deleted->created = $this->created;
+ $deleted->deleted = common_sql_now();
+
$this->query('BEGIN');
+
+ $deleted->insert();
+
//Null any notices that are replies to this notice
$this->query(sprintf("UPDATE notice set reply_to = null WHERE reply_to = %d", $this->id));
$related = array('Reply',
diff --git a/classes/laconica.ini b/classes/laconica.ini
index 766bed75d..f8d4eebd3 100644..100755
--- a/classes/laconica.ini
+++ b/classes/laconica.ini
@@ -38,6 +38,17 @@ modified = 384
[consumer__keys]
consumer_key = K
+[deleted_notice]
+id = 129
+profile_id = 129
+uri = 2
+created = 142
+deleted = 142
+
+[deleted_notice__keys]
+id = K
+uri = U
+
[design]
id = 129
backgroundcolor = 1
diff --git a/db/laconica.sql b/db/laconica.sql
index 2c04f680a..f01107176 100644
--- a/db/laconica.sql
+++ b/db/laconica.sql
@@ -534,4 +534,16 @@ create table session (
index session_modified_idx (modified)
-) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; \ No newline at end of file
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+create table deleted_notice (
+
+ id integer primary key comment 'identity of notice',
+ profile_id integer not null comment 'author of the notice',
+ uri varchar(255) unique key comment 'universally unique identifier, usually a tag URI',
+ created datetime not null comment 'date the notice record was created',
+ deleted datetime not null comment 'date the notice record was created',
+
+ index deleted_notice_profile_id_idx (profile_id)
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;