Fixes to show All Time data
Fixes to show All Time data

--- a/ckanext/ga_report/controller.py
+++ b/ckanext/ga_report/controller.py
@@ -105,23 +105,31 @@
         c.months = _month_details(GA_Url)
 
         # Work out which month to show, based on query params of the first item
-        c.month = request.params.get('month', c.months[0][0] if c.months else '')
-        c.month_desc = ''.join([m[1] for m in c.months if m[0]==c.month])
+        c.month = request.params.get('month', '')
+        c.month_desc = 'all time'
+        if c.month:
+            c.month_desc = ''.join([m[1] for m in c.months if m[0]==c.month])
 
         connection = model.Session.connection()
         q = """
             select department_id, sum(pageviews::int) views, sum(visitors::int) visits
             from ga_url
-            where department_id <> ''
-                and period_name=%s
-            group by department_id order by views desc limit 20;
-        """
+            where department_id <> ''"""
+        if c.month:
+            q = q + """
+                    and period_name=%s
+            """
+        q = q + """
+                group by department_id order by views desc limit 20;
+            """
+
         # Add this back (before and period_name =%s) if you want to ignore publisher
         # homepage views
         # and not url like '/publisher/%%'
 
         c.top_publishers = []
         res = connection.execute(q, c.month)
+
         for row in res:
             c.top_publishers.append((model.Group.get(row[0]), row[1], row[2]))
 
@@ -129,6 +137,7 @@
 
 
     def read(self, id):
+        count = 20
 
         c.publisher = model.Group.get(id)
         if not c.publisher:
@@ -140,22 +149,50 @@
         c.months = _month_details(GA_Url)
 
         # Work out which month to show, based on query params of the first item
-        c.month = request.params.get('month', c.months[0][0] if c.months else '')
-        c.month_desc = ''.join([m[1] for m in c.months if m[0]==c.month])
+        c.month = request.params.get('month', '')
+        if not c.month:
+            c.month_desc = 'all time'
+        else:
+            c.month_desc = ''.join([m[1] for m in c.months if m[0]==c.month])
 
-        entry = model.Session.query(GA_Url).\
-            filter(GA_Url.url=='/publisher/%s' % c.publisher.name).\
-            filter(GA_Url.period_name==c.month).first()
-        c.publisher_page_views = entry.pageviews if entry else 0
+        c.publisher_page_views = 0
+        q = model.Session.query(GA_Url).\
+            filter(GA_Url.url=='/publisher/%s' % c.publisher.name)
+        if c.month:
+            entry = q.filter(GA_Url.period_name==c.month).first()
+            c.publisher_page_views = entry.pageviews if entry else 0
+        else:
+            for e in q.all():
+                c.publisher_page_views = c.publisher_page_views  + int(e.pageviews)
 
-        entries = model.Session.query(GA_Url).\
+
+        q =  model.Session.query(GA_Url).\
             filter(GA_Url.department_id==c.publisher.name).\
-            filter(GA_Url.period_name==c.month).\
-            order_by('ga_url.pageviews::int desc')[:20]
-        for entry in entries:
-            if entry.url.startswith('/dataset/'):
+            filter(GA_Url.url.like('/dataset/%'))
+        if c.month:
+            q = q.filter(GA_Url.period_name==c.month)
+        q = q.order_by('ga_url.pageviews::int desc')
+
+        if c.month:
+            for entry in q[:count]:
                 p = model.Package.get(entry.url[len('/dataset/'):])
                 c.top_packages.append((p,entry.pageviews,entry.visitors))
+        else:
+            ds = {}
+            for entry in q.all():
+                if len(ds) >= count:
+                    break
+                p = model.Package.get(entry.url[len('/dataset/'):])
+                if not p in ds:
+                    ds[p] = {'views':0, 'visits': 0}
+                ds[p]['views'] = ds[p]['views'] + int(entry.pageviews)
+                ds[p]['visits'] = ds[p]['visits'] + int(entry.visitors)
+
+            results = []
+            for k, v in ds.iteritems():
+                results.append((k,v['views'],v['visits']))
+
+            c.top_packages = sorted(results, key=operator.itemgetter(1), reverse=True)
 
         return render('ga_report/publisher/read.html')
 

--- a/ckanext/ga_report/helpers.py
+++ b/ckanext/ga_report/helpers.py
@@ -16,13 +16,14 @@
     entries = model.Session.query(GA_Url).\
         filter(GA_Url.department_id==publisher.name).\
         filter(GA_Url.url.like('/dataset/%')).\
-        order_by('ga_url.pageviews::int desc')[:count]
+        order_by('ga_url.pageviews::int desc').all()
     for entry in entries:
-        p = model.Package.get(entry.url[len('/dataset/'):])
-        if not p in datasets:
-            datasets[p] = {'views':0, 'visits': 0}
-        datasets[p]['views'] = datasets[p]['views'] + int(entry.pageviews)
-        datasets[p]['visits'] = datasets[p]['visits'] + int(entry.visitors)
+        if len(datasets) < count:
+            p = model.Package.get(entry.url[len('/dataset/'):])
+            if not p in datasets:
+                datasets[p] = {'views':0, 'visits': 0}
+            datasets[p]['views'] = datasets[p]['views'] + int(entry.pageviews)
+            datasets[p]['visits'] = datasets[p]['visits'] + int(entry.visitors)
 
     results = []
     for k, v in datasets.iteritems():
@@ -33,6 +34,7 @@
     ctx = {
         'dataset_count': len(datasets),
         'datasets': results,
+
         'publisher': publisher
     }
 

--- a/ckanext/ga_report/plugin.py
+++ b/ckanext/ga_report/plugin.py
@@ -21,7 +21,8 @@
         """
         from ckanext.ga_report.helpers import most_popular_datasets
         return {
-            'most_popular_datasets': most_popular_datasets
+            'ga_report_installed': lambda: True,
+            'most_popular_datasets': most_popular_datasets,
         }
 
     def after_map(self, map):

