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.
|
|
*/
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
?>
|
|
|