]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
filter galleries by tag
authorEvan Prodromou <evan@prodromou.name>
Mon, 24 Nov 2008 01:39:28 +0000 (20:39 -0500)
committerEvan Prodromou <evan@prodromou.name>
Mon, 24 Nov 2008 01:39:28 +0000 (20:39 -0500)
darcs-hash:20081124013928-84dde-c5f08e23edcf6873af04bd7f0d8aa1b64cb5c902.gz

lib/gallery.php

index 4ba9cbd2fce6857954ede12b7a0fd97e80641453..ca89e1029f668d52b6ffd5d08941c54a4406cdef 100644 (file)
@@ -62,13 +62,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->display_links($profile, $page, $display);
+               $this->show_tags_dropdown($profile);
                
-               $this->show_gallery($profile, $page, $display);
+               $this->show_gallery($profile, $page, $display, $tag);
                common_show_footer();
        }
 
@@ -76,12 +79,29 @@ class GalleryAction extends Action {
                $this->client_error(_('No such user.'));
        }
 
+       function show_tags_dropdown($profile) {
+               $tag = $this->trimmed('tag');
+               $tags = $profile->getAllTags();
+               $content = array();
+               foreach ($tags as $t) {
+                       $content[common_local_url($this->trimmed('action'), array('tag' => $t))] = $t;
+               }
+               common_element('a', array('href' => common_local_url($this->trimmed('action'),
+                                                                                                                        array('nickname' => $profile->nickname))),
+                                          _('All'));
+               common_element_start('form', array('name' => 'bytag', 'id' => 'bytag'));
+               common_dropdown('tag', _('Tag'), $content,
+                                               _('Choose a tag to narrow list'), FALSE, $tag);
+               common_submit('go', _('Go'));
+               common_element_end('form');
+       }
+       
        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();
                
@@ -99,12 +119,15 @@ class GalleryAction extends Action {
                }
 
                # XXX: memcached results
+               # XXX: SQL injection on $tag
                
                $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);