home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 April / CMCD0404.ISO / Software / Freeware / Programare / groupoffice-com-2.01 / classes / projects.class.inc < prev    next >
Text File  |  2004-03-08  |  12KB  |  390 lines

  1. <?php
  2. /*
  3. Copyright Intermesh 2003
  4. Author: Merijn Schering <mschering@intermesh.nl>
  5. Version: 1.0 Release date: 08 July 2003
  6.  
  7. This program is free software; you can redistribute it and/or modify it
  8. under the terms of the GNU General Public License as published by the
  9. Free Software Foundation; either version 2 of the License, or (at your
  10. option) any later version.
  11. */
  12. define('STATUS_OFFER', 1);
  13. define('STATUS_ONGOING', 2);
  14. define('STATUS_WAITING', 3);
  15. define('STATUS_DONE', 4);
  16. define('STATUS_BILLED', 5);
  17.  
  18. class projects extends db
  19. {
  20.     function projects()
  21.     {
  22.         $this->db();
  23.     }
  24.  
  25.     function start_timer($user_id, $project_id)
  26.     {
  27.         $sql = "INSERT INTO pmTimers (user_id, start_time, project_id) VALUES ('$user_id', '".get_gmt_time()."', '$project_id')";
  28.         return $this->query($sql);
  29.     }
  30.  
  31.     function stop_timer($user_id)
  32.     {
  33.         $sql = "DELETE FROM pmTimers WHERE user_id='$user_id'";
  34.         return $this->query($sql);
  35.     }
  36.  
  37.     function get_timer($user_id)
  38.     {
  39.         $sql = "SELECT start_time, project_id FROM pmTimers WHERE user_id='$user_id'";
  40.         $this->query($sql);
  41.         if($this->next_record())
  42.         {
  43.             return $this->Record;
  44.         }
  45.         return false;
  46.     }
  47.  
  48.     function add_project($user_id, $name, $description, $contact_id, $comments, $start_date, $end_date, $status, $responsible_user_id, $probability, $fee_id, $budget, $acl_read, $acl_write)
  49.     {
  50.         $project_id = $this->nextid("pmProjects");
  51.         if ($project_id > 0)
  52.         {
  53.             $sql = "INSERT INTO pmProjects (id, user_id, name, description, contact_id, acl_read, acl_write, comments, ctime, mtime, start_date, end_date, status, res_user_id, probability, fee_id, budget) ";
  54.             $sql .= "VALUES ('$project_id', '$user_id', '".smart_addslashes($name)."', '".smart_addslashes($description)."', '$contact_id', '$acl_read', '$acl_write', '".smart_addslashes($comments)."', '".get_gmt_time()."', '".get_gmt_time()."', '".smart_addslashes($start_date)."', '".smart_addslashes($end_date)."', '$status', '$responsible_user_id', '$probability', '$fee_id', ".smart_addslashes($budget).")";
  55.             $this->query($sql);
  56.             return $project_id;
  57.         }
  58.         return false;
  59.     }
  60.  
  61.     function update_project($project_id, $name, $description, $contact_id, $comments, $start_date, $end_date, $status, $responsible_user_id, $probability, $fee_id, $budget)
  62.     {
  63.         $sql = "UPDATE pmProjects SET name='".smart_addslashes($name)."', description='".smart_addslashes($description)."', comments='".smart_addslashes($comments)."', mtime='".get_gmt_time()."', contact_id='$contact_id', start_date='".smart_addslashes($start_date)."', end_date='".smart_addslashes($end_date)."', status='$status', res_user_id='$responsible_user_id', probability='$probability', fee_id='$fee_id', budget='".smart_addslashes($budget)."' WHERE id='$project_id'";
  64.         return $this->query($sql);
  65.     }
  66.  
  67.     function get_project($project_id)
  68.     {
  69.         $sql = "SELECT * FROM pmProjects WHERE id='$project_id'";
  70.         $this->query($sql);
  71.         if ($this->next_record())
  72.         {
  73.             return $this->Record;
  74.         }else
  75.         {
  76.             return false;
  77.         }
  78.     }
  79.  
  80.     function get_project_by_name($name)
  81.     {
  82.         $sql = "SELECT * FROM pmProjects WHERE name='".smart_addslashes($name)."'";
  83.         $this->query($sql);
  84.         if ($this->next_record())
  85.         {
  86.             return $this->Record;
  87.         }else
  88.         {
  89.             return false;
  90.         }
  91.     }
  92.  
  93.     function delete_project($project_id)
  94.     {
  95.         $sql = "DELETE FROM pmHours WHERE project_id='$project_id'";
  96.         if ($this->query($sql))
  97.         {
  98.             $sql = "DELETE FROM pmProjects WHERE id='$project_id'";
  99.             return $this->query($sql);
  100.         }else
  101.         {
  102.             return false;
  103.         }
  104.     }
  105.  
  106.     function get_projects($sort='name', $direction='ASC')
  107.     {
  108.         $sql = "SELECT * FROM pmProjects ORDER BY $sort $direction";
  109.         $this->query($sql);
  110.         return $this->num_rows();
  111.     }
  112.  
  113.     function get_authorized_projects($user_id, $sort='name', $direction='ASC', $start=0, $offset=0, $filter='', $contact_id=0)
  114.     {
  115.         $sql = "SELECT DISTINCT pmProjects.* FROM pmProjects ".
  116.                 "INNER JOIN acl ON (pmProjects.acl_read = acl.acl_id OR pmProjects.acl_write = acl.acl_id) ".
  117.                 "LEFT JOIN users_groups ON (acl.group_id = users_groups.group_id) WHERE ((".
  118.                 "users_groups.user_id = ".$user_id." AND acl.user_id = 0 ) OR (".
  119.                 "acl.group_id = 0 AND acl.user_id = ".$user_id."))";
  120.         if ($filter != '')
  121.         {
  122.             if ($filter == '0')
  123.             {
  124.                 $sql .= " AND status > -1 AND status < 100";
  125.             }else
  126.             {
  127.                 $sql .= " AND status='$filter'";
  128.             }
  129.         }
  130.  
  131.         if ($contact_id > 0)
  132.         {
  133.             $sql .= " AND contact_id='$contact_id' ";
  134.         }
  135.  
  136.         $sql .= " GROUP BY pmProjects.id ORDER BY $sort $direction";
  137.  
  138.         if ($offset > 0)
  139.         {
  140.             $sql .= " LIMIT $start, $offset";
  141.  
  142.             $sql2 = "SELECT DISTINCT pmProjects.id FROM pmProjects ".
  143.                         "INNER JOIN acl ON (pmProjects.acl_read = acl.acl_id OR pmProjects.acl_write = acl.acl_id) ".
  144.                         "LEFT JOIN users_groups ON (acl.group_id = users_groups.group_id) WHERE ((".
  145.                         "users_groups.user_id = ".$user_id." AND acl.user_id = 0 ) OR (".
  146.                         "acl.group_id = 0 AND acl.user_id = ".$user_id."))";
  147.             if ($filter != '')
  148.             {
  149.                 if ($filter == '0')
  150.                 {
  151.                     $sql2 .= " AND status > -1 AND status < 100";
  152.                 }else
  153.                 {
  154.                     $sql2 .= " AND status='$filter'";
  155.                 }
  156.             }
  157.             if ($contact_id > 0)
  158.             {
  159.                 $sql2 .= " AND contact_id='$contact_id'";
  160.             }
  161.  
  162.             $sql2 .= " GROUP BY pmProjects.id";
  163.             $this->query($sql2);
  164.  
  165.             $count = $this->num_rows();
  166.             if ($count > 0)
  167.             {
  168.                 $this->query($sql);
  169.             }
  170.             return $count;
  171.  
  172.         }else
  173.         {
  174.             $this->query($sql);
  175.             return $this->num_rows();
  176.         }
  177.     }
  178.  
  179.     function get_writable_projects($user_id)
  180.     {
  181.         $sql = "SELECT DISTINCT pmProjects.* FROM pmProjects, acl, users_groups WHERE (".
  182.                     "pmProjects.acl_write = acl.acl_id".
  183.                     ") AND ( ( acl.group_id = users_groups.group_id AND users_groups.user_id = ".$user_id." AND acl.user_id = 0 ) OR (".
  184.                     "acl.group_id = 0 AND acl.user_id = ".$user_id." ))";
  185.                 $this->query($sql);
  186.         return $this->num_rows();
  187.     }
  188.  
  189.     function get_user_projects($user_id)
  190.     {
  191.         $this->query("SELECT * FROM pmProjects WHERE user_id='$user_id'");
  192.         return $this->num_rows();
  193.     }
  194.  
  195.     function get_client_projects($contact_id)
  196.     {
  197.         $this->query("SELECT * FROM pmProjects WHERE contact_id='$contact_id'");
  198.         return $this->num_rows();
  199.     }
  200.  
  201.     function add_hours($project_id, $user_id, $start_time, $end_time, $break_time, $unit_value, $comments)
  202.     {
  203.         $id = $this->nextid("pmHours");
  204.         if ($id > 0)
  205.         {
  206.             $sql  = "INSERT INTO pmHours (id, user_id, project_id, start_time, end_time, break_time, unit_value, comments) ";
  207.             $sql .= "VALUES ('$id', '$user_id', '$project_id', '$start_time', '$end_time', '$break_time', '$unit_value', '".smart_addslashes($comments)."')";
  208.             return $this->query($sql);
  209.         }
  210.         return false;
  211.     }
  212.  
  213.     function get_working_hours($working_hours_id)
  214.     {
  215.         $sql = "SELECT * FROM pmHours WHERE id='$working_hours_id'";
  216.         $this->query($sql);
  217.         if ($this->next_record())
  218.         {
  219.             return $this->Record;
  220.         }
  221.         return false;
  222.     }
  223.  
  224.     function check_hours($user_id, $start_time, $end_time)
  225.     {
  226.         $sql = "SELECT * FROM pmHours WHERE user_id='$user_id' AND start_time <= '$start_time' AND end_time > '$start_time'";
  227.         $this->query($sql);
  228.         if ($this->next_record())
  229.         {
  230.             return false;
  231.         }
  232.  
  233.         $sql = "SELECT * FROM pmHours WHERE user_id='$user_id' AND start_time <= '$end_time' AND end_time > '$end_time'";
  234.         $this->query($sql);
  235.         if($this->next_record())
  236.         {
  237.             return false;
  238.         }
  239.         return true;
  240.     }
  241.  
  242.     function get_hours($start_time=0, $end_time=0, $project_id=0, $user_id=0, $contact_id=0)
  243.     {
  244.         if ($start_time == 0 && $end_time == 0)
  245.         {
  246.             $sql = "SELECT pmHours.*, pmFees.value AS fee_value, pmFees.time AS fee_time, pmProjects.contact_id, pmProjects.name, pmProjects.description FROM pmHours INNER JOIN pmProjects ON (pmProjects.id=pmHours.project_id) LEFT JOIN pmFees ON (pmFees.id=pmProjects.fee_id)";
  247.             $where = false;
  248.         }else
  249.         {
  250.             $sql = "SELECT pmHours.*, pmFees.value AS fee_value, pmFees.time AS fee_time, pmProjects.contact_id, pmProjects.name, pmProjects.description FROM pmHours INNER JOIN pmProjects ON (pmProjects.id=pmHours.project_id) LEFT JOIN pmFees ON (pmFees.id=pmProjects.fee_id) WHERE pmHours.start_time >= '$start_time' AND pmHours.start_time < '$end_time'";
  251.             $where = true;
  252.         }
  253.  
  254.         if ($project_id > 0)
  255.         {
  256.             if ($where)
  257.             {
  258.                 $sql .= " AND";
  259.             }else
  260.             {
  261.                 $sql .= " WHERE";
  262.                 $where = true;
  263.             }
  264.             $sql .= " pmHours.project_id='$project_id'";
  265.         }
  266.  
  267.         if ($user_id > 0)
  268.         {
  269.             if ($where)
  270.             {
  271.                 $sql .= " AND";
  272.             }else
  273.             {
  274.                 $sql .= " WHERE";
  275.                 $where = true;
  276.             }
  277.             $sql .= " pmHours.user_id='$user_id'";
  278.         }
  279.  
  280.         if ($contact_id > 0)
  281.         {
  282.             if ($where)
  283.             {
  284.                 $sql .= " AND";
  285.             }else
  286.             {
  287.                 $sql .= " WHERE";
  288.                 $where = true;
  289.             }
  290.             $sql .= " pmProjects.contact_id='$contact_id'";
  291.         }
  292.  
  293.  
  294.         $sql .= " ORDER BY pmHours.start_time ASC";
  295.  
  296.         $this->query($sql);
  297.         return $this->num_rows();
  298.     }
  299.  
  300.     function delete_hours($hours_id)
  301.     {
  302.         if ($hours_id > 0)
  303.         {
  304.             $sql = "DELETE FROM pmHours WHERE id='$hours_id'";
  305.             return $this->query($sql);
  306.         }else
  307.         {
  308.             return false;
  309.         }
  310.     }
  311.  
  312.     function get_project_hours($project_id, $start_time=0, $end_time=0)
  313.     {
  314.         if ($start_time == 0 && $end_time == 0)
  315.         {
  316.             $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";
  317.         }else
  318.         {
  319.             $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";
  320.         }
  321.         $this->query($sql);
  322.         return $this->num_rows();
  323.     }
  324.  
  325.     function get_user_hours($user_id, $start_time=0, $end_time=0)
  326.     {
  327.         if ($start_time == 0 && $end_time == 0)
  328.         {
  329.             $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";
  330.         }else
  331.         {
  332.             $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";
  333.         }
  334.         $this->query($sql);
  335.         return $this->num_rows();
  336.     }
  337.  
  338.     function get_fees()
  339.     {
  340.         $sql = "SELECT * FROM pmFees";
  341.         $this->query($sql);
  342.         return $this->num_rows();
  343.     }
  344.  
  345.     function get_fee($fee_id)
  346.     {
  347.         $sql = "SELECT * FROM pmFees WHERE id='$fee_id'";
  348.         $this->query($sql);
  349.         if ($this->next_record())
  350.         {
  351.             return $this->Record;
  352.         }else
  353.         {
  354.             return false;
  355.         }
  356.     }
  357.  
  358.     function add_fee($name, $value, $time)
  359.     {
  360.         $id = $this->nextid("pmFees");
  361.         if ($id > 0)
  362.         {
  363.             $sql = "INSERT INTO pmFees (id, name, value, time) VALUES ('$id', '".smart_addslashes($name)."', '".smart_addslashes($value)."', '".smart_addslashes($time)."')";
  364.             return $this->query($sql);
  365.         }
  366.         return false;
  367.     }
  368.  
  369.     function delete_fee($fee_id)
  370.     {
  371.         $sql = "DELETE FROM pmFees WHERE id='$fee_id'";
  372.         return $this->query($sql);
  373.     }
  374.  
  375.     function update_fee($fee_id, $name, $value, $time)
  376.     {
  377.         $sql = "UPDATE pmFees SET name='".smart_addslashes($name)."', value='".smart_addslashes($value)."', time='".smart_addslashes($time)."' WHERE id='$fee_id'";
  378.         return $this->query($sql);
  379.     }
  380.  
  381.     function delete_user($user_id)
  382.     {
  383.         $projects = new projects();
  384.         $this->get_user_projects($user_id);
  385.         while($this->next_record())
  386.         {
  387.             $projects->delete_project($user_id);
  388.         }
  389.     }
  390. }