Home | Projects | Contact Me

My First Steps With Transfer : Day 2

You can find the demo application here: http://amary.kisdigital.com

Well, instead of adding any additional tables to my transfer.xml, I decided to just finish adding the functions in the gateway object to make everything run as it should.

Everything seems to be running fine with the exception page loads are a little slow for my tastes. I will post the revised code for my gateway object and if anyone sees any obvious problems with it, any help would be appreciated. I decided to keep all the database interactions in Transfer as this was a learning experience.

Here is my revised whosongateway.cfc code:

<cfcomponent output="false" hint="WhosOn database gateway object">

   <cffunction name="init" returntype="whosongateway" hint="I return an instance of whosoncfcgateway">
      <cfargument name="transfer" type="any" required="true" hint="I am the transfer object" />
   
      <cfset variables.transfer=arguments.transfer />
      <cfreturn this />
   </cffunction>
   
   <cffunction name="getUserByID" returntype="query" access="public" hint="I return a user with a given ClientID">
      <cfargument name="ClientID" type="string" required="true" />
      
      <cfset var transfer=variables.transfer.getTransfer() />
      <cfset var myQuery="" />
      
      <cfset myQuery=transfer.listByProperty("whosoncfc.user","ClientID",arguments.ClientID) />      
      
      <cfreturn myQuery />
   </cffunction>
   
   <cffunction name="getUsers" returntype="query" hint="I return users stored in the database">
      <cfset var transfer=variables.transfer.getTransfer() />
      
      <cfreturn transfer.list("whosoncfc.user") />
   </cffunction>
   
   <cffunction name="isTracked" returntype="boolean" access="public" hint="I check to see if we are tracking a given client">
      <cfargument name="ClientID" type="string" required="true" />
      
      <cfset var transfer=variables.transfer.getTransfer() />
      <cfset var myQuery="" />
      
      <cfset myQuery=transfer.listByProperty("whosoncfc.user","ClientID",arguments.ClientID) />
      
      <cfif myQuery.RecordCount>
         <cfreturn true />
      <cfelse>
         <cfreturn false />
      </cfif>
   </cffunction>
   
   <cffunction name="purgeUsers" returntype="boolean" access="public" hint="I get rid of expired data">
      <cfargument name="trackTime" type="numeric" required="true" hint="How many hours to track usrs" />
      <cfargument name="botTrackTime" type="numeric" required="true" hint="How many hours to track bots" />
      
      <cfset var transfer=variables.transfer.getTransfer() />
      <cfset var uQuery = "" />
      <cfset var user = "" />
      
      <cfset uQuery=transfer.list("whosoncfc.user") />
      
      <cfloop query="uquery">
         <cfif uQuery.HideClient is false>
            <cfif dateDiff("n",uQuery.LastUpdated,Now()) gte (60*arguments.trackTime)>
               <cfset user=transfer.get('whosoncfc.user',uQuery.ClientID) />
               <cfset transfer.delete(user) />
            </cfif>
         <cfelse>
            <cfif dateDiff("n",uQuery.LastUpdated,Now()) gte (60*arguments.botTrackTime)>
               <cfset user=transfer.get('whosoncfc.user',uQuery.ClientID) />
               <cfset transfer.delete(user) />
            </cfif>         
         </cfif>
      </cfloop>
      
      <cfreturn true />
   </cffunction>
   
   <cffunction name="saveUser" returntype="boolean" access="public" hint="I write hits to the user database">
      <cfargument name="userInfo" type="struct" required="true" />
   
      <cfset var transfer=variables.transfer.getTransfer() />
      <cfset var user = "" />
      <cfset var myCount=1 />
      
      <cfscript>
         user=transfer.get('whosoncfc.user',userInfo.ClientID);
         
         if(not user.getIsPersisted()){
            // New User, insert all detals into database             user.setClientID(userInfo.ClientID);
            user.setUserID(userInfo.UserID);
            user.setRoles(userInfo.Roles);
            user.setCreated(Now());
            user.setLastUpdated(Now());
            user.setIP(userInfo.IP);
            user.setHostName(userInfo.Hostname);
            user.setCoords(userInfo.Coords);
            user.setCountry(userInfo.Country);
            user.setCity(userInfo.City);
            user.setHideClient(userInfo.HideClient);
            user.setEntryPage(userInfo.EntryPage);
            user.setCurrentPage(userInfo.CurrentPage);
            user.setHitCount(myCount);   
            user.setUserAgent(userInfo.UserAgent);         
         } else {
            // Updating an existing client             
            myCount=user.getHitCount();
            user.setUserID(userInfo.UserID);
            user.setRoles(userInfo.Roles);
            user.setLastUpdated(Now());
            user.setIP(userInfo.IP);
            user.setCurrentPage(userInfo.CurrentPage);
            user.setHitCount(myCount+1);   
         }

         transfer.save(user);
      </cfscript>      
      
      <cfreturn true />
   </cffunction>
   
</cfcomponent>

Any comments or suggestions would be greatly appreciated!

Related Blog Entries

Comments
Layout: Shane Zehnder ::: BlogCFC was created by Raymond Camden. ::: This blog is running version 5.9.