HEX
Server: LiteSpeed
System: Linux lp015.web24.net.au 2.6.32-954.3.5.lve1.4.93.el6.x86_64 #1 SMP Wed Oct 4 17:04:29 UTC 2023 x86_64
User: pgkdistr (10190)
PHP: 8.1.32
Disabled: opcache_get_status
Upload Files
File: /var/www/vhosts/pgkdistribution.com.au/citisolar.com.au/components/com_fst/helper/tickethelper.php
<?php
/**
 * @package Freestyle Joomla
 * @author Freestyle Joomla
 * @copyright (C) 2013 Freestyle Joomla
 * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
**/
defined('_JEXEC') or die;

class FST_Ticket_Helper
{
	static $counts;
	static function &getTicketCount()
	{
		FST_Ticket_Helper::getAdminPermissions();
			
		if (empty(FST_Ticket_Helper::$counts))
		{
			$db = JFactory::getDBO();
			$query = "SELECT count( * ) AS count, ticket_status_id FROM #__fst_ticket_ticket WHERE 1 ";
			$query .= FST_Ticket_Helper::$_perm_where;
			$query .= " GROUP BY ticket_status_id";
			
			$db->setQuery($query);
			$rows = $db->loadAssocList();
				
			$out = array();
			FST_Ticket_Helper::GetStatusList();
			foreach (FST_Ticket_Helper::$status_list as $status)
			{
				$out[$status->id] = 0;
			}
			
			if (count($rows) > 0)
			{
				foreach ($rows as $row)
				{
					$out[$row['ticket_status_id']] = $row['count'];
				}
			}
			
			// work out counts for allopen, closed, all, archived
			
			$archived = FST_Ticket_Helper::GetStatusID("def_archive");
			$out['archived'] = 0;
			if (array_key_exists($archived, $out))
				$out['archived'] = $out[$archived];


			$allopen = FST_Ticket_Helper::GetStatusIDs("is_closed", true);
			$out['allopen'] = 0;
			foreach ($allopen as $id)
			{
				if (array_key_exists($id, $out))
					$out['allopen'] += $out[$id];
			}
		
			
			$allclosed = FST_Ticket_Helper::GetClosedStatus();
			$out['allclosed'] = 0;
			foreach ($allclosed as $id)
			{
				if (array_key_exists($id, $out))
					$out['allclosed'] += $out[$id];
			}

			
			$all = FST_Ticket_Helper::GetStatusIDs("def_archive", true);
			$out['all'] = 0;
			foreach ($all as $id)
			{
				if (array_key_exists($id, $out))
					$out['all'] += $out[$id];
			}
			
			
			FST_Ticket_Helper::$counts = $out;
		}
		return FST_Ticket_Helper::$counts;	
	}
	
