📄 projects.class.inc
字号:
<?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 + -