📄 projects.class.inc
字号:
$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) { $totals = array(); $sql = "SELECT user_id, start_time, end_time, break_time, ext_fee_value, ext_fee_time, int_fee_value, int_fee_time FROM pmHours WHERE project_id=$project_id"; $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; } $time = $this->f('end_time')-$this->f('start_time')-$this->f('break_time'); $totals[$this->f('user_id')]['time'] += $time; $int_fee = $this->f('int_fee_time')> 0 ? ($this->f('int_fee_value')*$time/($this->f('int_fee_time')*60)) : 0; $totals[$this->f('user_id')]['int_fee'] += $int_fee; $ext_fee = $this->f('ext_fee_time')> 0 ? ($this->f('ext_fee_value')*$time/($this->f('ext_fee_time')*60)) : 0; $totals[$this->f('user_id')]['ext_fee'] += $ext_fee; } return $totals; } function get_hours($start_time=0, $end_time=0, $user_id=0, $project_id=0, $links=array()) { if ($start_time == 0 && $end_time == 0) { $sql = "SELECT pmHours.*, pmProjects.name, ". "pmProjects.description, pmProjects.acl_read, pmProjects.acl_write ". "FROM pmHours ". "INNER JOIN pmProjects ON (pmProjects.id=pmHours.project_id)"; $where = false; }else { $sql = "SELECT pmHours.*, pmProjects.name, ". "pmProjects.description, pmProjects.acl_read, pmProjects.acl_write ". "FROM pmHours INNER JOIN pmProjects ON (pmProjects.id=pmHours.project_id) ". "WHERE ". "pmHours.start_time >= '$start_time' AND pmHours.start_time < '$end_time'"; $where = true; } if ($user_id > 0) { if ($where) { $sql .= " AND"; }else { $sql .= " WHERE"; $where = true; } $sql .= " pmHours.user_id='$user_id'"; } if ($project_id > 0) { if ($where) { $sql .= " AND"; }else { $sql .= " WHERE"; $where = true; } $sql .= " pmHours.project_id='$project_id'"; } if (is_array($links)) { if(!count($links)) { return 0; } if ($where) { $sql .= " AND"; }else { $sql .= " WHERE"; $where = true; } $sql .= " link_id IN (".implode(',', $links).")"; } $sql .= " ORDER BY pmHours.start_time ASC"; $this->query($sql); return $this->num_rows(); } function delete_hours($hours_id) { if ($hours_id > 0) { $sql = "DELETE FROM pmHours WHERE id='$hours_id'"; return $this->query($sql); }else { return false; } } function get_project_hours($project_id, $start_time=0, $end_time=0) { if ($start_time == 0 && $end_time == 0) { $sql = "SELECT pmHours.*, pmFees.value AS fee_value, pmFees.time AS fee_time FROM pmHours INNER JOIN pmProjects ON (pmProjects.id=pmHours.project_id) LEFT JOIN pmFees ON (pmFees.id=pmProjects.fee_id) WHERE pmHours.project_id='$project_id' ORDER BY pmHours.start_time ASC"; }else { $sql = "SELECT pmHours.*, pmFees.value AS fee_value, pmFees.time AS fee_time FROM pmHours INNER JOIN pmProjects ON (pmProjects.id=pmHours.project_id) LEFT JOIN pmFees ON (pmFees.id=pmProjects.fee_id) WHERE pmHours.project_id='$project_id' AND pmHours.start_time >= '$start_time' AND pmHours.start_time < '$end_time' ORDER BY pmHours.start_time ASC"; } $this->query($sql); return $this->num_rows(); } function get_user_hours($user_id, $start_time=0, $end_time=0) { if ($start_time == 0 && $end_time == 0) { $sql = "SELECT pmHours.*, pmFees.value AS fee_value, pmFees.time AS fee_time, pmProjects.name AS project_name FROM pmHours LEFT JOIN pmProjects ON (pmHours.project_id = pmProjects.id) LEFT JOIN pmFees ON (pmFees.id=pmHours.fee_id) WHERE pmHours.user_id='$user_id' ORDER BY start_time ASC"; }else { $sql = "SELECT pmHours.*, pmFees.value AS fee_value, pmFees.time AS fee_time, pmProjects.name AS project_name FROM pmHours LEFT JOIN pmProjects ON (pmHours.project_id = pmProjects.id) LEFT JOIN pmFees ON (pmFees.id=pmHours.fee_id) WHERE pmHours.user_id='$user_id' AND pmHours.start_time >= '$start_time' AND pmHours.start_time < '$end_time' ORDER BY pmHours.start_time ASC"; } $this->query($sql); return $this->num_rows(); } function get_fees() { $sql = "SELECT * FROM pmFees"; $this->query($sql); return $this->num_rows(); } function get_authorized_fees($user_id) { $sql = "SELECT DISTINCT pmFees.* ". "FROM pmFees ". "INNER JOIN acl ON pmFees.acl_id = 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_fee($fee_id) { $sql = "SELECT * FROM pmFees WHERE id='$fee_id'"; $this->query($sql); if ($this->next_record()) { return $this->Record; }else { return false; } } function add_fee($fee) { $fee['id'] = $this->nextid("pmFees"); if ($fee['id'] > 0 && $this->insert_row('pmFees', $fee)) { return $fee['id']; } return false; } function delete_fee($fee_id) { if($fee = $this->get_fee($fee_id)) { global $GO_SECURITY; $GO_SECURITY->delete_acl($fee['acl_read']); $GO_SECURITY->delete_acl($fee['acl_write']); $sql = "DELETE FROM pmFees WHERE id='$fee_id'"; return $this->query($sql); } return false; } function update_fee($fee) { return $this->update_row('pmFees','id', $fee); } function copy_project($project_id) { global $GO_SECURITY; if($src_project = $dst_project = $this->get_project($project_id)) { unset($dst_project['id']); $dst_project['name'].' ('.$GLOBALS['strCopy'].')'; $x = 1; while($this->get_project_by_name($dst_project['name'])) { $dst_project['name'] = $src_project['name'].' ('.$GLOBALS['strCopy'].' '.$x.')'; $x++; } $dst_project['acl_read'] = $GO_SECURITY->get_new_acl('project read'); $dst_project['acl_write'] = $GO_SECURITY->get_new_acl('project write'); $GO_SECURITY->copy_acl($src_project['acl_read'], $dst_project['acl_read']); $GO_SECURITY->copy_acl($src_project['acl_write'], $dst_project['acl_write']); $dst_project = array_map('addslashes', $dst_project); return $this->_add_project($dst_project); } return false; } function add_template($template) { $template['id'] = $this->nextid("pm_templates"); if ($template['id'] > 0 && $this->insert_row('pm_templates', $template)) { return $template['id']; } return false; } function update_template($template) { return $this->update_row('pm_templates','id', $template); } function get_template($template_id) { $sql = "SELECT * FROM pm_templates WHERE id='$template_id'"; $this->query($sql); if ($this->next_record(MYSQL_ASSOC)) { return $this->Record; }else { return false; } } function get_template_by_name($name) { $sql = "SELECT * FROM pm_templates WHERE name='$name'"; $this->query($sql); if ($this->next_record()) { return $this->Record; }else { return false; } } function delete_template($template_id) { global $GO_SECURITY; if($template = $this->get_template($template_id)) { $GO_SECURITY->delete_acl($template['acl_read']); $GO_SECURITY->delete_acl($template['acl_write']); $sql = "DELETE FROM pm_template_events WHERE template_id='$template_id'"; if ($this->query($sql)) { $sql = "DELETE FROM pm_templates WHERE id='$template_id'"; return $this->query($sql); } } return false; } function get_authorized_templates($user_id) { $sql = "SELECT DISTINCT pm_templates.* ". "FROM pm_templates ". "INNER JOIN acl ON pm_templates.acl_write = acl.acl_id OR pm_templates.acl_read=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 add_template_event($event) { $event['id'] = $this->nextid("pm_template_events"); if ($event['id'] > 0 && $this->insert_row('pm_template_events', $event)) { return $event['id']; } return false; } function update_template_event($event) { return $this->update_row('pm_template_events','id', $event); } function get_template_event($template_event_id) { $sql = "SELECT * FROM pm_template_events WHERE id='$template_event_id'"; $this->query($sql); if ($this->next_record(MYSQL_ASSOC)) { return $this->Record; }else { return false; } } function delete_template_event($template_event_id) { return $this->query("DELETE FROM pm_template_events WHERE id='$template_event_id'"); } function get_template_events($template_id) { $sql = "SELECT * FROM pm_template_events WHERE template_id='$template_id' ORDER BY time_offset ASC"; $this->query($sql); return $this->num_rows(); } function apply_template($template_id, $project_id, $calendar_id) { global $GO_MODULES, $GO_SECURITY, $GO_USERS, $GO_CONFIG, $GO_LINKS; require_once($GO_MODULES->modules['calendar']['class_path'].'calendar.class.inc'); $cal = new calendar(); $project = $this->get_project($project_id); if($project) { if(empty($project['link_id'])) { $update_project['id'] = $project_id; $update_project['link_id'] = $project['link_id'] = $GO_LINKS->get_link_id(); $this->update_project($update_project); } $this->get_template_events($template_id); while($this->next_record(MYSQL_ASSOC)) { $event = $this->Record; $event['link_id']= $GO_LINKS->get_link_id(); $event['start_time'] = get_gmt_time($project['start_date']+$event['time_offset']); $event['end_time'] = $event['start_time']+$event['duration']; unset($event['duration'], $event['time_offset'], $event['template_id'], $event['id']); $event['acl_read'] = $GO_SECURITY->get_new_acl('Project event'); $event['acl_write'] = $GO_SECURITY->get_new_acl('Project event'); $GO_SECURITY->add_user_to_acl($GO_SECURITY->user_id, $event['acl_write']); $GO_SECURITY->add_group_to_acl($GO_CONFIG->group_everyone, $event['acl_read']); $event_id = $cal->add_event($event); $cal->subscribe_event($event_id, $calendar_id); $calendar = $cal->get_calendar($calendar_id); if ($calendar && $event['reminder'] > 0 && $next_recurrence_time = $cal->get_next_recurrence_time($event_id)) { $remind_time = $next_recurrence_time - $event['reminder']; $reminder['user_id'] = $cal->f('user_id'); $reminder['event_id'] = $event_id; $reminder['remind_time'] = $remind_time; $reminder['occurence_time'] = $next_recurrence_time; $cal->add_reminder($reminder); } $GO_LINKS->add_link($event['link_id'],1, $project['link_id'], 5); } return true; } return false; } function delete_user($user_id) { $projects = new projects(); $this->get_user_projects($user_id); while($this->next_record()) { $projects->delete_project($this->f('id')); } $this->query("DELETE FROM pm_settings WHERE user_id='$user_id'"); } }?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -