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 '
'; // 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 '
'; 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 "
"; //echo "
"; } 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. */ } } ?>