root/trunk/website/blog/stats.cfm @ 19

Revision 5, 14.6 kB (checked in by DanWilson, 17 years ago)

Initial Commit Of ModelGlue? Website (upgrade to blogcfc 511)

Line 
1<cfsetting enablecfoutputonly=true>
2<cfprocessingdirective pageencoding="utf-8">
3<!---
4        Name         : Stats
5        Author       : Raymond Camden
6        Created      : November 19, 2004
7        Last Updated : April 13, 2007
8        History      : reset for 5.0
9                                 : gettopviews didnt filter by blog. gettotalviews added (rkc 7/17/06)
10                                 : rb use, and subscriber count wsn't filtering by verified (rkc 8/20/06)
11                                 : comment mod support (rkc 12/7/06)
12                                 : top commenters support (rkc 2/28/07)
13                                 : fix MS Access (rkc 3/2/07)
14                                 : just formatting (rkc 4/13/07)
15        Purpose          : Stats
16--->
17
18<cfmodule template="tags/layout.cfm" title="#rb("stats")#">
19       
20        <cfset dsn = application.blog.getProperty("dsn")>
21        <cfset dbtype = application.blog.getProperty("blogdbtype")>
22        <cfset blog = application.blog.getProperty("name")>
23        <cfset username = application.blog.getProperty("username")>
24        <cfset password = application.blog.getProperty("password")>
25       
26        <!--- get a bunch of crap --->
27        <cfquery name="getTotalEntries" datasource="#dsn#" username="#username#" password="#password#">
28                select  count(id) as totalentries,
29                                min(posted) as firstentry,
30                                max(posted) as lastentry
31                from    tblblogentries
32                where   tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
33        </cfquery>
34
35        <cfquery name="getTotalSubscribers" datasource="#dsn#" username="#username#" password="#password#">
36                select  count(email) as totalsubscribers
37                from    tblblogsubscribers
38                where   tblblogsubscribers.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
39                and             verified = 1
40        </cfquery>
41
42        <cfquery name="getTotalViews" datasource="#dsn#" username="#username#" password="#password#">
43                select          sum(views) as total
44                from            tblblogentries
45                where   tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
46        </cfquery>
47
48        <cfquery name="getTopViews" datasource="#dsn#" username="#username#" password="#password#">
49                select          <cfif not listFindNoCase("mysql,oracle",dbtype)>top 10 </cfif> id, title, views
50                from            tblblogentries
51                where   tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
52                <cfif dbtype is "oracle">
53                and             rownum <= 10
54                </cfif>
55                order by        views desc
56                <cfif dbtype is "mysql">limit 10</cfif>         
57        </cfquery>
58       
59        <!--- get last 30 --->
60        <cfset thirtyDaysAgo = dateAdd("d", -30, now())>
61        <cfquery name="last30" datasource="#dsn#" username="#username#" password="#password#">
62                select  count(id) as totalentries
63                from    tblblogentries
64                where   tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
65                and             posted >= <cfqueryparam cfsqltype="cf_sql_date" value="#thirtyDaysAgo#">
66        </cfquery>
67       
68        <cfquery name="getTotalComments" datasource="#dsn#" username="#username#" password="#password#">
69                select  count(tblblogcomments.id) as totalcomments
70                from    tblblogcomments, tblblogentries
71                where   tblblogcomments.entryidfk = tblblogentries.id
72                and             tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
73                <cfif application.commentmoderation>
74                and             tblblogcomments.moderated = 1
75                </cfif>
76        </cfquery>
77       
78        <cfif application.blog.getProperty("allowtrackbacks")>
79                <!--- RBB: 1/20/2006: get trackbacks --->
80                <cfquery name="getTotalTrackbacks" datasource="#dsn#" username="#username#" password="#password#">
81                        select count(tblblogtrackbacks.id) as totaltrackbacks
82                        from    tblblogtrackbacks, tblblogentries
83                        where   tblblogtrackbacks.entryid = tblblogentries.id
84                        and             tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
85                </cfquery>
86        </cfif>
87               
88        <!--- gets num of entries per category --->
89        <cfquery name="getCategoryCount" datasource="#dsn#" username="#username#" password="#password#">
90                select  categoryid, categoryname, count(categoryidfk) as total
91                from    tblblogcategories, tblblogentriescategories
92                where   tblblogentriescategories.categoryidfk = tblblogcategories.categoryid
93                and             tblblogcategories.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
94                group by tblblogcategories.categoryid, tblblogcategories.categoryname
95                <cfif dbtype is not "msaccess">
96                        order by total desc
97                <cfelse>
98                        order by count(categoryidfk) desc
99                </cfif>
100        </cfquery>
101       
102        <!--- gets num of comments per entry, top 10 --->
103        <cfquery name="topCommentedEntries" datasource="#dsn#" username="#username#" password="#password#">
104                select
105                <cfif not listFindNoCase("mysql,oracle",dbtype)>top 10 </cfif>
106                tblblogentries.id, tblblogentries.title, count(tblblogcomments.id) as commentcount
107                from                    tblblogentries, tblblogcomments
108                where                   tblblogcomments.entryidfk = tblblogentries.id
109                <cfif dbtype is "oracle">
110                and             rownum <= 10
111                </cfif>         
112                and                             tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
113                <cfif application.commentmoderation>
114                and                             tblblogcomments.moderated = 1
115                </cfif>
116
117                group by                tblblogentries.id, tblblogentries.title
118                <cfif dbtype is not "msaccess">
119                        order by        commentcount desc
120                <cfelse>
121                        order by        count(tblblogcomments.id) desc
122                </cfif>
123                <cfif dbtype is "mysql">limit 10</cfif>
124        </cfquery>
125
126        <!--- gets num of comments per category, top 10 --->
127        <cfquery name="topCommentedCategories" datasource="#dsn#" username="#username#" password="#password#">
128                select
129                <cfif not listFindNoCase("mysql,oracle",dbtype)>top 10 </cfif>
130                                                tblblogcategories.categoryid,
131                                                tblblogcategories.categoryname,
132                                                count(tblblogcomments.id) as commentcount
133                from                    tblblogcategories, tblblogcomments, tblblogentriescategories
134                where                   tblblogcomments.entryidfk = tblblogentriescategories.entryidfk
135                <cfif dbtype is "oracle">
136                and             rownum <= 10
137                </cfif>         
138                and                             tblblogentriescategories.categoryidfk = tblblogcategories.categoryid
139                and                             tblblogcategories.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
140                <cfif application.commentmoderation>
141                and                             tblblogcomments.moderated = 1
142                </cfif>         
143                group by                tblblogcategories.categoryid, tblblogcategories.categoryname
144                <cfif dbtype is not "msaccess">
145                        order by        commentcount desc
146                <cfelse>
147                        order by        count(tblblogcomments.id) desc
148                </cfif>
149                <cfif dbtype is "mysql">limit 10</cfif>
150        </cfquery>
151       
152        <cfif application.blog.getProperty("allowtrackbacks")>
153                <!--- RBB 1/20/2006: gets num of trackbacks per entry, top 10 --->
154                <cfquery name="topTrackbackedEntries" datasource="#dsn#" username="#username#" password="#password#">
155                        select
156                        <cfif not listFindNoCase("mysql,oracle",dbtype)>top 10 </cfif>
157                        tblblogentries.id, tblblogentries.title, count(tblblogtrackbacks.id) as trackbackcount
158                        from                    tblblogentries, tblblogtrackbacks
159                        where                   tblblogtrackbacks.entryid = tblblogentries.id
160                        and                             tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
161                        <cfif dbtype is "oracle">
162            and         rownum <= 10
163            </cfif>     
164                        group by                tblblogentries.id, tblblogentries.title
165                        <cfif dbtype is not "msaccess">
166                                order by        trackbackcount desc
167                        <cfelse>
168                                order by        count(tblblogtrackbacks.id) desc
169                        </cfif>
170                        <cfif dbtype is "mysql">limit 10</cfif>
171                </cfquery>     
172        </cfif>
173               
174        <cfquery name="topSearchTerms" datasource="#dsn#" username="#username#" password="#password#">
175                select         
176                <cfif not listFindNoCase("mysql,oracle",dbtype)>top 10 </cfif>
177                                        searchterm, count(searchterm) as total
178                from            tblblogsearchstats
179                where           blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
180                <cfif dbtype is "oracle">
181                and             rownum <= 10
182                </cfif>
183        group by        searchterm
184                <cfif dbtype is not "msaccess">
185                        order by        total desc
186                <cfelse>
187                        order by        count(searchterm) desc
188                </cfif>
189                <cfif dbtype is "mysql">limit 10</cfif>
190        </cfquery>
191       
192        <cfquery name="topCommenters" datasource="#dsn#" username="#username#" password="#password#" maxrows="10">
193        select  count(tblblogcomments.email) as emailCount, email, tblblogcomments.name
194        from    tblblogcomments, tblblogentries
195        where   tblblogcomments.entryidfk = tblblogentries.id
196        and     tblblogentries.blog = <cfqueryparam cfsqltype="cf_sql_varchar" value="#blog#">
197        group by tblblogcomments.email, tblblogcomments.name
198        <cfif dbtype is not "msaccess">
199        order by emailCount desc
200        <cfelse>
201        order by count(tblblogcomments.email) desc
202        </cfif>
203        </cfquery>
204                               
205        <cfset averageCommentsPerEntry = 0>     
206        <cfif getTotalEntries.totalEntries>
207                <cfset dur = dateDiff("d",getTotalEntries.firstEntry, now())>
208                <cfset averageCommentsPerEntry = getTotalComments.totalComments / getTotalEntries.totalEntries>
209        </cfif>
210       
211        <cfoutput>
212        <div class="date"><b>#rb("contents")#</b></div>
213        <div class="body">
214        <a href="##generalstats">#rb("generalstats")#</a><br>
215        <a href="##topviews">#rb("topviews")#</a><br>
216        <a href="##categorystats">#rb("categorystats")#</a><br>
217        <a href="##topentriesbycomments">#rb("topentriesbycomments")#</a><br>
218        <a href="##topcategoriesbycomments">#rb("topcategoriesbycomments")#</a><br>
219        <cfif application.blog.getProperty("allowtrackbacks")><a href="##topentriesbytrackbacks">#rb("topentriesbytrackbacks")#</a><br></cfif>
220        <a href="##topsearchterms">#rb("topsearchterms")#</a><br>
221        <a href="##topcommenters">#rb("topcommenters")#</a><br>
222
223        </div>
224       
225        <p />
226       
227        <div class="date"><a name="generalstats"></a><b>#rb("generalstats")#</b></div>
228        <div class="body">
229        <table border="1" width="100%">
230                <tr>
231                        <td width="50%"><b>#rb("totalnumentries")#:</b></td>
232                        <td align="right">#getTotalEntries.totalEntries#</td>
233                </tr>
234                <tr>
235                        <td width="50%"><b>#rb("last30")#:</b></td>
236                        <td align="right">#last30.totalEntries#</td>
237                </tr>
238                <tr>
239                        <td width="50%"><b>#rb("last30avg")#:</b></td>
240                        <td align="right"><cfif last30.totalentries gt 0>#numberFormat(last30.totalEntries/30,"999.99")#<cfelse>&nbsp;</cfif></td>
241                </tr>                           
242                <tr>
243                        <td width="50%"><b>#rb("firstentry")#:</b></td>
244                        <td align="right"><cfif len(getTotalEntries.firstEntry)>#dateFormat(getTotalEntries.firstEntry,"mm/dd/yy")#<cfelse>&nbsp;</cfif></td>
245                </tr>
246                <tr>
247                        <td width="50%"><b>#rb("lastentry")#:</b></td>
248                        <td align="right"><cfif len(getTotalEntries.lastEntry)>#dateFormat(getTotalEntries.lastEntry,"mm/dd/yy")#<cfelse>&nbsp;</cfif></td>
249                </tr>
250                <tr>
251                        <td width="50%"><b>#rb("bloggingfor")#:</b></td>
252                        <td align="right"><cfif isDefined("dur")>#dur# #rb("days")#<cfelse>&nbsp;</cfif></td>
253                </tr>
254                <tr>
255                        <td width="50%"><b>#rb("totalcomments")#:</b></td>
256                        <td align="right">#getTotalComments.totalComments#</td>
257                </tr>
258                <tr>
259                        <td width="50%"><b>#rb("avgcommentsperentry")#:</b></td>
260                        <td align="right">#numberFormat(averageCommentsPerEntry,"999.99")#</td>
261                </tr>
262                <cfif application.blog.getProperty("allowtrackbacks")>
263                <!--- RBB: 1/20/06: Added total trackbacks --->
264                <tr>
265                        <td width="50%"><b>#rb("totaltrackbacks")#:</b></td>
266                        <td align="right">#getTotalTrackbacks.totalTrackbacks#</td>
267                </tr>           
268                </cfif>
269                <tr>
270                        <td width="50%"><b>#rb("totalviews")#:</b></td>
271                        <td align="right">#getTotalViews.total#</td>
272                </tr>
273                <tr>
274                        <td width="50%"><b>#rb("avgviews")#:</b></td>
275                        <td align="right">
276                                <cfif gettotalentries.totalentries gt 0 and gettotalviews.total gt 0>
277                                #numberFormat(gettotalviews.total/gettotalentries.totalentries,"999.99")#
278                                <cfelse>
279                                0
280                                </cfif>
281                        </td>
282                </tr>
283                <tr>
284                        <td width="50%"><b>#rb("totalsubscribers")#:</b></td>
285                        <td align="right">#getTotalSubscribers.totalsubscribers#</td>
286                </tr>
287               
288        </table>
289        </div>
290
291        <p />
292       
293        <div class="date"><a name="topviews"></a><b>#rb("topviews")#</b></div>
294        <div class="body">
295        <table border="1" width="100%">
296                <cfloop query="getTopViews">
297                <tr>
298                        <td width="50%"><b><a href="#application.blog.makeLink(id)#" rel="nofollow">#title#</a></b></td>
299                        <td align="right">#views#</td>
300                </tr>
301                </cfloop>
302        </table>
303        </div>
304       
305        <p />
306       
307        <div class="date"><a name="categorystats"></a><b>#rb("categorystats")#</b></div>
308        <div class="body">
309        <table border="1" width="100%">
310                <cfloop query="getCategoryCount">
311                <tr>
312                        <td width="50%"><a href="#application.blog.makeCategoryLink(categoryid)#">#categoryname#</a></td>
313                        <td align="right">#total#</td>
314                </tr>
315                </cfloop>
316        </table>
317        </div>
318       
319        <p />
320       
321        <div class="date"><a name="topentriesbycomments"></a><b>#rb("topentriesbycomments")#</b></div>
322        <div class="body">
323        <table border="1" width="100%">
324                <cfloop query="topCommentedEntries">
325                <tr>
326                        <td width="50%"><b><a href="#application.blog.makeLink(id)#" rel="nofollow">#title#</a></b></td>
327                        <td align="right">#commentCount#</td>
328                </tr>
329                </cfloop>
330        </table>
331        </div>
332       
333        <p />
334       
335        <div class="date"><a name="topcategoriesbycomments"></a><b>#rb("topcategoriesbycomments")#</b></div>
336        <div class="body">
337        <table border="1" width="100%">
338                <cfloop query="topCommentedCategories">
339                        <!---
340                                This is ugly code.
341                                I want to find the avg number of posts
342                                per entry for this category.
343                        --->
344                        <cfquery name="getTotalForThisCat" dbtype="query">
345                                select  total
346                                from    getCategoryCount
347                                where   categoryid = '#categoryid#'
348                        </cfquery>
349                        <cfset avg = commentCount / getTotalForThisCat.total>
350                        <cfset avg = numberFormat(avg,"___.___")>
351                        <tr>
352                                <td width="50%"><b><a href="index.cfm?mode=cat&catid=#categoryid#" rel="nofollow">#categoryname#</a></b></td>
353                                <td align="right">#commentCount# (#rb("avgcommentperentry")#: #avg#)</td>
354                        </tr>
355                </cfloop>
356        </table>
357        </div>
358
359        <p />
360       
361        <cfif application.blog.getProperty("allowtrackbacks")>
362        <!--- RBB 1/20/2006: Added top entriex by trackbacks --->
363        <div class="date"><a name="topentriesbytrackbacks"></a><b>#rb("topentriesbytrackbacks")#</b></div>
364        <div class="body">
365        <table border="1" width="100%">
366                <cfloop query="topTrackbackedEntries">
367                <tr>
368                        <td width="50%"><b><a href="#application.blog.makeLink(id)#" rel="nofollow">#title#</a></b></td>
369                        <td align="right">#trackbackCount#</td>
370                </tr>
371                </cfloop>
372        </table>
373        </div>
374       
375        <p />
376        </cfif>
377       
378        <div class="date"><a name="topsearchterms"></a><b>#rb("topsearchterms")#</b></div>
379        <div class="body">
380        <table border="1" width="100%">
381                <cfloop query="topSearchTerms">
382                <tr>
383                        <td width="50%"><b><a href="#application.rooturl#/index.cfm?mode=search&search=#urlEncodedFormat(searchterm)#" rel="nofollow">#searchterm#</a></b></td>
384                        <td align="right">#total#</td>
385                </tr>
386                </cfloop>
387        </table>
388        </div>
389
390        <p />
391        <div class="date"><a name="topcommenters"></a><b>#rb("topcommenters")#</b></div>
392        <div class="body">
393        <table border="1" width="100%">
394                <cfloop query="topCommenters">
395                <tr>
396                        <td width="50%"><b>#name#</b></td>
397                        <td align="right">#emailcount#</td>
398                </tr>
399                </cfloop>
400        </table>
401        </div>
402       
403        </cfoutput>
404       
405</cfmodule>
406
407<cfsetting enablecfoutputonly=false>
Note: See TracBrowser for help on using the browser.