⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 projects.class.inc

📁 国外很不错的一个开源OA系统Group-Office
💻 INC
📖 第 1 页 / 共 2 页
字号:
<?php/** * @copyright Intermesh 2003 * @author Merijn Schering <mschering@intermesh.nl> * @version $Revision: 1.50 $ $Date: 2006/11/28 10:42:45 $ * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */ class projects extends db { 	function projects() 	{ 		$this->db(); 	} 	function get_project_users() 	{ 		$users = array(); 		$sql = "SELECT DISTINCT pmHours.user_id FROM pmHours"; 		$this->query($sql); 		while($this->next_record()) 		{ 			$users[]=$this->f('user_id'); 		} 		return $users; 	} 	function get_settings($user_id) 	{ 		$this->query("SELECT * FROM pm_settings WHERE user_id='$user_id'"); 		if ($this->next_record()) 		{ 			return $this->Record; 		}else 		{ 			$this->query("INSERT INTO pm_settings ". 			"(user_id, show_projects) VALUES ". 			"('$user_id', '1')"); 			return $this->get_settings($user_id); 		} 	} 	function get_statuses() 	{ 		$sql = "SELECT * FROM pmStatuses ORDER BY id ASC"; 		$this->query($sql); 		return $this->num_rows(); 	} 	function get_status($status_id) 	{ 		$sql = "SELECT * FROM pmStatuses WHERE id='$status_id'"; 		$this->query($sql); 		if($this->next_record()) 		{ 			return $this->Record; 		} 		return false; 	} 	function set_sorting($user_id, $sort_field, $sort_order) 	{ 		$sql = "UPDATE pm_settings SET sort_field='$sort_field' , ". 		"sort_order='$sort_order' WHERE user_id='$user_id'"; 		return $this->query($sql); 	} 	function set_show_projects($user_id, $show_projects) 	{ 		$sql = "UPDATE pm_settings SET show_projects='$show_projects'  WHERE user_id='$user_id'"; 		return $this->query($sql); 	} 	function set_registration_method($user_id, $registration_method, $unit_value=false, $int_fee_value=false, $fee_time=false, $ext_fee_value=false, $fee_time=false) 	{ 		$sql = "UPDATE pm_settings SET registration_method='$registration_method'"; 		if($unit_value !==false) 		{ 			$sql .= ", unit_value='$unit_value'"; 		} 		if($int_fee_value !== false) 		{ 			$sql .= ", int_fee_value='$int_fee_value', fee_time='$fee_time'"; 			$sql .= ", ext_fee_value='$ext_fee_value', fee_time='$fee_time'"; 		} 		$sql .= " WHERE user_id='$user_id'"; 		return $this->query($sql); 	} 	function start_timer($user_id, $project_id) 	{ 		$sql = "INSERT INTO pmTimers (user_id, start_time, project_id) ". 		"VALUES ('$user_id', '".get_gmt_time()."', '$project_id')"; 		return $this->query($sql); 	} 	function stop_timer($user_id) 	{ 		$sql = "DELETE FROM pmTimers WHERE user_id='$user_id'"; 		return $this->query($sql); 	} 	function get_timer($user_id) 	{ 		$sql = "SELECT start_time, project_id FROM pmTimers WHERE user_id='$user_id'"; 		$this->query($sql); 		if($this->next_record()) 		{ 			return $this->Record; 		} 		return false; 	} 	function _add_project($project) 	{ 		$project['id'] = $this->nextid('pmProjects'); 		if($project['id']>0) 		{ 			$this->insert_row('pmProjects', $project); 			return $project['id']; 		} 		return false; 	} 	function _update_project($project) 	{ 		return $this->update_row('pmProjects', 'id', $project); 	} 	function add_project($project) 	{ 		$project['id'] = $this->nextid("pmProjects"); 		$project['ctime'] = $project['mtime'] = get_gmt_time(); 		if ($project['id'] > 0 && $this->insert_row('pmProjects', $project)) 		{ 			return $project['id']; 		} 		return false; 	} 	function update_project($project, $shift_events=false) 	{ 		if($shift_events) 		{ 			global $GO_MODULES, $GO_CONFIG, $GO_LINKS; 			$old_project = $this->get_project($project['id']); 			if($old_project['link_id']>0) 			{ 				$offset = $project['start_date'] - $old_project['start_date']; 				require_once($GO_MODULES->modules['calendar']['class_path'].'calendar.class.inc'); 				$cal = new calendar(); 				$cal2 = new calendar(); 				$links = $GO_LINKS->get_links($old_project['link_id'], 1); 				if(count($links) > 0) 				{ 					$cal->get_events(1, 1, 1, 0, 0, 0, $links); 					while($cal->next_record()) 					{ 						$event['id'] = $cal->f('id'); 						$event['start_time'] = $cal->f('start_time') + $offset; 						$event['end_time'] = $cal->f('end_time') + $offset; 						$event['repeat_end_time'] = $cal->f('repeat_end_time') + $offset; 						$cal2->update_event($event); 					} 				} 			} 		} 		$project['mtime'] = get_gmt_time(); 		return $this->update_row('pmProjects','id', $project); 	} 	function get_project($project_id) 	{ 		$sql = "SELECT * FROM pmProjects WHERE id='$project_id'"; 		$this->query($sql); 		if ($this->next_record(MYSQL_ASSOC)) 		{ 			return $this->Record; 		}else 		{ 			return false; 		} 	} 	function get_project_by_name($name) 	{ 		$sql = "SELECT * FROM pmProjects WHERE name='$name'"; 		$this->query($sql); 		if ($this->next_record()) 		{ 			return $this->Record; 		}else 		{ 			return false; 		} 	} 	function delete_project($project_id) 	{ 		global $GO_SECURITY, $GO_CONFIG, $GO_LINKS; 		if($project = $this->get_project($project_id)) 		{ 			if($project['calendar_id']> 0) 			{ 				global $GO_MODULES; 				require_once($GO_MODULES->modules['calendar']['class_path'].'calendar.class.inc'); 				$cal = new calendar(); 				$cal->delete_calendar($project['calendar_id']); 			} 				 			$GO_LINKS->delete_link($project['link_id']); 				 			require_once($GO_CONFIG->class_path.'filesystem.class.inc'); 			$fs = new filesystem(); 			$fs->delete($GO_CONFIG->file_storage_path.'projects/'.$project_id.'/'); 				 				 				 			$GO_SECURITY->delete_acl($project['acl_read']); 			$GO_SECURITY->delete_acl($project['acl_write']); 			$sql = "DELETE FROM pmHours WHERE project_id='$project_id'"; 			if ($this->query($sql)) 			{ 				$sql = "DELETE FROM pmProjects WHERE id='$project_id'"; 				return $this->query($sql); 			} 		} 		return false; 	} 	function get_projects($sort='name', $direction='ASC', $project_id=0) 	{ 		$sql = "SELECT * FROM pmProjects"; 		if($project_id > 0) 		{ 			$sql .= " WHERE project_id='$project_id'"; 		} 		$sql .= " ORDER BY $sort $direction"; 		$this->query($sql); 		return $this->num_rows(); 	} 	function get_projects_for_period($user_id, $start_time, $end_time) 	{ 		$sql = "SELECT DISTINCT pmProjects.*, pmStatuses.name AS status_name FROM pmProjects ". 		"INNER JOIN pmStatuses ON pmStatuses.id=pmProjects.status ". 		"INNER JOIN acl ON (pmProjects.acl_read = acl.acl_id OR pmProjects.acl_write = acl.acl_id) ". 		"LEFT JOIN users_groups ON (acl.group_id = users_groups.group_id) WHERE ((". 		"users_groups.user_id = ".$user_id.") OR (". 		"acl.user_id = ".$user_id.")) AND pmProjects.start_date<$end_time AND pmProjects.end_date>$start_time"; 		$this->query($sql); 		return $this->num_rows(); 	} 	function get_authorized_projects($user_id, $links=false, $sort='name', $direction='ASC', $start=0, $offset=0, 	$status_id='', $search_field='', $search_keyword='', $start_time=0, $end_time=0) 	{ 		$sql = "SELECT DISTINCT pmProjects.*, pmStatuses.name AS status_name FROM pmProjects ". 		"LEFT JOIN pmStatuses ON pmStatuses.id=pmProjects.status ". 		"INNER JOIN acl ON (pmProjects.acl_read = acl.acl_id OR pmProjects.acl_write = acl.acl_id OR pmProjects.acl_book=acl.acl_id) ". 		"LEFT JOIN users_groups ON (acl.group_id = users_groups.group_id) WHERE ((". 		"users_groups.user_id = ".$user_id.") OR (". 		"acl.user_id = ".$user_id."))"; 		if(is_array($status_id) && count($status_id)>0) 		{ 			if(count($status_id)>1) 			{ 				$sql .= " AND status IN (".implode(',', $status_id).")"; 			}else 			{ 				$sql .= " AND status='".$status_id[0]."'"; 			} 		}elseif($status_id>0) 		{ 			$sql .= " AND status='$status_id'"; 		} 		if (is_array($links)) 		{ 			if(!count($links)) 			{ 				return 0; 			} 			$sql .= " AND link_id IN (".implode(',', $links).")"; 		} 		if($search_field != '' && $search_keyword != '') 		{ 			$sql .= " AND $search_field LIKE '$search_keyword'"; 		} 		if($start_time>0) 		{ 			$sql .= " AND start_date>=$start_time"; 		} 		if($end_time>0) 		{ 			$sql .= " AND end_date<$end_time"; 		} 		$sql .= " ORDER BY $sort $direction"; 		if ($offset > 0) 		{ 			$sql2 = $sql ." LIMIT $start, $offset"; 			$this->query($sql); 			$count = $this->num_rows(); 			if ($count > 0) 			{ 				$this->query($sql2); 			} 			return $count; 		}else 		{ 			$this->query($sql); 			return $this->num_rows(); 		} 	} 	function get_writable_projects($user_id) 	{ 		/*$sql = "SELECT DISTINCT pmProjects.* FROM pmProjects, acl, users_groups WHERE (". 		 "pmProjects.acl_write = acl.acl_id". 		 ") AND ( ( acl.group_id = users_groups.group_id AND users_groups.user_id = ".$user_id." AND acl.user_id = 0 ) OR (". 		 "acl.group_id = 0 AND acl.user_id = ".$user_id." ))";*/ 		$sql = "SELECT DISTINCT pmProjects.* ". 		"FROM pmProjects ". 		"INNER JOIN acl ON pmProjects.acl_write = acl.acl_id ". 		"LEFT JOIN users_groups ON acl.group_id = users_groups.group_id ". 		"WHERE acl.user_id=$user_id ". 		"OR users_groups.user_id=$user_id"; 		$this->query($sql); 		return $this->num_rows(); 	} 	function get_user_projects($user_id) 	{ 		$this->query("SELECT * FROM pmProjects WHERE user_id='$user_id'"); 		return $this->num_rows(); 	} 	function get_client_projects($contact_id) 	{ 		$this->query("SELECT * FROM pmProjects WHERE contact_id='$contact_id'"); 		return $this->num_rows(); 	} 	function add_booking($booking) 	{ 		$booking['id'] = $this->nextid("pmHours"); 		return $this->insert_row('pmHours',$booking); 	} 	function update_booking($booking) 	{ 		return $this->update_row('pmHours', 'id', $booking); 	} 	function get_booking($booking_id) 	{ 		$sql = "SELECT * FROM pmHours WHERE id='$booking_id'"; 		$this->query($sql); 		if($this->next_record()) 		{ 			return $this->Record; 		} 		return false; 	} 	function get_working_hours($working_hours_id) 	{ 		$sql = "SELECT * FROM pmHours WHERE id='$working_hours_id'"; 		$this->query($sql); 		if ($this->next_record()) 		{ 			return $this->Record; 		} 		return false; 	} 	function check_hours($user_id, $start_time, $end_time) 	{ 		$sql = "SELECT id FROM pmHours WHERE user_id='$user_id' AND (". 		"(start_time <= '$start_time' AND end_time > '$start_time') OR ". 		"(start_time < '$end_time' AND end_time > '$end_time'))"; 		$this->query($sql); 		if ($this->next_record()) 		{ 			return $this->f('id'); 		} 		return false; 	} 	function get_related_projects($project_id) 	{ 		$rel_projects = array(); 		$projects = new projects(); 		$projects->get_projects('name', 'ASC', $project_id); 		while($projects->next_record()) 		{ 			$rel_projects = array_merge($rel_projects, $this->get_related_projects($projects->f('id'))); 		} 		$rel_projects[] = $project_id; 		return $rel_projects; 	} 	function get_total_hours($project_id, $start_time=0, $end_time=0) 	{ 		$totals = array(); 		$totals[0]['time'] =0; 		$totals[0]['int_fee'] =0; 		$totals[0]['ext_fee'] =0; 		$sql = "SELECT units, user_id, start_time, end_time, break_time, ext_fee_value, int_fee_value, fee_time FROM pmHours WHERE project_id=$project_id"; 		if($start_time>0) 		{ 			$sql .= " AND start_time>=$start_time"; 		} 		if($end_time>0) 		{ 			$sql .= " AND end_time<$end_time"; 		} 		$this->query($sql); 		while($this->next_record()) 		{ 				 				 			if(!isset($totals[$this->f('user_id')]['time'])) 			{ 				$totals[$this->f('user_id')]['time'] =0; 			} 			if(!isset($totals[$this->f('user_id')]['int_fee'])) 			{ 				$totals[$this->f('user_id')]['int_fee'] =0; 			} 			if(!isset($totals[$this->f('user_id')]['ext_fee'])) 			{ 				$totals[$this->f('user_id')]['ext_fee'] =0; 			} 			if ($this->f('units') > 0) 			{ 				$time = $this->f('units')*$this->f('fee_time')*60;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -