X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fgallery.php;h=886b6b9e88bcfc1ea8b7b16158bab607d3ece510;hb=06b234c3977609aae000c990125a48c46e523b56;hp=cfb6b650c5bb16a8d2adc75b218131ff36918c8d;hpb=c9aa0aebf9c290925dd67243902a72b4cb853653;p=quix0rs-gnu-social.git diff --git a/lib/gallery.php b/lib/gallery.php index cfb6b650c5..886b6b9e88 100644 --- a/lib/gallery.php +++ b/lib/gallery.php @@ -34,7 +34,13 @@ class GalleryAction extends Action { function handle($args) { parent::handle($args); + + # Post from the tag dropdown; redirect to a GET + if ($_SERVER['REQUEST_METHOD'] == 'POST') { + common_redirect($this->self_url(), 307); + } + $nickname = common_canonical_nickname($this->arg('nickname')); $user = User::staticGet('nickname', $nickname); @@ -62,10 +68,16 @@ class GalleryAction extends Action { $display = 'list'; } + $tag = $this->arg('tag'); + common_show_header($profile->nickname . ": " . $this->gallery_type(), NULL, $profile, array($this, 'show_top')); - $this->show_gallery($profile, $page, $display); + + $this->display_links($profile, $page, $display); + $this->show_tags_dropdown($profile); + + $this->show_gallery($profile, $page, $display, $tag); common_show_footer(); } @@ -73,12 +85,43 @@ class GalleryAction extends Action { $this->client_error(_('No such user.')); } + function show_tags_dropdown($profile) { + $tag = $this->trimmed('tag'); + list($lst, $usr) = $this->fields(); + $tags = $this->get_all_tags($profile, $lst, $usr); + $content = array(); + foreach ($tags as $t) { + $content[$t] = $t; + } + if ($tags) { + common_element_start('dl', array('id'=>'filter_tags')); + common_element('dt', null, _('Filter tags')); + common_element_start('dd'); + common_element_start('ul'); + common_element_start('li', array('id'=>'filter_tags_all', 'class'=>'child_1')); + common_element('a', array('href' => common_local_url($this->trimmed('action'), + array('nickname' => $profile->nickname))), + _('All')); + common_element_end('li'); + common_element_start('li', array('id'=>'filter_tags_item')); + common_element_start('form', array('name' => 'bytag', 'id' => 'bytag', 'method' => 'post')); + common_dropdown('tag', _('Tag'), $content, + _('Choose a tag to narrow list'), FALSE, $tag); + common_submit('go', _('Go')); + common_element_end('form'); + common_element_end('li'); + common_element_end('ul'); + common_element_end('dd'); + common_element_end('dl'); + } + } + function show_top($profile) { common_element('div', 'instructions', $this->get_instructions($profile)); } - function show_gallery($profile, $page, $display='list') { + function show_gallery($profile, $page, $display='list', $tag=NULL) { $other = new Profile(); @@ -96,42 +139,54 @@ class GalleryAction extends Action { } # XXX: memcached results + # FIXME: SQL injection on $tag - $cnt = $other->query('SELECT profile.* ' . - 'FROM profile JOIN subscription ' . - 'ON profile.id = subscription.' . $lst . ' ' . - 'WHERE ' . $usr . ' = ' . $profile->id . ' ' . - 'AND subscriber != subscribed ' . - 'ORDER BY subscription.created DESC ' . - $lim); + $other->query('SELECT profile.* ' . + 'FROM profile JOIN subscription ' . + 'ON profile.id = subscription.' . $lst . ' ' . + (($tag) ? 'JOIN profile_tag ON (profile.id = profile_tag.tagged AND subscription.'.$usr.'= profile_tag.tagger) ' : '') . + 'WHERE ' . $usr . ' = ' . $profile->id . ' ' . + 'AND subscriber != subscribed ' . + (($tag) ? 'AND profile_tag.tag= "' . $tag . '" ': '') . + 'ORDER BY subscription.created DESC, profile.id DESC ' . + $lim); - if ($cnt == 0) { - common_element('p', NULL, _('Nobody to show!')); - return; - } - if ($display == 'list') { - $profile_list = new ProfileList($other); - $profile_list->show_list(); + $profile_list = new ProfileList($other, $profile, $this->trimmed('action')); + $cnt = $profile_list->show_list(); } else { - $this->icon_list($profile, $cnt); + $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, $this->trimmed('action'), - array('nickname' => $profile->nickname)); + $args); } - function icon_list($other, $subs_count) { + function icon_list($other) { common_element_start('ul', $this->div_class()); - - for ($idx = 0; $idx < min($subs_count, AVATARS_PER_PAGE); $idx++) { - $other->fetch(); + $cnt = 0; + + while ($other->fetch()) { + $cnt++; + + if ($cnt > AVATARS_PER_PAGE) { + break; + } + common_element_start('li'); common_element_start('a', array('title' => ($other->fullname) ? @@ -158,6 +213,8 @@ class GalleryAction extends Action { } common_element_end('ul'); + + return $cnt; } function gallery_type() { @@ -175,4 +232,65 @@ 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')); + common_element_start('li'); + $url_args = array('display' => 'icons', + 'nickname' => $profile->nickname, + 'page' => 1 + floor((($page - 1) * PROFILES_PER_PAGE) / AVATARS_PER_PAGE)); + if ($tag) { + $url_args['tag'] = $tag; + } + $url = common_local_url($this->trimmed('action'), $url_args); + common_element('a', array('href' => $url), + _('Icons')); + common_element_end('li'); + break; + default: + common_element_start('li', array('class'=>'child_1')); + $url_args = array('nickname' => $profile->nickname, + 'page' => 1 + floor((($page - 1) * AVATARS_PER_PAGE) / PROFILES_PER_PAGE)); + if ($tag) { + $url_args['tag'] = $tag; + } + $url = common_local_url($this->trimmed('action'), $url_args); + common_element('a', array('href' => $url), + _('List')); + common_element_end('li'); + 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) { + $profile_tag = new Notice_tag(); + $profile_tag->query('SELECT DISTINCT(tag) ' . + 'FROM profile_tag, subscription ' . + 'WHERE tagger = ' . $profile->id . ' ' . + 'AND ' . $usr . ' = ' . $profile->id . ' ' . + 'AND ' . $lst . ' = tagged ' . + 'AND tagger != tagged'); + $tags = array(); + while ($profile_tag->fetch()) { + $tags[] = $profile_tag->tag; + } + $profile_tag->free(); + return $tags; + } } \ No newline at end of file