	static function ListHandlers($prodid, $deptid, $catid, $allownoauto = false, $assign_ticket = true)
	{
		$db = JFactory::getDBO();

		//echo "ListHandlers($prodid, $deptid, $catid, $allownoauto)<br>";

		// assign to any available user
		$qry = "SELECT user_id FROM #__fst_user_prod WHERE prod_id = '".FSTJ3Helper::getEscaped($db, $prodid)."'";
		$db->setQuery($qry);
		$produsers = $db->loadAssocList('user_id');

		$qry = "SELECT user_id FROM #__fst_user_prod_a WHERE prod_id = '".FSTJ3Helper::getEscaped($db, $prodid)."'";
		$db->setQuery($qry);
		$produsersa = $db->loadAssocList('user_id');

		$qry = "SELECT user_id FROM #__fst_user_dept WHERE ticket_dept_id = '".FSTJ3Helper::getEscaped($db, $deptid)."'";
		$db->setQuery($qry);
		$deptusers = $db->loadAssocList('user_id');

		$qry = "SELECT user_id FROM #__fst_user_dept_a WHERE ticket_dept_id = '".FSTJ3Helper::getEscaped($db, $deptid)."'";
		$db->setQuery($qry);
		$deptusersa = $db->loadAssocList('user_id');

		$qry = "SELECT user_id FROM #__fst_user_cat WHERE ticket_cat_id = '".FSTJ3Helper::getEscaped($db, $catid)."'";
		$db->setQuery($qry);
		$catusers = $db->loadAssocList('user_id');

		$qry = "SELECT user_id FROM #__fst_user_cat_a WHERE ticket_cat_id = '".FSTJ3Helper::getEscaped($db, $catid)."'";
		$db->setQuery($qry);
		$catusersa = $db->loadAssocList('user_id');

		$qry = "SELECT * FROM #__fst_user";
		$db->setQuery($qry);
		$users = $db->loadAssocList();
		
		//print_p($users);

		$okusers = array();
		
		$count = 0;
		
		foreach ($users as $admin)
		{
			$juser = JFactory::getUser($admin['user_id']);
			//echo "User : {$juser->username}<br>";
			
			if ($admin['assignperms'] && $assign_ticket) // set up permissions when user has separate assign permissions
			{
				//echo "Assign Permission<br>";
				if ($admin['allprods_a'] == 0)
				{
					if (empty($produsersa[$admin['id']]))
					{
						//echo "Skip A : Not product<br>";
						continue;	
					}
				}

				if ($admin['alldepts_a'] == 0)
				{
					if (empty($deptusersa[$admin['id']]))
					{
						//echo "Skip A : Not Dept<br>";
						continue;	
					}
				}

				if ($admin['allcats_a'] == 0)
				{
					if (empty($catusersa[$admin['id']]))
					{
						//echo "Skip A : Not Cat<br>";
						continue;	
					}
				}
			} else { // assign permissions combined with view permissions (old way, default)
				//echo "View Permissions<br>";
				
				if ($admin['allprods'] == 0)
				{
					if (empty($produsers[$admin['id']]))
					{
						//echo "Skip : Not product<br>";
						continue;	
					}
				}

				if ($admin['alldepts'] == 0)
				{
					if (empty($deptusers[$admin['id']]))
					{
						//echo "Skip : Not Dept<br>";
						continue;	
					}
				}

				if ($admin['allcats'] == 0)
				{
					if (empty($catusers[$admin['id']]))
					{
						//echo "Skip : Not Cat<br>";
						continue;	
					}
				}
			}
			
			if ($admin['autoassignexc'] > 0 && !$allownoauto)
			{
				continue;	
			}

			$okusers[] = $admin['id'];
		}
		
		//print_p($okusers);
		//exit;
		
		return $okusers;
	}
	
	static function AssignHandler($prodid, $deptid, $catid)
	{
		//echo "Assigning hander for $prodid, $deptid, $catid<br>";
		$admin_id = 0;
		
		$assignuser = FST_Settings::get('support_autoassign');
		if ($assignuser == 1)
		{
			$okusers = FST_Ticket_Helper::ListHandlers($prodid, $deptid, $catid);

			if (count($okusers) > 0)
			{
				$count = count($okusers);
				$picked = mt_rand(0,$count-1);
				$admin_id = $okusers[$picked];
			}
		}

		return $admin_id;
	}

