Improve user homepage
authorSebastian Spaeth <Sebastian@SSpaeth.de>
Wed, 11 May 2011 06:39:57 +0000 (08:39 +0200)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Fri, 13 May 2011 04:10:21 +0000 (23:10 -0500)
1) Only consider user's with 'status': 'active'. We don't want to
   display unconfirmed/blocked users, right?
2) Actually query user's media in the view and display on their home
   page.
3) Throw an error 404 if we don't find a valid user, rather than saying,
   "User not found" (from within the template).
4) Pass in medias as media_entries to remain compatible with the 'root'
   page.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
mediagoblin/templates/mediagoblin/user_pages/user.html
mediagoblin/user_pages/views.py

index 4fa84430a5c9a7e15a6403ecc0204340c2dd6903..85f05e082fff392e3cbbf28e91244af0c84a0a10 100644 (file)
 {% block mediagoblin_content -%}
   {% if user %}
     <h2>User page for '{{ user.username }}'</h2>
-    {{ user }}
+
+    {#- Should we outsource such a media 'gallery' view to it's own file?
+        It could be useful for the home page and other views too -#}
+    <ul>
+      {%- for entry in media_entries %}
+      <li>
+        <a href="{{ request.urlgen('mediagoblin.user_pages.media_home',
+                 user= entry.uploader.username, m_id= entry._id) }}">
+          <img src="{{ request.app.public_store.file_url(
+                    entry['media_files']['thumb']) }}" /></a>
+      </li>
+      {%- endfor %}
+    </ul>
   {% else %}
+    {# This *should* not occur as the view makes sure we pass in a user. #}
     <p>Sorry, no such user found.<p/>
   {% endif %}
 {% endblock %}    
index cc613c402e7e8a56c97a6dc882ed9403b055cc39..2c9792fab35c764c57d6e4b54ed66e011de6efeb 100644 (file)
 # 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/>.
 
-from webob import Response
+from webob import Response, exc
 from mongokit import ObjectId
 import wtforms
 
 
 def user_home(request):
     """'Homepage' of a User()"""
-    user = request.db.User.find_one(
-        {'username': request.matchdict['user']})
+    user = request.db.User.find_one({
+            'username': request.matchdict['user'],
+            'status': 'active'})
+    if not user:
+        return exc.HTTPNotFound()
 
-    medias = request.db.MediaEntry.find()
+    medias = request.db.MediaEntry.find({
+            'uploader': user,
+            'state': 'processed'})
 
     template = request.template_env.get_template(
         'mediagoblin/user_pages/user.html')
@@ -32,16 +37,18 @@ def user_home(request):
         template.render(
             {'request': request,
              'user': user,
-             'medias': medias}))
+             'media_entries': medias}))
 
 
 def media_home(request):
     """'Homepage' of a MediaEntry()"""
-    media = request.db.MediaEntry.find_one(
-        ObjectId(request.matchdict['m_id']))
+    media = request.db.MediaEntry.find_one({
+            '_id': ObjectId(request.matchdict['m_id']),
+            'state': 'processed'})
 
-    #check that media uploader and user correspond
-    if media['uploader'].get('username') != request.matchdict['user']:
+    # Check that media uploader and user correspond.
+    if not media or \
+            media['uploader'].get('username') != request.matchdict['user']:
         return exc.HTTPNotFound()
 
     template = request.template_env.get_template(