Login   Register  
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 -> userTTtime()+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 -> userIDtime()+(60*60*24*365*10));
         
setcookie("time_online_ST"$this -> userST);
         
setcookie("time_online_TO"$this -> userTO);
         
setcookie("time_online_TT"$this -> userTTtime()+(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>
      "
;


   }
}

?>