includes/stats.php
author Dan
Fri, 05 Oct 2007 01:57:00 -0400
changeset 162 e1a22031b5bd
parent 142 ca9118d9c0f2
child 166 d53cc29308f4
permissions -rw-r--r--
Major revamps to the template parser. Fixed a few security holes that could allow PHP to be injected in untimely places in TPL code. Improved Ux for XSS attempt in tplWikiFormat. Documented many functions. Backported much cleaner parser from 2.0 branch. Beautified a lot of code in the depths of the template class. Pretty much a small-scale Extreme Makeover.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     1
<?php
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     2
/*
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     3
 * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
142
ca9118d9c0f2 Rebrand as 1.0.2 (Coblynau); internal links are now parsed by RenderMan::parse_internal_links()
Dan
parents: 108
diff changeset
     4
 * Version 1.0.2 (Coblynau)
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     5
 * Copyright (C) 2006-2007 Dan Fuhry
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     6
 * stats.php - handles statistics for pages (disablable in the admin CP)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     7
 *
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     8
 *   ***** UNFINISHED ***** 
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     9
 *
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    10
 * This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    11
 * as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    12
 *
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    13
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    14
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    15
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    16
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    17
function doStats( $page_id = false, $namespace = false )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    18
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    19
  global $db, $session, $paths, $template, $plugins; // Common objects
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    20
  if(getConfig('log_hits') == '1')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    21
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    22
    if(!$page_id || !$namespace)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    23
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    24
      $page_id = $paths->cpage['urlname_nons'];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    25
      $namespace = $paths->namespace;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    26
    }
61
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    27
    if($namespace == 'Special' || $namespace == 'Admin') 
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    28
    {
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    29
      return false;
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    30
    }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    31
    static $stats_done = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    32
    static $stats_data = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    33
    if(!$stats_done)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    34
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    35
      $q = $db->sql_query('INSERT INTO '.table_prefix.'hits (username,time,page_id,namespace) VALUES(\''.$db->escape($session->username).'\', '.time().', \''.$db->escape($page_id).'\', \''.$db->escape($namespace).'\')');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    36
      if(!$q)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    37
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    38
        echo $db->get_error();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    39
        return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    40
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    41
      $db->free_result();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    42
      $stats_done = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    43
      return true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    44
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    45
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    46
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    47
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    48
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    49
 * Fetch a list of the most-viewed pages
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    50
 * @param int the number of pages to return, send -1 to get all pages (suicide for large sites)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    51
 * @return array key names are a string set to the page ID/namespace, and values are an int with the number of hits
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    52
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    53
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    54
function stats_top_pages($num = 5)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    55
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    56
  global $db, $session, $paths, $template, $plugins; // Common objects
61
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    57
  if(!is_int($num)) 
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    58
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    59
    return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    60
  }
61
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    61
  
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    62
  $data = array();
108
1c7f59df9474 Implemented some extra functionality for friends/foes in comments; fixed lack of table_prefix in stats.php line 63
Dan
parents: 73
diff changeset
    63
  $q = $db->sql_query('SELECT COUNT(hit_id) AS num_hits, page_id, namespace FROM '.table_prefix.'hits GROUP BY page_id, namespace ORDER BY num_hits DESC LIMIT ' . $num . ';');
61
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    64
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    65
  while ( $row = $db->fetchrow() )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    66
  {
61
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    67
    if ( isset($paths->pages[ $paths->nslist[ $row['namespace'] ] . $row['page_id'] ]) )
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    68
    {
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    69
      $page_data =& $paths->pages[ $paths->nslist[ $row['namespace'] ] . $row['page_id'] ];
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    70
      $title = $page_data['name'];
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    71
      $page_id = $page_data['urlname'];
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    72
    }
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    73
    else if ( !isset($paths->nslist[$row['namespace']]) )
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    74
    {
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    75
      $title = $row['namespace'] . ':' . $row['page_id'];
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    76
      $page_id = sanitize_page_id($title);
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    77
    }
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    78
    else
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    79
    {
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    80
      $title = dirtify_page_id( $paths->nslist[$row['namespace']] . $row['page_id'] );
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    81
      $title = str_replace('_', ' ', $title);
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    82
      $page_id = sanitize_page_id($title);
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    83
    }
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    84
    $data[] = array(
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    85
        'page_urlname' => $page_id,
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    86
        'page_title' => $title,
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    87
        'num_hits' => $row['num_hits']
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    88
      );
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    89
  }
61
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    90
  
e9708657875a I fixed the statistics!!! YAY!!
Dan
parents: 21
diff changeset
    91
  return $data;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    92
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    93
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    94
?>