	static function createRef($ticketid,$format = "",$depth = 0)
	{
		if ($format == "")
			$format = FST_Settings::get('support_reference');

		if ($depth > 4)
			$format = "4L-4L-4L";

		preg_match_all("/(\d[LNX])/i",$format,$out);
		if (strpos($format, "{") !== false)
		{
			preg_match_all("/{([A-Za-z0-9]+)}/i",$format,$out);
			
			$key = $format;
			foreach($out[1] as $match)
			{
				$count = substr($match,0,1);
				$type = strtoupper(substr($match,1,1));
				if ($type == "" && (int)$count < 1)
				{
					$type = $count;
					$count = 1;
				}
				$replace = "";

				if ($type == "X")
				{
					$replace = sprintf("%0".$count."d",$ticketid);		
				} else if ($type == "N")
				{
					for ($i = 0; $i < $count; $i++)
					{
						$replace .= rand(0,9);	
					}		
				} else if ($type == "L")
				{
					for ($i = 0; $i < $count; $i++)
					{
						$replace .= chr(rand(0,25)+ord('A'));	
					}								
				} else if ($type == "D")
				{
					$replace = date("Y-m-d");	
				}
				
				$pos = strpos($key,"{".$match."}");
				if ($pos !== false)
				{
					$key = substr($key,0,$pos) . $replace . substr($key,$pos+strlen($match)+2);	
				}

			}
		} elseif (count($out) > 0)
		{
			$key = $format;
			foreach($out[0] as $match)
			{
				$count = substr($match,0,1);
				$type = strtoupper(substr($match,1,1));
				$replace = "";

				if ($type == "X")
				{
					$replace = sprintf("%0".$count."d",$ticketid);
						
				} else if ($type == "N")
				{
					for ($i = 0; $i < $count; $i++)
					{
						$replace .= rand(0,9);	
					}		
				} else if ($type == "L")
				{
					for ($i = 0; $i < $count; $i++)
					{
						$replace .= chr(rand(0,25)+ord('A'));	
					}								
				}
				
				$pos = strpos($key,$match);
				if ($pos !== false)
				{
					$key = substr($key,0,$pos) . $replace . substr($key,$pos+strlen($match));	
				}

			}
		} else {
			$key = FST_Ticket_Helper::createRef($ticketid,"4L-4L-4L",$depth + 1);	
		}	
				
		$db = JFactory::getDBO();
		
		$query = "SELECT id FROM #__fst_ticket_ticket WHERE reference = '".FSTJ3Helper::getEscaped($db, $key)."'";
		$db->setQuery($query);
		$rows = $db->loadAssoc();
		
		if ($rows)
		{
			$key = FST_Ticket_Helper::createRef($ticketid,$format,$depth + 1);
		}		
		
		return $key;
	}

	static $status_list;
	static function GetStatusList()
	{
		// get a list of all status
		if (empty(FST_Ticket_Helper::$status_list))
		{
			$db = JFactory::getDBO();
			$db->setQuery("SELECT * FROM #__fst_ticket_status ORDER BY ordering");
			FST_Ticket_Helper::$status_list = $db->loadObjectList();
		}
	}
	
	static function GetStatusByID($id)
	{
		FST_Ticket_Helper::GetStatusList();
		
		if ($id == "open")
		{
			$ids = FST_Ticket_Helper::GetStatusIDs("def_open");
			if (count($ids) > 0)
			{
				return FST_Ticket_Helper::GetStatusByID($ids[0]);		
			}
		}

		foreach (FST_Ticket_Helper::$status_list as $status)
		{
			if ($status->id == $id)
				return $status;
		}	
		
		return null;
	}
	
	static function GetStatus($type)
	{
		FST_Ticket_Helper::GetStatusList();
		// returns the object of the status row with field $type set as 1	
	}
		
	static function GetStatuss($type, $not = false)
	{
		// returns the object of the status row with field $type set as 1	
		FST_Ticket_Helper::GetStatusList();
		
		$rows = array();
		
		foreach (FST_Ticket_Helper::$status_list as $status)
		{
			if ($not)
			{
				if ($status->$type == 0)
					$rows[] = $status;
			} else {
				if ($status->$type > 0)
					$rows[] = $status;
			}
		}

		return $rows;
	}
	
	static function GetStatusID($type)
	{
		FST_Ticket_Helper::GetStatusList();
		foreach (FST_Ticket_Helper::$status_list as $status)
		{
			if ($status->$type > 0)
				return (int)$status->id;
		}
		
		return 0;	
	}
	
	static function GetStatusIDs($type, $not = false)
	{
		FST_Ticket_Helper::GetStatusList();
		
		$ids = array();
		
		foreach (FST_Ticket_Helper::$status_list as $status)
		{
			if ($not)
			{
				if ($status->$type == 0)
					$ids[] = (int)$status->id;
			} else {
				if ($status->$type > 0)
					$ids[] = (int)$status->id;
			}
		}
		
		if (count($ids) == 0)
			$ids[] = 0;
		
		return $ids;
	}	
	
	static function GetClosedStatus()
	{
		FST_Ticket_Helper::GetStatusList();
		
		$ids = array();
		
		foreach (FST_Ticket_Helper::$status_list as $status)
		{
			if ($status->is_closed && ! $status->def_archive)
					$ids[(int)$status->id] = (int)$status->id;
		}
		
		if (count($ids) == 0)
			$ids[] = 0;
		
		return $ids;
	}
	
