diff options
author | matthew.gregg <matthew.gregg@gmail.com> | 2008-07-15 23:20:45 -0400 |
---|---|---|
committer | matthew.gregg <matthew.gregg@gmail.com> | 2008-07-15 23:20:45 -0400 |
commit | faa3933fbb54d0fc4a12145bd0aefa899db30dea (patch) | |
tree | b72d7e33ff8d7f7bc3f9dd93cb59429a89ab0fbf /lib | |
parent | b6efc9889f589ba5c526f12f8b60f77fd902de6b (diff) |
Added notice deletion http://laconi.ca/PITS/00045
Removes selected notice and any replies that reference it.
Attempts to de-queue anything pending.
This patch does not archive notices.
darcs-hash:20080716032045-982e4-a0b5d37ecfa84796f1681dda54110094ad1424c6.gz
Diffstat (limited to 'lib')
-rw-r--r-- | lib/deleteaction.php | 61 | ||||
-rw-r--r-- | lib/stream.php | 12 | ||||
-rw-r--r-- | lib/util.php | 22 |
3 files changed, 95 insertions, 0 deletions
diff --git a/lib/deleteaction.php b/lib/deleteaction.php new file mode 100644 index 000000000..5d7a3245a --- /dev/null +++ b/lib/deleteaction.php @@ -0,0 +1,61 @@ +<?php +/* + * Laconica - a distributed open-source microblogging tool + * Copyright (C) 2008, Controlez-Vous, 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); } + +class DeleteAction extends Action { + + function handle($args) { + parent::handle($args); + $user = common_current_user(); + $notice_id = $this->trimmed('notice'); + $notice = Notice::staticGet($notice_id); + $profile = $notice->getProfile(); + $user_profile = $user->getProfile(); + + if (!common_logged_in()) { + common_user_error(_('Not logged in.')); + } else if ($notice->profile_id != $user_profile->id) { + common_user_error(_('Can\'t delete this notice.')); + } + } + + function show_top($arr=NULL) { + if ($arr) { + $error = $arr[1]; + } + if ($error) { + common_element('p', 'error', $error); + } else { + $instr = $this->get_instructions(); + $output = common_markup_to_html($instr); + common_element_start('div', 'instructions'); + common_raw($output); + common_element_end('div'); + } + } + + function get_title() { + return NULL; + } + + function show_header($arr) { + return; + } +} diff --git a/lib/stream.php b/lib/stream.php index fefd77a46..490a2739b 100644 --- a/lib/stream.php +++ b/lib/stream.php @@ -27,6 +27,7 @@ class StreamAction extends Action { function handle($args) { parent::handle($args); + common_set_returnto($this->self_url()); } function views_menu() { @@ -62,6 +63,11 @@ class StreamAction extends Action { function show_notice($notice) { global $config; $profile = $notice->getProfile(); + if (common_logged_in()) { + $user = common_current_user(); + $user_profile = $user->getProfile(); + } + # XXX: RDFa common_element_start('li', array('class' => 'notice_single', 'id' => 'notice-' . $notice->id)); @@ -112,6 +118,12 @@ class StreamAction extends Action { common_raw('→'); common_element_end('a'); common_element_end('p'); + if ($notice->profile_id == $user_profile->id) { + $deleteurl = common_local_url('deletenotice', array('notice' => $notice->id)); + common_element('a', array('class' => 'deletenotice', + 'href' => $deleteurl), + _('delete')); + } common_element_end('li'); } } diff --git a/lib/util.php b/lib/util.php index a049ea600..6d409f943 100644 --- a/lib/util.php +++ b/lib/util.php @@ -751,6 +751,12 @@ function common_fancy_url($action, $args=NULL) { } case 'shownotice': return common_path('notice/'.$args['notice']); + case 'deletenotice': + if ($args && $args['notice']) { + return common_path('deletenotice/'.$args['notice']); + } else { + return common_path('deletenotice/'); + } case 'xrds': case 'foaf': return common_path($args['nickname'].'/'.$action); @@ -965,6 +971,22 @@ function common_enqueue_notice($notice) { return $result; } +function common_dequeue_notice($notice) { + $qi = Queue_Item::staticGet($notice->id); + if ($qi) { + $result = $qi->delete(); + if (!$result) { + $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError'); + common_log(LOG_ERROR, 'DB error deleting queue item: ' . $last_error->message); + return false; + } + common_log(LOG_DEBUG, 'complete dequeueing notice ID = ' . $notice->id); + return $result; + } else { + return false; + } +} + function common_real_broadcast($notice, $remote=false) { $success = true; if (!$remote) { |