From 9b4df5056f2dba6b6fa7ac392c2114fd3c1400a0 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 8 Dec 2008 00:55:11 -0500 Subject: add block form to subscribers list and profile page I added a small form for blocking users to profiles in the profile list, and also to the profile page. I also added an action to handle the results of blocking someone. This required some changes to the profile list class (so I could add the block form), so I made them. And the gallery class lets its subclasses return a subclass of ProfileList for their profile list. darcs-hash:20081208055511-5ed1f-e2e09986bd3b9cbb6a00a0c6b94f49ea78b7bdab.gz --- lib/gallery.php | 57 +++++++++++++++++++++++++++++------------------------ lib/profilelist.php | 13 ++++++++++-- lib/util.php | 17 ++++++++++++++++ 3 files changed, 59 insertions(+), 28 deletions(-) (limited to 'lib') diff --git a/lib/gallery.php b/lib/gallery.php index 886b6b9e8..bd77b587c 100644 --- a/lib/gallery.php +++ b/lib/gallery.php @@ -36,7 +36,7 @@ class GalleryAction extends Action { parent::handle($args); # Post from the tag dropdown; redirect to a GET - + if ($_SERVER['REQUEST_METHOD'] == 'POST') { common_redirect($this->self_url(), 307); } @@ -57,17 +57,17 @@ class GalleryAction extends Action { } $page = $this->arg('page'); - + if (!$page) { $page = 1; } $display = $this->arg('display'); - + if (!$display) { $display = 'list'; } - + $tag = $this->arg('tag'); common_show_header($profile->nickname . ": " . $this->gallery_type(), @@ -76,7 +76,7 @@ class GalleryAction extends Action { $this->display_links($profile, $page, $display); $this->show_tags_dropdown($profile); - + $this->show_gallery($profile, $page, $display, $tag); common_show_footer(); } @@ -115,7 +115,7 @@ class GalleryAction extends Action { common_element_end('dl'); } } - + function show_top($profile) { common_element('div', 'instructions', $this->get_instructions($profile)); @@ -124,14 +124,14 @@ class GalleryAction extends Action { function show_gallery($profile, $page, $display='list', $tag=NULL) { $other = new Profile(); - + list($lst, $usr) = $this->fields(); $per_page = ($display == 'list') ? PROFILES_PER_PAGE : AVATARS_PER_PAGE; $offset = ($page-1)*$per_page; $limit = $per_page + 1; - + if (common_config('db','type') == 'pgsql') { $lim = ' LIMIT ' . $limit . ' OFFSET ' . $offset; } else { @@ -140,7 +140,7 @@ class GalleryAction extends Action { # XXX: memcached results # FIXME: SQL injection on $tag - + $other->query('SELECT profile.* ' . 'FROM profile JOIN subscription ' . 'ON profile.id = subscription.' . $lst . ' ' . @@ -150,22 +150,23 @@ class GalleryAction extends Action { (($tag) ? 'AND profile_tag.tag= "' . $tag . '" ': '') . 'ORDER BY subscription.created DESC, profile.id DESC ' . $lim); - + if ($display == 'list') { - $profile_list = new ProfileList($other, $profile, $this->trimmed('action')); + $cls = $this->profile_list_class(); + $profile_list = new $cls($other, $profile, $this->trimmed('action')); $cnt = $profile_list->show_list(); } else { $cnt = $this->icon_list($other); } # For building the pagination URLs - + $args = array('nickname' => $profile->nickname); - + if ($display != 'list') { $args['display'] = $display; } - + common_pagination($page > 1, $cnt > $per_page, $page, @@ -173,20 +174,24 @@ class GalleryAction extends Action { $args); } + function profile_list_class() { + return 'ProfileList'; + } + function icon_list($other) { - + common_element_start('ul', $this->div_class()); $cnt = 0; - + while ($other->fetch()) { $cnt++; - + if ($cnt > AVATARS_PER_PAGE) { break; } - + common_element_start('li'); common_element_start('a', array('title' => ($other->fullname) ? @@ -211,12 +216,12 @@ class GalleryAction extends Action { common_element_end('li'); } - + common_element_end('ul'); - + return $cnt; } - + function gallery_type() { return NULL; } @@ -232,15 +237,15 @@ class GalleryAction extends Action { function div_class() { return ''; } - + function display_links($profile, $page, $display) { $tag = $this->trimmed('tag'); - + common_element_start('dl', array('id'=>'subscriptions_nav')); common_element('dt', null, _('Subscriptions navigation')); common_element_start('dd'); common_element_start('ul', array('class'=>'nav')); - + switch ($display) { case 'list': common_element('li', array('class'=>'child_1'), _('List')); @@ -270,12 +275,12 @@ class GalleryAction extends Action { common_element('li', NULL, _('Icons')); break; } - + common_element_end('ul'); common_element_end('dd'); common_element_end('dl'); } - + # Get list of tags we tagged other users with function get_all_tags($profile, $lst, $usr) { diff --git a/lib/profilelist.php b/lib/profilelist.php index 67be04e10..7461f9415 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -55,12 +55,11 @@ class ProfileList { function show() { - $this->profile = $this->profile; - common_element_start('li', array('class' => 'profile_single', 'id' => 'profile-' . $this->profile->id)); $user = common_current_user(); + if ($user && $user->id != $this->profile->id) { # XXX: special-case for user looking at own # subscriptions page @@ -151,9 +150,19 @@ class ProfileList { common_element_end('div'); } + if ($user && $user->id == $this->owner->id) { + $this->show_owner_controls($profile); + } + common_element_end('li'); } + /* Override this in subclasses. */ + + function show_owner_controls($profile) { + return; + } + function highlight($text) { return htmlspecialchars($text); } diff --git a/lib/util.php b/lib/util.php index 4fb58e7dc..df736cf01 100644 --- a/lib/util.php +++ b/lib/util.php @@ -2183,3 +2183,20 @@ function common_compatible_license($from, $to) { # XXX: better compatibility check needed here! return ($from == $to); } + +function common_block_form($profile) { + common_element_start('form', array('id' => 'block-' . $profile->id, + 'method' => 'post', + 'class' => 'block', + 'action' => common_local_url('block'))); + common_hidden('token', common_session_token()); + common_element('input', array('id' => 'blockto-' . $profile->id, + 'name' => 'blockto', + 'type' => 'hidden', + 'value' => $profile->id)); + common_element('input', array('type' => 'submit', + 'class' => 'submit', + 'value' => _('Block'))); + common_element_end('form'); + return; +} -- cgit v1.2.3-54-g00ecf