You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							369 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							369 lines
						
					
					
						
							14 KiB
						
					
					
				
								<?php
							 | 
						|
								/*********************************************************************************
							 | 
						|
								 * The contents of this file are subject to the SugarCRM Public License Version 1.1.2
							 | 
						|
								 * ("License"); You may not use this file except in compliance with the
							 | 
						|
								 * License. You may obtain a copy of the License at http://www.sugarcrm.com/SPL
							 | 
						|
								 * Software distributed under the License is distributed on an  "AS IS"  basis,
							 | 
						|
								 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
							 | 
						|
								 * the specific language governing rights and limitations under the License.
							 | 
						|
								 * The Original Code is:  SugarCRM Open Source
							 | 
						|
								 * The Initial Developer of the Original Code is SugarCRM, Inc.
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.;
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________.
							 | 
						|
								 ********************************************************************************/
							 | 
						|
								/*********************************************************************************
							 | 
						|
								 * $Header: /advent/projects/wesat/vtiger_crm/sugarcrm/data/Tracker.php,v 1.15 2005/04/28 05:44:22 samk Exp $
							 | 
						|
								 * Description:  Updates entries for the Last Viewed functionality tracking the
							 | 
						|
								 * last viewed records on a per user basis.
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________..
							 | 
						|
								 ********************************************************************************/
							 | 
						|
								
							 | 
						|
								include_once('config.php');
							 | 
						|
								require_once('include/logging.php');
							 | 
						|
								require_once('include/database/PearDatabase.php');
							 | 
						|
								
							 | 
						|
								/** This class is used to track the recently viewed items on a per user basis.
							 | 
						|
								 * It is intended to be called by each module when rendering the detail form.
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________..
							 | 
						|
								*/
							 | 
						|
								class Tracker {
							 | 
						|
								    var $log;
							 | 
						|
								    var $db;
							 | 
						|
								    var $table_name = "tracker";
							 | 
						|
								
							 | 
						|
								    // Tracker table
							 | 
						|
								    var $column_fields = Array(
							 | 
						|
								        "id",
							 | 
						|
								        "user_id",
							 | 
						|
								        "module_name",
							 | 
						|
								        "item_id",
							 | 
						|
								        "item_summary"
							 | 
						|
								    );
							 | 
						|
								
							 | 
						|
								    function Tracker()
							 | 
						|
								    {
							 | 
						|
								        $this->log = LoggerManager::getLogger('Tracker');
							 | 
						|
									//$this->db = new PearDatabase();
							 | 
						|
									global $adb;
							 | 
						|
								        $this->db = $adb;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Add this new item to the tracker table.  If there are too many items (global config for now)
							 | 
						|
								     * then remove the oldest item.  If there is more than one extra item, log an error.
							 | 
						|
								     * If the new item is the same as the most recent item then do not change the list
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________..
							 | 
						|
								     */
							 | 
						|
								    function track_view($user_id, $current_module, $item_id, $item_summary)
							 | 
						|
								    {
							 | 
						|
								      global $adb;
							 | 
						|
								      $this->delete_history($user_id, $item_id);
							 | 
						|
								global $vtlog;
							 | 
						|
								$vtlog->logthis("in  track view method ".$current_module,'info');
							 | 
						|
								      // Add a new item to the user's list
							 | 
						|
								
							 | 
						|
								        $esc_item_id = addslashes($item_id);
							 | 
						|
								        
							 | 
						|
								
							 | 
						|
								         //get the first name and last name from the respective modules
							 | 
						|
								          if($current_module =='Leads')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select firstname,lastname from leaddetails where leadid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $firstname = $adb->query_result($result,0,'firstname');
							 | 
						|
								            $lastname =  $adb->query_result($result,0,'lastname');
							 | 
						|
								            $item_summary = $firstname .' ' .$lastname;
							 | 
						|
								          }
							 | 
						|
								          elseif ($current_module =='Accounts')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select accountname from account where accountid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $accountname = $adb->query_result($result,0,'accountname');
							 | 
						|
								            $item_summary = $accountname;
							 | 
						|
								            
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='Contacts')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select firstname,lastname from contactdetails where contactid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $firstname = $adb->query_result($result,0,'firstname');
							 | 
						|
								            $lastname =  $adb->query_result($result,0,'lastname');
							 | 
						|
								            $item_summary = $firstname .' ' .$lastname;
							 | 
						|
								            
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='Potentials')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select potentialname from potential where potentialid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $potentialname =  $adb->query_result($result,0,'potentialname');
							 | 
						|
								            $item_summary = $potentialname;
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='Notes')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select title from notes where notesid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $title = $adb->query_result($result,0,'title');
							 | 
						|
								            $item_summary = $title;
							 | 
						|
								            
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='HelpDesk')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select title from troubletickets where ticketid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $title = $adb->query_result($result,0,'title');
							 | 
						|
								            $item_summary = $title;
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='Activities')
							 | 
						|
								          {
							 | 
						|
								            //$query = 'select name from calls where callid=' .$item_id;
							 | 
						|
									    $query = 'select subject from activity where activityid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $name = $adb->query_result($result,0,'subject');
							 | 
						|
								            $item_summary = $name;
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='Emails')
							 | 
						|
								          {
							 | 
						|
								            //$query = 'select name from emails where emailid=' .$item_id;
							 | 
						|
									    $query = 'select subject from activity where activityid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $name = $adb->query_result($result,0,'subject');
							 | 
						|
								            $item_summary = $name;
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='Products')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select productname from products where productid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $productname = $adb->query_result($result,0,'productname');
							 | 
						|
								            $item_summary = $productname;
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='Users')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select first_name,last_name from users where id=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $firstname = $adb->query_result($result,0,'first_name');
							 | 
						|
								            $lastname = $adb->query_result($result,0,'last_name');
							 | 
						|
								            $item_summary = $firstname .' '. $lastname;
							 | 
						|
								          }
							 | 
						|
									  elseif($current_module =='Invoice')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select subject from invoice where invoiceid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $invoice = $adb->query_result($result,0,'subject');
							 | 
						|
								            $item_summary = $invoice;
							 | 
						|
								          }
							 | 
						|
								          elseif($current_module =='Quotes')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select subject from quotes where quoteid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $quote = $adb->query_result($result,0,'subject');
							 | 
						|
								            $item_summary = $quote;
							 | 
						|
								          }
							 | 
						|
									  elseif($current_module =='Orders')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select subject from purchaseorder where purchaseorderid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $po = $adb->query_result($result,0,'subject');
							 | 
						|
								            $item_summary = $po;
							 | 
						|
								          }
							 | 
						|
									  elseif($current_module =='SalesOrder')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select subject from salesorder where salesorderid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $so = $adb->query_result($result,0,'subject');
							 | 
						|
								            $item_summary = $so;
							 | 
						|
								          }
							 | 
						|
									  elseif($current_module =='Vendor')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select vendorname from vendor where vendorid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $vendor = $adb->query_result($result,0,'vendorname');
							 | 
						|
								            $item_summary = $vendor;
							 | 
						|
								          }
							 | 
						|
									  elseif($current_module =='PriceBook')
							 | 
						|
								          {
							 | 
						|
								            $query = 'select bookname from pricebook where pricebookid=' .$item_id;
							 | 
						|
								            $result = $this->db->query($query);
							 | 
						|
								            $pb = $adb->query_result($result,0,'bookname');
							 | 
						|
								            $item_summary = $pb;
							 | 
						|
								          }	
							 | 
						|
								
							 | 
						|
									 
							 | 
						|
									 #if condition added to skip faq in last viewed history
							 | 
						|
									  if ($current_module != 'Faq')
							 | 
						|
									  {		
							 | 
						|
								          $query = "INSERT into $this->table_name (user_id, module_name, item_id, item_summary) values ('$user_id', '$current_module', '$esc_item_id', ".$this->db->formatString($this->table_name,'item_summary',$item_summary).")";
							 | 
						|
								          
							 | 
						|
								          $this->log->info("Track Item View: ".$query);
							 | 
						|
								          
							 | 
						|
								          $this->db->query($query, true);
							 | 
						|
								          
							 | 
						|
								          
							 | 
						|
								          $this->prune_history($user_id);
							 | 
						|
									  }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * param $user_id - The id of the user to retrive the history for
							 | 
						|
								     * param $module_name - Filter the history to only return records from the specified module.  If not specified all records are returned
							 | 
						|
								     * return - return the array of result set rows from the query.  All of the table fields are included
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________..
							 | 
						|
								     */
							 | 
						|
								    function get_recently_viewed($user_id, $module_name = "")
							 | 
						|
								    {
							 | 
						|
								    	if (empty($user_id)) {
							 | 
						|
								    		return;
							 | 
						|
								    	}
							 | 
						|
								
							 | 
						|
								//        $query = "SELECT * from $this->table_name WHERE user_id='$user_id' ORDER BY id DESC";
							 | 
						|
									$query = "SELECT * from $this->table_name inner join crmentity on crmentity.crmid=tracker.item_id WHERE user_id='$user_id' and crmentity.deleted=0 ORDER BY id DESC";
							 | 
						|
								        $this->log->debug("About to retrieve list: $query");
							 | 
						|
								        $result = $this->db->query($query, true);
							 | 
						|
								
							 | 
						|
								        $list = Array();
							 | 
						|
								        while($row = $this->db->fetchByAssoc($result, -1, false))
							 | 
						|
								        {
							 | 
						|
										//echo "while loppp";
							 | 
						|
										//echo '<BR>';
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								            // If the module was not specified or the module matches the module of the row, add the row to the list
							 | 
						|
								            if($module_name == "" || $row[module_name] == $module_name)
							 | 
						|
								            {
							 | 
						|
										//Adding Security check
							 | 
						|
										require_once('include/utils.php');
							 | 
						|
										require_once('modules/Users/UserInfoUtil.php');
							 | 
						|
										$entity_id = $row['item_id'];
							 | 
						|
										$module = $row['module_name'];
							 | 
						|
										//echo "module is ".$module."  id is      ".$entity_id;
							 | 
						|
										//echo '<BR>';
							 | 
						|
										if($module == "Users")
							 | 
						|
										{
							 | 
						|
											global $current_user;
							 | 
						|
											if(is_admin($current_user))
							 | 
						|
											{
							 | 
						|
												$per = 'yes';
							 | 
						|
											}	
							 | 
						|
										}
							 | 
						|
										else
							 | 
						|
										{
							 | 
						|
											
							 | 
						|
											$per = isPermitted($module,4,$entity_id);
							 | 
						|
											//echo "permission is".$per;
							 | 
						|
											//echo "<BR>";
							 | 
						|
											//echo "<BR>";
							 | 
						|
											
							 | 
						|
										}
							 | 
						|
										if($per == 'yes')
							 | 
						|
										{
							 | 
						|
								            		$list[] = $row;
							 | 
						|
										}
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        return $list;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * INTERNAL -- This method cleans out any entry for a record for a user.
							 | 
						|
								     * It is used to remove old occurances of previously viewed items.
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________..
							 | 
						|
								     */
							 | 
						|
								    function delete_history( $user_id, $item_id)
							 | 
						|
								    {
							 | 
						|
								        $query = "DELETE from $this->table_name WHERE user_id='$user_id' and item_id='$item_id'";
							 | 
						|
								       $this->db->query($query, true);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * INTERNAL -- This method cleans out any entry for a record.
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________..
							 | 
						|
								     */
							 | 
						|
								    function delete_item_history($item_id)
							 | 
						|
								    {
							 | 
						|
								        $query = "DELETE from $this->table_name WHERE item_id='$item_id'";
							 | 
						|
								       $this->db->query($query, true);
							 | 
						|
								
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * INTERNAL -- This function will clean out old history records for this user if necessary.
							 | 
						|
								 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
							 | 
						|
								 * All Rights Reserved.
							 | 
						|
								 * Contributor(s): ______________________________________..
							 | 
						|
								     */
							 | 
						|
								    function prune_history($user_id)
							 | 
						|
								    {
							 | 
						|
								        global $history_max_viewed;
							 | 
						|
								
							 | 
						|
								        // Check to see if the number of items in the list is now greater than the config max.
							 | 
						|
								        $query = "SELECT count(*) from $this->table_name WHERE user_id='$user_id'";
							 | 
						|
								
							 | 
						|
								        $this->log->debug("About to verify history size: $query");
							 | 
						|
								
							 | 
						|
								        $count = $this->db->getOne($query);
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        $this->log->debug("history size: (current, max)($count, $history_max_viewed)");
							 | 
						|
								        while($count > $history_max_viewed)
							 | 
						|
								        {
							 | 
						|
								            // delete the last one.  This assumes that entries are added one at a time.
							 | 
						|
								            // we should never add a bunch of entries
							 | 
						|
								            $query = "SELECT * from $this->table_name WHERE user_id='$user_id' ORDER BY id ASC";
							 | 
						|
								            $this->log->debug("About to try and find oldest item: $query");
							 | 
						|
								            $result =  $this->db->limitQuery($query,0,1);
							 | 
						|
								
							 | 
						|
								            $oldest_item = $this->db->fetchByAssoc($result, -1, false);
							 | 
						|
								            $query = "DELETE from $this->table_name WHERE id='{$oldest_item['id']}'";
							 | 
						|
								            $this->log->debug("About to delete oldest item: ");
							 | 
						|
								
							 | 
						|
								            $result = $this->db->query($query, true);
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								            $count--;
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
									function create_tables() {
							 | 
						|
										/*$query = 'CREATE TABLE '.$this->table_name.' (';
							 | 
						|
										$query = $query.'id int( 11 ) NOT NULL auto_increment';
							 | 
						|
										$query = $query.', user_id char(36)';
							 | 
						|
										$query = $query.', module_name char(25)';
							 | 
						|
										$query = $query.', item_id char(36)';
							 | 
						|
										$query = $query.', item_summary char(255)';
							 | 
						|
										$query = $query.', PRIMARY KEY ( ID ) )';
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
										$this->db->query($query);*/
							 | 
						|
								
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function drop_tables () {
							 | 
						|
										/*$query = 'DROP TABLE IF EXISTS '.$this->table_name;
							 | 
						|
								
							 | 
						|
										$this->db->query($query);
							 | 
						|
								
							 | 
						|
										//TODO Clint 4/27 - add exception handling logic here if the table can't be dropped.
							 | 
						|
										*/
							 | 
						|
								
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								?>
							 | 
						|
								
							 |