File: 0.00.3a/core/request/RequestManager.php (View as HTML)

  1: <?php 
  2: /* -------------------------------------------------------------
  3: This file is part of FreeDESK
  4: 
  5: FreeDESK is (C) Copyright 2012 David Cutting
  6: 
  7: FreeDESK is free software: you can redistribute it and/or modify
  8: it under the terms of the GNU General Public License as published by
  9: the Free Software Foundation, either version 3 of the License, or
 10: (at your option) any later version.
 11: 
 12: FreeDESK is distributed in the hope that it will be useful,
 13: but WITHOUT ANY WARRANTY; without even the implied warranty of
 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 15: GNU General Public License for more details.
 16: 
 17: You should have received a copy of the GNU General Public License
 18: along with FreeDESK.  If not, see www.gnu.org/licenses
 19: 
 20: For more information see www.purplepixie.org/freedesk/
 21: -------------------------------------------------------------- */
 22: 
 23: /**
 24:  * Request Manager - handle all management of requests
 25: **/
 26: class RequestManager
 27: {
 28: 	/**
 29: 	 * FreeDESK instance
 30: 	**/
 31: 	private $DESK = null;
 32: 	
 33: 	/**
 34: 	 * Team List
 35: 	**/
 36: 	private $Teams = null;
 37: 	
 38: 	/**
 39: 	 * User List (Assignment)
 40: 	**/
 41: 	private $Users = null;
 42: 	
 43: 	/**
 44: 	 * Request classes list
 45: 	**/
 46: 	private $ClassList = null;
 47: 	
 48: 	/**
 49: 	 * Constructor
 50: 	 * @param mixed &$freeDESK FreeDESK instance
 51: 	**/
 52: 	function RequestManager(&$freeDESK)
 53: 	{
 54: 		$this->DESK=&$freeDESK;
 55: 		$this->DESK->PluginManager->Register(new Plugin(
 56: 			"Request Manager", "0.01", "Core" ));
 57: 		// Register our permissions
 58: 		$this->DESK->PermissionManager->Register("request_view_otherteam",false);
 59: 		$this->DESK->PermissionManager->Register("request_view_otherteamuser",false);
 60: 		$this->DESK->PermissionManager->Register("request_view_otheruser",false);
 61: 		$this->DESK->PermissionManager->Register("request_view_unassigned",false);
 62: 		$this->DESK->PermissionManager->Register("request_assign_otherteam",false);
 63: 		$this->DESK->PermissionManager->Register("request_assign_otherteamuser",false);
 64: 		$this->DESK->PermissionManager->Register("request_assign_otheruser",false);
 65: 		$this->DESK->PermissionManager->Register("request_assign_unassigned",false);
 66: 		
 67: 	}
 68: 	
 69: 	/**
 70: 	 * Team and User List (Assignment and View List)
 71: 	 * @return array Mixed array with teams and users with view and assign flags
 72: 	**/
 73: 	function TeamUserList()
 74: 	{
 75: 		$out = array();
 76: 		
 77: 		$this->Users = array();
 78: 		$this->Teams = array();
 79: 		
 80: 		$q="SELECT ".$this->DESK->Database->Field("username").",".$this->DESK->Database->Field("realname")." FROM ".$this->DESK->Database->Table("user");
 81: 		$r=$this->DESK->Database->Query($q);
 82: 		$users=array();
 83: 		while($row=$this->DESK->Database->FetchAssoc($r))
 84: 		{
 85: 			$users[$row['username']] = $row['realname'];
 86: 			$this->Users[$row['username']] = $row['realname'];
 87: 		}
 88: 		$this->DESK->Database->Free($r);
 89: 
 90: 		$q="SELECT * FROM ".$this->DESK->Database->Table("team");
 91: 		$r=$this->DESK->Database->Query($q);
 92: 		$team=array();
 93: 		while($row=$this->DESK->Database->FetchAssoc($r))
 94: 		{
 95: 			$team[$row['teamid']]=$row['teamname'];
 96: 			$this->Teams[$row['teamid']]=$row['teamname'];
 97: 		}
 98: 
 99: 		$q="SELECT * FROM ".$this->DESK->Database->Table("teamuserlink");
100: 		$r=$this->DESK->Database->Query($q);
101: 		$teamlink=array();
102: 		while($row=$this->DESK->Database->FetchAssoc($r))
103: 		{
104: 			if (isset($teamlink[$row['teamid']]))
105: 				$teamlink[$row['teamid']][]=$row['username'];
106: 			else
107: 				$teamlink[$row['teamid']]=array( $row['username'] );
108: 		}
109: 
110: 
111: 		$pRvOtherTeam = $this->DESK->ContextManager->Permission("request_view_otherteam");
112: 		$pRvOtherTeamUser = $this->DESK->ContextManager->Permission("request_view_otherteamuser");
113: 		$pRvOtherUser = $this->DESK->ContextManager->Permission("request_view_otheruser");
114: 		$pRvUnassigned = $this->DESK->ContextManager->Permission("request_view_unassigned");
115: 		
116: 		$pRaOtherTeam = $this->DESK->ContextManager->Permission("request_assign_otherteam");
117: 		$pRaOtherTeamUser = $this->DESK->ContextManager->Permission("request_assign_otherteamuser");
118: 		$pRaOtherUser = $this->DESK->ContextManager->Permission("request_assign_otheruser");
119: 		$pRaUnassigned = $this->DESK->ContextManager->Permission("request_assign_unassigned");
120: 
121: 		$out[0]=array(
122: 			"name" => "Unassigned",
123: 			"id" => 0,
124: 			"team" => true,
125: 			"assign" => $pRaUnassigned,
126: 			"view" => $pRvUnassigned,
127: 			"items" => array() );
128: 
129: 		foreach($team as $teamid => $teamname)
130: 		{
131: 			$userInTeam = $this->IsUserInTeam($this->DESK->ContextManager->Session->username, $teamid);
132: 			
133: 			$assign = ($userInTeam || $pRaOtherTeam) ? true : false;
134: 			$view = ($userInTeam || $pRvOtherTeam) ? true : false;
135: 			
136: 			$out[$teamid]=array(
137: 				"name" => $teamname,
138: 				"id" => $teamid,
139: 				"team" => true,
140: 				"assign" => $assign,
141: 				"view" => $view,
142: 				"items" => array() );
143: 				
144: 			if (isset($teamlink[$teamid]))
145: 			{
146: 					
147: 				foreach($teamlink[$teamid] as $username)
148: 				{
149: 					$assign = ($userInTeam || $pRaOtherTeamUser) ? true : false;
150: 					$view = ($userInTeam || $pRvOtherTeamUser) ? true : false;
151: 					
152: 					$out[$teamid]["items"][$username] = array (
153: 						"username" => $username,
154: 						"realname" => $users[$username],
155: 						"assign" => $assign,
156: 						"view" => $view );
157: 				}
158: 			}
159: 		}
160: 
161: 		$out['allusers']=array(
162: 			"name" => "All Users",
163: 			"id" => 0,
164: 			"team" => false,
165: 			"assign" => false,
166: 			"view" => false,
167: 			"items" => array() );
168: 		foreach($users as $username => $realname)
169: 		{
170: 			$assign = ($this->DESK->ContextManager->Session->username == $username || $pRaOtherUser) ? true : false;
171: 			$view = ($this->DESK->ContextManager->Session->username == $username || $pRvOtherUser) ? true : false;
172: 			
173: 			$out['allusers']['items'][$username] = array(
174: 				"username" => $username,
175: 				"realname" => $realname,
176: 				"assign" => $assign,
177: 				"view" => $view );
178: 		}
179: 		
180: 		return $out;
181: 	}
182: 	
183: 	/**
184: 	 * Return a list of possible request statuses
185: 	 * @return array Status list
186: 	**/
187: 	function StatusList()
188: 	{
189: 		$q="SELECT * FROM ".$this->DESK->Database->Table("status");
190: 		$q.=" ORDER BY ".$this->DESK->Database->Field("status")." DESC";
191: 		$r=$this->DESK->Database->Query($q);
192: 		$out=array();
193: 		while ($row=$this->DESK->Database->FetchAssoc($r))
194: 		{
195: 			$out[$row['status']]=$row['description'];
196: 		}
197: 		$this->DESK->Database->Free($r);
198: 		return $out;
199: 	}
200: 	
201: 	/**
202: 	 * Fetch a request by ID
203: 	 * @param int $request Request ID
204: 	 * @return mixed bool false if request not found or Request-type class on success
205: 	**/
206: 	function Fetch($request)
207: 	{
208: 		$q="SELECT * FROM ".$this->DESK->Database->Table("request")." WHERE ";
209: 		$q.=$this->DESK->Database->Field("requestid")."=".$this->DESK->Database->Safe($request);
210: 		$r=$this->DESK->Database->Query($q);
211: 		if ($row=$this->DESK->Database->FetchAssoc($r))
212: 		{
213: 			$req = $this->CreateByID($row['class']);
214: 			$req->ID = $row['requestid'];
215: 			foreach($row as $key => $val)
216: 				$req->Set($key, $val);
217: 			$assign="";
218: 			if ($row['assignteam']!=0)
219: 			{
220: 				$teams = $this->TeamList();
221: 				$assign.=$teams[$row['assignteam']];
222: 			}
223: 			if ($row['assignuser']!="")
224: 			{
225: 				if ($assign!="")
226: 					$assign.=" - ";
227: 				$users = $this->UserList();
228: 				$assign.=$users[$row['assignuser']];
229: 			}
230: 			if ($row['assignteam']==0 && $row['assignuser']=="")
231: 				$assign=$this->DESK->Lang->Get("unassigned");
232: 			$req->Set("assigned",$assign);
233: 			
234: 			$cq="SELECT ".$this->DESK->Database->Field("firstname").",".$this->DESK->Database->Field("lastname");
235: 			$cq.=" FROM ".$this->DESK->Database->Table("customer")." ";
236: 			$cq.="WHERE ".$this->DESK->Database->Field("customerid")."=".$this->DESK->Database->Safe($row['customer']);
237: 			$cq.=" LIMIT 0,1";
238: 			$cr=$this->DESK->Database->Query($cq);
239: 			$req->Set("customerid",$row['customer']);
240: 			if ($cust=$this->DESK->Database->FetchAssoc($cr))
241: 			{
242: 				$req->Set("customer",$cust['firstname']." ".$cust['lastname']);
243: 			}
244: 			else
245: 				$req->Set("customer","Unknown (".$row['customer'].")");
246: 			$this->DESK->Database->Free($cr);
247: 			
248: 			return $req;
249: 		}
250: 		else
251: 			return false;
252: 	}
253: 	
254: 	/**
255: 	 * Fetch a request assignment list
256: 	 * @param int $teamid Assigned team (optional, default 0)
257: 	 * @param string $username Assigned username (optional, default "")
258: 	 * @param string $sort Field to sort on
259: 	 * @param string $order Order (ASC or DESC)
260: 	 * @return mixed array of requests matching
261: 	**/
262: 	function FetchAssigned($teamid=0, $username="", $sort="", $order="")
263: 	{
264: 		// assignteam assignuser
265: 		$q="SELECT ".$this->DESK->Database->Field("requestid")." FROM ".$this->DESK->Database->Table("request")." WHERE ";
266: 		
267: 		
268: 		if ( ($teamid==0) && ($username!="") ) // assigned to a user for any team
269: 			$q.=$this->DESK->Database->Field("assignuser")."=".$this->DESK->Database->SafeQuote($username);
270: 		else // use both
271: 		{
272: 			$q.=$this->DESK->Database->Field("assignuser")."=".$this->DESK->Database->SafeQuote($username)." AND ";
273: 			$q.=$this->DESK->Database->Field("assignteam")."=".$this->DESK->Database->Safe($teamid);
274: 		}
275: 		
276: 		$q.=" AND ".$this->DESK->Database->Field("status").">0";
277: 		
278: 		if ($sort != "" && $sort != "assigned" && $sort != "customer")
279: 		{
280: 			$q.=" ORDER BY ".$this->DESK->Database->Field($sort)." ";
281: 			if ($order == "ASC")
282: 				$q.="ASC";
283: 			else
284: 				$q.="DESC";
285: 		}
286: 		else if ($sort == "assigned")
287: 		{
288: 			if ($order == "ASC")
289: 				$o="ASC";
290: 			else
291: 				$o="DESC";
292: 			$q.=" ORDER BY ".$this->DESK->Database->Field("assignteam")." ".$o.",";
293: 			$q.=$this->DESK->Database->Field("assignuser")." ".$o;
294: 		}
295: 		else if ($sort == "customer")
296: 		{
297: 			if ($order == "ASC")
298: 				$o="ASC";
299: 			else
300: 				$o="DESC";
301: 			$q.=" ORDER BY ".$this->DESK->Database->Field("customer")." ".$o;
302: 		}
303: 		
304: 		$out=array();
305: 		$r=$this->DESK->Database->Query($q);
306: 		while ($row=$this->DESK->Database->FetchAssoc($r))
307: 		{
308: 			$out[]=$this->Fetch($row['requestid']);
309: 		}
310: 		return $out;
311: 	}
312: 	
313: 	/**
314: 	 * Fetch an array of request fields for the main list display with their default display options
315: 	 * @return array of request fields
316: 	**/
317: 	function FetchFields()
318: 	{
319: 		$out = array(
320: 			"requestid" => array("Request ID", 1),
321: 			"customer" => array("Customer", 1),
322: 			"assigned" => array("Assigned To", 1),
323: 			"openeddt" => array("Opened", 0),
324: 			"class" => array("Class", 0),
325: 			"priority" => array("Priority", 1),
326: 			"status" => array("Status", 1) );
327: 		return $out;
328: 	}
329: 	
330: 	/**
331: 	 * Fetch a list of users in form username=>realname
332: 	 * @return array User list
333: 	**/
334: 	function UserList()
335: 	{
336: 		if (!is_array($this->Users))
337: 			$this->TeamUserList();
338: 		return $this->Users;
339: 	}
340: 	
341: 	/**
342: 	 * Fetch a list of teams in form teamid=>teamname
343: 	 * @return array Team List
344: 	**/
345: 	function TeamList()
346: 	{
347: 		if (!is_array($this->Teams))
348: 			$this->TeamUserList();
349: 		return $this->Teams;
350: 	}
351: 	
352: 	/**
353: 	 * Determine is a user is in a team
354: 	 * @param string $username Username
355: 	 * @param int $teamid Team ID
356: 	 * @return bool True if user is in team else false
357: 	**/
358: 	function IsUserInTeam($username, $teamid)
359: 	{
360: 		$q="SELECT ".$this->DESK->Database->Field("linkid")." FROM ";
361: 		$q.=$this->DESK->Database->Table("teamuserlink")." WHERE ";
362: 		$q.=$this->DESK->Database->Field("teamid")."=".$this->DESK->Database->Safe($teamid)." AND ";
363: 		$q.=$this->DESK->Database->Field("username")."=".$this->DESK->Database->SafeQuote($username);
364: 		$q.=" LIMIT 0,1";
365: 		
366: 		$r=$this->DESK->Database->Query($q);
367: 		
368: 		$inteam=false;
369: 		
370: 		if ($row=$this->DESK->Database->FetchAssoc($r))
371: 			$inteam=true;
372: 			
373: 		$this->DESK->Database->Free($r);
374: 		
375: 		return $inteam;
376: 	}
377: 	
378: 	/**
379: 	 * Load a class list
380: 	**/
381: 	private function LoadClassList()
382: 	{
383: 		$q="SELECT * FROM ".$this->DESK->Database->Table("requestclass");
384: 		$r=$this->DESK->Database->Query($q);
385: 		$this->ClassList = array();
386: 		while ($row=$this->DESK->Database->FetchAssoc($r))
387: 		{
388: 			$this->ClassList[$row['classid']] = $row;
389: 		}
390: 		$this->DESK->Database->Free($r);
391: 	}
392: 	
393: 	/**
394: 	 * Create a request by classid
395: 	 * @param int $classid Class ID
396: 	 * @return object Request object
397: 	**/
398: 	function CreateByID($classid)
399: 	{
400: 		if ($this->ClassList == null)
401: 			$this->LoadClassList();
402: 		
403: 		if (isset($this->ClassList[$classid]))
404: 			return RequestFactory::Create($this->DESK, $this->ClassList[$classid]['classclass']);
405: 		else
406: 			return RequestFactory::Create($this->DESK, "");
407: 	}
408: 	
409: 	/**
410: 	 * Create a new team
411: 	 * @param string $teamname Name of the team
412: 	**/
413: 	function CreateTeam($teamname)
414: 	{
415: 		$q="INSERT INTO ".$this->DESK->Database->Table("team")."(".$this->DESK->Database->Field("teamname").") VALUES(".
416: 		$q.=$this->DESK->Database->SafeQuote($teamname).")";
417: 		$this->DESK->Database->Query($q);
418: 	}
419: 	
420: 	/**
421: 	 * Update a team name
422: 	 * @param int $teamid ID
423: 	 * @param string $teamname Team name
424: 	**/
425: 	function UpdateTeam($teamid, $teamname)
426: 	{
427: 		$q="UPDATE ".$this->DESK->Database->Table("team")." SET ".$this->DESK->Database->Field("teamname")."=".$this->DESK->Database->SafeQuote($teamname);
428: 		$q.=" WHERE ".$this->DESK->Database->Field("teamid")."=".$this->DESK->Database->Safe($teamid);
429: 		$this->DESK->Database->Query($q);
430: 	}
431: 	
432: 	/**
433: 	 * Delete a team
434: 	 * @param int $teamid ID
435: 	**/
436: 	function DeleteTeam($teamid)
437: 	{
438: 		$q="DELETE FROM ".$this->DESK->Database->Table("teamuserlink")." WHERE ".$this->DESK->Database->Field("teamid")."=".$this->DESK->Database->Safe($teamid);
439: 		$this->DESK->Database->Query($q);
440: 		
441: 		$q="DELETE FROM ".$this->DESK->Database->Table("team")." WHERE ".$this->DESK->Database->Field("teamid")."=".$this->DESK->Database->Safe($teamid);
442: 		$this->DESK->Database->Query($q);
443: 	}
444: 	
445: 	/**
446: 	 * Create a new status
447: 	 * @param string $name Status name
448: 	**/
449: 	function CreateStatus($name)
450: 	{
451: 		$current = $this->StatusList();
452: 		$high = 0;
453: 		foreach($current as $id => $curname)
454: 			if ($id > $high)
455: 				$high = $id;
456: 		$newid = $high+1;
457: 		
458: 		$q="INSERT INTO ".$this->DESK->Database->Table("status")."(".$this->DESK->Database->Field("status").",".$this->DESK->Database->Field("description").") ";
459: 		$q.="VALUES(".$this->DESK->Database->Safe($newid).",".$this->DESK->Database->SafeQuote($name).")";
460: 		
461: 		$this->DESK->Database->Query($q);
462: 	}
463: 	
464: 	/**
465: 	 * Update a status description
466: 	 * @param int $id Status ID
467: 	 * @param string $name New Name
468: 	**/
469: 	function UpdateStatus($id, $name)
470: 	{
471: 		$q="UPDATE ".$this->DESK->Database->Table("status")." SET ".$this->DESK->Database->Field("description")."=".$this->DESK->Database->SafeQuote($name);
472: 		$q.=" WHERE ".$this->DESK->Database->Field("status")."=".$this->DESK->Database->Safe($id);
473: 		$this->DESK->Database->Query($q);
474: 	}
475: 	
476: 	/**
477: 	 * Delete a status
478: 	 * @param int $id Status ID
479: 	**/
480: 	function DeleteStatus($id)
481: 	{
482: 		$q="DELETE FROM ".$this->DESK->Database->Table("status")." WHERE ".$this->DESK->Database->Field("status")."=".$this->DESK->Database->Safe($id);
483: 		$this->DESK->Database->Query($q);
484: 	}
485: 	
486: 	/**
487: 	 * Get a list of all request classes
488: 	 * @return array Request class data
489: 	**/
490: 	function GetRequestClasses()
491: 	{
492: 		$q="SELECT * FROM ".$this->DESK->Database->Table("requestclass");
493: 		$r=$this->DESK->Database->Query($q);
494: 		$out=array();
495: 		while ($row=$this->DESK->Database->FetchAssoc($r))
496: 			$out[$row['classid']]=$row;
497: 		$this->DESK->Database->Free($r);
498: 		return $out;
499: 	}
500: 	
501: 	/**
502: 	 * Save/Create a Request Class
503: 	 * @param string $classname Name
504: 	 * @param string $classclass Class class (concrete request class)
505: 	 * @param int $id (optional, if present will save otherwise create)
506: 	**/
507: 	function SaveRequestClass($classname, $classclass, $id=0)
508: 	{
509: 		if ($id == 0)
510: 		{
511: 			$q="INSERT INTO ".$this->DESK->Database->Table("requestclass")."(";
512: 			$q.=$this->DESK->Database->Field("classname").",".$this->DESK->Database->Field("classclass").") ";
513: 			$q.="VALUES(";
514: 			$q.=$this->DESK->Database->SafeQuote($classname).",".$this->DESK->Database->SafeQuote($classclas).")";
515: 			$this->DESK->Database->Query($q);
516: 		}
517: 		else
518: 		{
519: 			$q="UPDATE ".$this->DESK->Database->Table("requestclass")." SET ";
520: 			$q.=$this->DESK->Database->Field("classname")."=".$this->DESK->Database->SafeQuote($classname).",";
521: 			$q.=$this->DESK->Database->Field("classclass")."=".$this->DESK->Database->SafeQuote($classclass)." ";
522: 			$q.="WHERE ".$this->DESK->Database->Field("classid")."=".$this->DESK->Database->Safe($id);
523: 			$this->DESK->Database->Query($q);
524: 		}
525: 	}
526: 	
527: 	/**
528: 	 * Delete a request class
529: 	 * @param int $id Request Class ID
530: 	**/
531: 	function DeleteRequestClass($id)
532: 	{
533: 		$q="DELETE FROM ".$this->DESK->Database->Table("requestclass")." WHERE ";
534: 		$q.=$this->DESK->Database->Field("classid")."=".$this->DESK->Database->Safe($id);
535: 		$this->DESK->Database->Query($q);
536: 	}
537: 	
538: 	/**
539: 	 * Get a priority list
540: 	 * @return array Priorities
541: 	**/
542: 	function GetPriorityList()
543: 	{
544: 		$q="SELECT * FROM ".$this->DESK->Database->Table("priority");
545: 		$r=$this->DESK->Database->Query($q);
546: 		$out=array();
547: 		while ($row=$this->DESK->Database->FetchAssoc($r))
548: 		{
549: 			$out[$row['priorityid']]=$row;
550: 		}
551: 		$this->DESK->Database->Free($r);
552: 		return $out;
553: 	}
554: 	
555: 	/**
556: 	 * Save/Create a Request Priority
557: 	 * @param string $priorityname Name
558: 	 * @param int $resolutionsla Resolution SLA (seconds)
559: 	 * @param int $schedule Schedule ID for SLA
560: 	 * @param int $priorityid Priority ID (optional)
561: 	**/
562: 	function SavePriority($priorityname, $resolutionsla, $schedule, $priorityid=0)
563: 	{
564: 		if ($priorityid == 0)
565: 		{
566: 			$q="INSERT INTO ".$this->DESK->Database->Table("priority")." (";
567: 			$q.=$this->DESK->Database->Field("priorityname").",".$this->DESK->Database->Field("resolutionsla").",";
568: 			$q.=$this->DESK->Database->Field("schedule").") VALUES(";
569: 			$q.=$this->DESK->Database->SafeQuote($priorityname).",".$this->DESK->Database->Safe($resolutionsla).",".$this->DESK->Database->Safe($schedule).")";
570: 			$this->DESK->Database->Query($q);
571: 		}
572: 		else
573: 		{
574: 			$q="UPDATE ".$this->DESK->Database->Table("priority")." SET ";
575: 			$q.=$this->DESK->Database->Field("priorityname")."=".$this->DESK->Database->SafeQuote($priorityname).",";
576: 			$q.=$this->DESK->Database->Field("resolutionsla")."=".$this->DESK->Database->Safe($resolutionsla).",";
577: 			$q.=$this->DESK->Database->Field("schedule")."=".$this->DESK->Database->Safe($schedule)." ";
578: 			$q.="WHERE ".$this->DESK->Database->Field("priorityid")."=".$this->DESK->Database->Safe($priorityid);
579: 			$this->DESK->Database->Query($q);
580: 		}
581: 	}
582: 	
583: 	/**
584: 	 * Delete a priority
585: 	 * @param int $priorityid Priority ID
586: 	**/
587: 	function DeletePriority($priorityid)
588: 	{
589: 		$q="DELETE FROM ".$this->DESK->Database->Table("priority")." WHERE ".$this->DESK->Database->Field("priorityid")."=".$this->DESK->Database->Safe($priorityid);
590: 		$this->DESK->Database->Query($q);
591: 	}
592: 	
593: 	/**
594: 	 * Search requests against parameters - no filtering
595: 	 * @param array Search parameters (in form "field" "value" opt "match" [LIKE or =, default to =])
596: 	 * @return array Request list with all raw data (no class instances)
597: 	**/
598: 	function SearchRequests($parameters)
599: 	{
600: 		$q="SELECT * FROM ".$this->DESK->Database->Table("request");
601: 		if (sizeof($parameters)>0)
602: 		{
603: 			$q.=" WHERE ";
604: 			$first=true;
605: 			foreach($parameters as $param)
606: 			{
607: 				if ($first)
608: 					$first=false;
609: 				else
610: 					$q.=" AND ";
611: 				$w=$this->DESK->Database->Field($param["field"]);
612: 				if (isset($param["match"]))
613: 					$w.=" ".$param["match"]." ";
614: 				else
615: 					$w.="=";
616: 				$w.=$this->DESK->Database->SafeQuote($param["value"]);
617: 				$q.=$w;
618: 			}
619: 		}
620: 		//echo $q;
621: 		$r=$this->DESK->Database->Query($q);
622: 		$out = array();
623: 		while ($row=$this->DESK->Database->FetchAssoc($r))
624: 		{
625: 			$out[]=$row;
626: 		}
627: 		$this->DESK->Database->Free($r);
628: 		return $out;
629: 	}
630: 	
631: 	
632: 	
633: }
634: ?>
635: