File: /home/imensosw/www/imenso.co/timesheet/api/project.php
<?php
ob_start();
require_once '../lib/lib.inc.php';
logit(INFO, 'starting project');
$resp = new stdClass();
$resp->error = false;
$resp->msg = [];
if(!dbConnect()){
$resp->error = "Database error";
}
$project = new Project();
//logit(INFO, "REQUEST: " . print_r($_REQUEST,1));
switch ($_REQUEST["action"]) {
case "getproject":
if($project->checkAuth()){
$project->makeProject();
$project->getProject();
}
break;
case "saveproject":
if($project->checkAuth()){
$project->makeProject();
if($project->checkProject())
{
$project->saveProject();
}
}
break;
case "deleteproject":
if($project->checkAuth()){
$project->makeProject();
$project->deleteProject();
}
break;
default:
$project->resp->error = "No command found";
logit(INFO, "GOT TO DEFAULT");
} //-es
if ($resp->error) {
error();
} else {
respond();
}
class Project
{
public function __construct()
{
global $resp;
$this->resp = &$resp;
$this->init();
} //- ef
private function init() {
} //- init
public function checkAuth()
{
if(tokenTimeout($_REQUEST["token"]) || !isAdmin($_REQUEST["token"]))
{
$this->resp->error = true;
$this->resp->msg = "timeout out";
return false;
}
return true;
}
public function getProject(){
//access_level NOT IN(3) and
global $config;
$resultsperpage=$config['resultsperpage'];
$search_title=$this->project['search_title'];
$page=$this->project['page'];
$sorting=$this->project['sorting'];
$sortingby=$this->project['sortingby'];
if($sorting=="")
{
$sorting="";
$sortingby="";
}
else
{
$sorting="p.".$sorting;
}
$offset = $resultsperpage * ($page-1) ;
$in = array (
":projectname" => "%".$this->project['search_title']."%"
// ":projectdesciption" => "%".$this->project['search_title']."%"
);
$sql = "SELECT SQL_CALC_FOUND_ROWS p.id,p.project_name,SEC_TO_TIME( SUM( TIME_TO_SEC( th.time ) ) ) AS total_time ,Date_Format(p.start_date,'%d %b %Y') start_date,p.project_desc FROM projects p left join timesheet_history th on th.project_id=p.id where p.project_name like :projectname group by p.id order by $sorting $sortingby limit $offset,$resultsperpage";
if ($rc=dbPdoQuery($sql,$in)) {
while ($row = dbPdoFetch($rc)) {
$this->resp->project[] = $row;
}
$this->paginationResult($this->project['page']);
} else {
logit(WARN,"Did not get Project List");
$this->resp->msg[] = "not found.";
}
} //- getProject
public function makeProject()
{
$this->project=$_REQUEST["project"];
}
public function checkProject()
{
if(!trim(strlen($this->project['projectname'])))
{
$this->resp->msg[] = 'Please enter project name';
}
if(!trim(strlen($this->project['projectstartdate'])))
{
$this->resp->msg[] = 'Please enter start date';
}
if(!trim(strlen($this->project['projectdesciption'])))
{
$this->resp->msg[] = 'Please enter description';
}
if(count($this->resp->msg)>0)
{
return false;
}
return true;
}
public function saveProject()
{
if(is_numeric($this->project['id']) AND $this->project['id'] > 0)
{
$this->updateProject();
}
else
{
$in = array (
":projectname" => $this->project['projectname'],
":projectstartdate" => $this->project['projectstartdate'],
":projectdesciption" => $this->project['projectdesciption'],
":created_at"=>date('Y-m-d H:i:s'),
":updated_at"=>date('Y-m-d H:i:s')
);
$in1 = array (
":projectname" => $this->project['projectname']
);
$sql = "SELECT * FROM projects where project_name=:projectname";
if ($rc=dbPdoQuery($sql,$in1) AND $row = dbPdoFetchall($rc)) {
logit(INFO,"Project already exist");
$this->resp->msg[] = "Project already exist.";
}
else{
$sql="INSERT INTO projects (project_name,start_date,project_desc,created_at,updated_at) VALUES(:projectname,:projectstartdate,:projectdesciption,:created_at,:updated_at)";
if ($rc = dbPdoQuery($sql,$in)) {
logit(INFO, "SQL ", $sql);
logit(INFO,"Inserted project with ID ");
} else {
logit(WARN," DB Error: $sql in ".__FILE__." on line: ".__LINE__);
error("Database error [db03]");
}
}
}
} //- saveProject
public function updateProject()
{
$in = array (
":projectname" => $this->project['projectname'],
":projectstartdate" => $this->project['projectstartdate'],
":projectdesciption" => $this->project['projectdesciption'],
":id" => $this->project['id'],
":updated_at"=>date('Y-m-d H:i:s'),
);
$in1 = array (
":id" => $this->project['id'],
);
$sql="UPDATE projects SET project_name=:projectname, start_date=:projectstartdate ,project_desc =:projectdesciption, updated_at=:updated_at WHERE id=:id";
$rc = dbPdoQuery($sql,$in);
logit(INFO, "The project is ", $in);
if($rc = dbPdoQuery($sql,$in)) {
logit(INFO,"Updated project with ID " . $this->project['id']);
} else {
logit(WARN," DB Error: $sql in ".__FILE__." on line: ".__LINE__);
error("Database error [db02]");
}
}//- editProject
public function deleteProject()
{
$in = array (
":id" => $this->project['id'],
);
$sql = "SELECT * FROM projects where id=:id";
if ($rc=dbPdoQuery($sql,$in) AND $row = dbPdoFetch($rc)) {
$sql="DELETE FROM projects WHERE id=:id";
$rc = dbPdoQuery($sql,$in);
logit(INFO,"deleted project with ID " . $this->project['id']);
}
else {
logit(WARN," DB Error: $sql in ".__FILE__." on line: ".__LINE__);
error("Database error [db02]");
}
}//- deleteProject
public function paginationResult($page)
{
global $config;
$sql_count="SELECT FOUND_ROWS() as total";
if ($rc=dbPdoQuery($sql_count)) {
if(count($row = dbPdoFetch($rc))>0)
{
$total=ceil($row["total"] /$config['resultsperpage']);
$this->resp->paginationresult=array("total"=>$total,"page"=>$page);
}
}
}
}
?>