	static $_permissions;
	static $_perm_prods;
	static $_perm_depts;
	static $_perm_cats;
	static $_perm_where;
	static $_perm_only;
	
	static function getAdminPermissions()
	{
		if (empty(FST_Ticket_Helper::$_permissions)) {
			
			$mainframe = JFactory::getApplication(); 
			global $option;
			$user = JFactory::getUser();
			
			$userid = $user->id;
			
			$db = JFactory::getDBO();
			$query = "SELECT * FROM #__fst_user WHERE user_id = '".FSTJ3Helper::getEscaped($db, $userid)."'";
			$db->setQuery($query);
			FST_Ticket_Helper::$_permissions = $db->loadAssoc();
			
			if (!FST_Ticket_Helper::$_permissions)
			{
				FST_Ticket_Helper::$_permissions['mod_kb'] = 0;
				FST_Ticket_Helper::$_permissions['mod_test'] = 0;
				FST_Ticket_Helper::$_permissions['support'] = 0;
				FST_Ticket_Helper::$_permissions['seeownonly'] = 1;
				FST_Ticket_Helper::$_permissions['autoassignexc'] = 1;
				FST_Ticket_Helper::$_permissions['allprods'] = 1;
				FST_Ticket_Helper::$_permissions['allcats'] = 1;
				FST_Ticket_Helper::$_permissions['alldepts'] = 1;
				FST_Ticket_Helper::$_permissions['artperm'] = 0;
				FST_Ticket_Helper::$_permissions['id'] = 0;
				FST_Ticket_Helper::$_permissions['groups'] = 0;
				FST_Ticket_Helper::$_permissions['reports'] = 0;
				FST_Ticket_Helper::$_permissions['settings'] = '';
			}
			FST_Ticket_Helper::$_permissions['userid'] = $userid;
			
			FST_Ticket_Helper::$_perm_only = '';
			FST_Ticket_Helper::$_perm_prods = '';	
			FST_Ticket_Helper::$_perm_depts = '';
			FST_Ticket_Helper::$_perm_cats = '';	
			FST_Ticket_Helper::$_permissions['perm_where'] = '';

			
// 


			// check for permission overrides for Joomla 1.6
			if (FST_Settings::get('perm_article_joomla') || FST_Settings::get('perm_mod_joomla'))
			{
				if (FST_Helper::Is16())
				{
					$newart = 0;
					$newmod = 0;
					$user = JFactory::getUser();
					if ($user->authorise('core.edit.own','com_fst'))
					{
						$newart = 1;
					}
					if ($user->authorise('core.edit','com_fst'))
					{
						$newart = 2;
						$newmod = 1;
					}
					if ($user->authorise('core.edit.state','com_fst'))
					{
						$newart = 3;	
						$newmod = 1;
					}
						
					if (FST_Settings::get('perm_article_joomla') && $newart > FST_Ticket_Helper::$_permissions['artperm'])
						FST_Ticket_Helper::$_permissions['artperm'] = $newart;
					if (FST_Settings::get('perm_mod_joomla') && $newmod > FST_Ticket_Helper::$_permissions['mod_kb'])
						FST_Ticket_Helper::$_permissions['mod_kb'] = $newmod;
					//
				} else {
					$newart = 0;
					$newmod = 0;
					$user = JFactory::getUser();
					if ($user->authorize('com_fst', 'create', 'content', 'own'))
					{
						$newart = 1;
					}
					if ($user->authorize('com_fst', 'edit', 'content', 'own'))
					{
						$newart = 2;
						$newmod = 1;
					}
					if ($user->authorize('com_fst', 'publish', 'content', 'all'))
					{
						$newart = 3;
						$newmod = 1;
					}
						
					if (FST_Settings::get('perm_article_joomla') && $newart > FST_Ticket_Helper::$_permissions['artperm'])
						FST_Ticket_Helper::$_permissions['artperm'] = $newart;
					if (FST_Settings::get('perm_mod_joomla') && $newmod > FST_Ticket_Helper::$_permissions['mod_kb'])
						FST_Ticket_Helper::$_permissions['mod_kb'] = $newmod;
				}
			}
	
		}
		
		return FST_Ticket_Helper::$_permissions;			
	}
	
}