--- a/ckanext/ga_report/templates/ga_report/publisher/index.html
+++ b/ckanext/ga_report/templates/ga_report/publisher/index.html
@@ -14,11 +14,13 @@
 
   <div py:match="content">
       <h1>Publisher Analytics</h1>
-      <h2>The top 20 publishers</h2>
+      <h2>The top 20 publishers of ${c.month_desc}</h2>
 
       <form class="form-inline" action="${h.url_for(controller='ckanext.ga_report.controller:GaPublisherReport',action='index')}" method="get">
           <div class="controls">
           <select name="month">
+                <option value='' py:attrs="{'selected': 'selected' if not c.month else None}">All time</option>
+
               <py:for each="val,desc in c.months">
                 <option value='${val}' py:attrs="{'selected': 'selected' if c.month == val else None}">${desc}</option>
               </py:for>

--- a/ckanext/ga_report/templates/ga_report/publisher/popular.html
+++ b/ckanext/ga_report/templates/ga_report/publisher/popular.html
@@ -2,17 +2,20 @@
   xmlns:i18n="http://genshi.edgewall.org/i18n"
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
+  <py:if test="dataset_count == 0">
+    <p>We do not currently have analytics data for ${publisher.title}</p>
+  </py:if>
+
   <py:if test="dataset_count > 0">
     <div class="popular_datasets">
-        <ul class="popular_dataset_list">
+        <ul>
             <py:for each="dataset,views,visits in datasets">
                 <li>
                     ${h.link_to(dataset.title, h.url_for(controller='package', action='read', id=dataset.name))}
                 </li>
             </py:for>
         </ul>
-
-      <p>${h.link_to("More analytics for " + publisher.title, h.url_for(controller='ckanext.ga_report.controller:GaPublisherReport',action='read',id=publisher.name))}</p>
+      <p class="">${h.link_to("More analytics for " + publisher.title, h.url_for(controller='ckanext.ga_report.controller:GaPublisherReport',action='read',id=publisher.name))}</p>
      </div>
   </py:if>
 </html>

--- a/ckanext/ga_report/templates/ga_report/publisher/read.html
+++ b/ckanext/ga_report/templates/ga_report/publisher/read.html
@@ -13,10 +13,10 @@
           The table shows the top 20 most viewed datasets belonging to ${c.publisher.title}.
       </p>
       <p>
-          As well as showing the number of views within ${c.month_desc}, it will also show the
+          As well as showing the number of views for ${c.month_desc}, it will also show the
           number of visitors that viewed each dataset.
       </p>
-       <p>The dataset list page for <a href="${h.url_for(controller='ckanext.dgu.controllers.publisher:PublisherController', action='read', id=c.publisher.name)}">${c.publisher.title}</a> was viewed ${c.publisher_page_views} times during ${c.month_desc}</p>
+       <p>The dataset list page for <a href="${h.url_for(controller='ckanext.dgu.controllers.publisher:PublisherController', action='read', id=c.publisher.name)}">${c.publisher.title}</a> was viewed ${c.publisher_page_views} times during the selected time period</p>
        <p>View the <a href="${h.url_for(controller='ckanext.ga_report.controller:GaPublisherReport', action='index')}">publishers</a> leaderboard</p>
     </li>
   </py:match>
@@ -24,12 +24,13 @@
   <div py:match="content">
       <h1>Analytics for ${c.publisher.title}</h1>
 
-      <h2>Top 20 most viewed datasets</h2>
+      <h2>Top 20 most viewed datasets of ${c.month_desc}</h2>
       <p><em>Note: this data does not include API calls</em></p>
 
       <form class="form-inline" action="${h.url_for(controller='ckanext.ga_report.controller:GaPublisherReport',action='read',id=c.publisher.name)}" method="get">
           <div class="controls">
           <select name="month">
+                <option value='' py:attrs="{'selected': 'selected' if not c.month else None}">All time</option>
               <py:for each="val,desc in c.months">
                 <option value='${val}' py:attrs="{'selected': 'selected' if c.month == val else None}">${desc}</option>
               </py:for>

--- a/ckanext/ga_report/templates/ga_report/site/index.html
+++ b/ckanext/ga_report/templates/ga_report/site/index.html
@@ -9,6 +9,10 @@
     <li class="widget-container boxed widget_text">
       <h4>Statistics</h4>
         <p>It is possible to <a href="${h.url_for(controller='ckanext.ga_report.controller:GaReport',action='csv',month=c.month)}">export the analytics data</a> as a CSV file, which contains all of the information for ${c.month_desc}</p>
+    </li>
+    <li class="widget-container boxed widget_text">
+        <h4>Publisher statistics</h4>
+        <p>You can view statistics about specific publishers at the <a href="${h.url_for(controller='ckanext.ga_report.controller:GaPublisherReport',action='index')}">Publisher Analytics</a> page</p>
 
     </li>
   </py:match>