PHP Classes
elePHPant
Icontem

File: time_online.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Protung Dragos  >  Time Online  >  time_online.class.php  >  Download  
File: time_online.class.php
Role: Class source
Content type: text/plain
Description: Class file
Class: Time Online
Keep track of the time users spend in a site
Author: By
Last change: Fixed a bug so now when displaying the days in real time will not always be 0.
Date: 10 years ago
Size: 7,115 bytes
 

Contents

Class file image Download
<?php

/*
  ****************************************************************************
  * class time_online *
  * Version 0.8b2 *
  * *
  * A PHP class to help get info how much time users spend on a page or on *
  * the entire site in a session or the total time *
  * *
  * Copyright (C) 2003 by Dragos Protung - dragos@protung.ro *
  * *
  * This PHP class is free software; you can redistribute it and/or *
  * modify it under the terms of the GNU Lesser General Public *
  * License as published by the Free Software Foundation; either *
  * version 2.1 of the License, or (at your option) any later version. *
  * *
  * This PHP class is distributed in the hope that it will be useful, *
  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
  * Lesser General Public License for more details. *
  * *
  * *
  * Author: *
  * Dragos Protung, 500164 Brasov, Romania, dragos@protung.ro *
  * *
  ****************************************************************************
*/


class time_online {


   function
time_online() {

     
$this -> userID = $_COOKIE["time_online_ID"]; // user's ID
     
$this -> userTT = $_COOKIE["time_online_TT"]; // user's total time on site
     
$this -> userST = $_COOKIE["time_online_ST"]; // time when user entered the site
     
$this -> userTO = $_COOKIE["time_online_TO"]; // time that the user has been online this sesion
     
$this -> displayID = 0; // ID used to generate diferent script in case of multiple call of display() function

     
if ($this -> userID != "") {

         if (
$this -> userST == "") {

           
$this -> userST = time();
           
setcookie("time_online_ST", $this -> userST);
         }

        
$this -> userLPT = time() - $this -> userST - $this -> userTO;

        
$this -> userTT += $this -> userLPT;
        
setcookie("time_online_TT", $this -> userTT, time()+60*60*60*60*60);

        
$this -> userTO = time() - $this -> userST;
        
setcookie("time_online_TO", $this -> userTO);

        
$this -> userTO = time_online::normalizare($this -> userTO);
        
$this -> userTT = time_online::normalizare($this -> userTT);
      }

      if (
$this -> userID == "") {

        
time_online::newID();
      }

   }

   function
newID() {

        
$this -> userID = md5(rand());
        
$this -> userST = time();
        
$this -> userTO = 0;
        
$this -> userTT = 0;
        
setcookie("time_online_ID", $this -> userID, time()+(60*60*24*365*10));
        
setcookie("time_online_ST", $this -> userST);
        
setcookie("time_online_TO", $this -> userTO);
        
setcookie("time_online_TT", $this -> userTT, time()+(60*60*24*365*10));
   }

   function
normalizare($secunde) {

        
$minute = $secunde / 60;
        
$secunde = $secunde % 60;
        
$ore = $minute / 60;
        
$minute = $minute % 60;
     
$zile = $ore / 24;
        
$ore = $ore % 24;

         return
$timp = array("days" => (int)$zile, "hours" => $ore, "minutes" => $minute, "seconds" => $secunde);
   }

   function
display_time($type){

     
$this -> displayID++;

      if (
$type == "current_page") {

        
$time_start_multiply = 0;
      }

      if (
$type == "current_session") {

        
$time_start_multiply = $this -> userTO["days"]*24*60*60 + $this -> userTO["hours"]*60*60 + $this -> userTO["minutes"]*60 + $this -> userTO["seconds"];
      }

      if (
$type == "total_time") {

        
$time_start_multiply = $this -> userTT["days"]*24*60*60 + $this -> userTT["hours"]*60*60 + $this -> userTT["minutes"]*60 + $this -> userTT["seconds"];
      }

      echo
"
               <script type=\"text/javascript\">
               document.writeln(\"<span id=\\\"time_online"
. $this -> displayID . "\\\"></span>\");

               zi_inceput"
. $this -> displayID . " = new Date();
               ceas_start"
. $this -> displayID . " = zi_inceput" . $this -> displayID . ".getTime();

               function initStopwatch"
. $this -> displayID . "() {

               var timp_pe_pag"
. $this -> displayID . " = new Date();
                  return((timp_pe_pag"
. $this -> displayID . ".getTime()+(1000*$time_start_multiply) - ceas_start" . $this -> displayID . ")/1000);
               }
               function getSecs"
. $this -> displayID . "() {


                  var tSecs"
. $this -> displayID . " = Math.round(initStopwatch" . $this -> displayID . "());
                  var iSecs"
. $this -> displayID . " = tSecs" . $this -> displayID . " % 60;
                  var iMins"
. $this -> displayID . " = Math.round((tSecs" . $this -> displayID . "-30)/60);
                  var iHour"
. $this -> displayID . " = Math.round((iMins" . $this -> displayID . "-30)/60);
                  var iMins"
. $this -> displayID . " = iMins" . $this -> displayID . " % 60;
                  var iDays"
. $this -> displayID . " = Math.round((iHour" . $this -> displayID . "-11)/24);
               if (iDays"
. $this -> displayID . " == -0) {iDays" . $this -> displayID . " *= (-1)}; // Stupid Opera :)
                  var iHour"
. $this -> displayID . " = iHour" . $this -> displayID . " % 24;
                  var sSecs"
. $this -> displayID . " = \"\" + ((iSecs" . $this -> displayID . " > 9) ? iSecs" . $this -> displayID . " : \"0\" + iSecs" . $this -> displayID . ");
                  var sMins"
. $this -> displayID . " = \"\" + ((iMins" . $this -> displayID . " > 9) ? iMins" . $this -> displayID . " : \"0\" + iMins" . $this -> displayID . ");
                  var sHour"
. $this -> displayID . " = \"\" + ((iHour" . $this -> displayID . " > 9) ? iHour" . $this -> displayID . " : \"0\" + iHour" . $this -> displayID . ");

               document.getElementById('time_online"
. $this -> displayID . "').innerHTML=iDays" . $this -> displayID . "+\":\"+sHour" . $this -> displayID . "+\":\"+sMins" . $this -> displayID . "+\":\"+sSecs" . $this -> displayID . ";
               window.setTimeout('getSecs"
. $this -> displayID . "()',1000);

               }
               window.setTimeout('getSecs"
. $this -> displayID . "()',1000)

               </script>
      "
;


   }
}

?>