Creating Gantt Chart in PHP

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Kuna

    Creating Gantt Chart in PHP

    Hi All,

    I am trying to create a gantt chart in php by getting data from
    database. I am using WindowsXp OS and having php-4 and my-sql DB. I
    have installed the JPGRAPH package to my system and including the
    jpgraph modules accordingly. I am able to create a gantt chart by
    hardcoding the datas but when I am trying to get the data from database
    then I am not able to get the chart it is showing errors. I think thre
    might be some problem in my code . So please rectify my code I have
    posted here.

    Thanks,
    Kuna


    <?php
    include ("C:/Program
    Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph.php");
    include ("C:/Program
    Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_gantt.p hp");

    // Basic Gantt graph
    $graph = new GanttGraph();
    $graph->title->Set("Project StartDate and EndDate");

    // Explicitely set the date range
    // (Autoscaling will of course also work)
    $graph->SetDateRange(' 2006-01-01','2007-12-31');


    // 1.5 line spacing to make more room
    $graph->SetVMarginFact or(1.5);

    // Setup some nonstandard colors
    $graph->SetMarginColor ('lightgreen@0. 8');
    $graph->SetBox(true,'y ellow:0.6',2);
    $graph->SetFrame(true, 'darkgreen',4);
    $graph->scale->divider->SetColor('yell ow:0.6');
    $graph->scale->dividerh->SetColor('yell ow:0.6');

    // Display month and year scale with the gridlines
    $graph->ShowHeaders(GA NTT_HMONTH | GANTT_HYEAR);
    $graph->scale->month->grid->SetColor('gray ');
    $graph->scale->month->grid->Show(true);
    $graph->scale->year->grid->SetColor('gray ');
    $graph->scale->year->grid->Show(true);

    // For the titles we also add a minimum width of 100 pixels for the
    Task name column
    $graph->scale->actinfo->SetColTitles (
    array('Note','T ask','Duration' ,'Start','Finis h'),array(30,10 0));
    $graph->scale->actinfo->SetBackgroundC olor('green:0.5 @0.5');
    $graph->scale->actinfo->SetFont(FF_ARI AL,FS_NORMAL,10 );
    $graph->scale->actinfo->vgrid->SetStyle('soli d');
    $graph->scale->actinfo->vgrid->SetColor('gray ');

    // Uncomment this to keep the columns but show no headers
    //$graph->scale->actinfo->Show(false);

    // Setup the icons we want to use
    $erricon = new IconImage(GICON _FOLDER,0.8);
    $startconicon = new IconImage(GICON _FOLDEROPEN,0.6 );
    $endconicon = new IconImage(GICON _TEXTIMPORTANT, 0.5);

    // Set the variables for the database access:
    $Host = "localhost" ;
    $User = "root";
    $Password = "";
    $DBName = "zend";
    $TableName = "tbl_projec ts";

    $Link = mysql_connect ($Host, $User, $Password);
    $Query = "SELECT * from $TableName ";
    $Result = mysql_db_query( $DBName, $Query);

    $j=0;
    while ($Row=mysql_fet ch_array($Resul t)) {

    $duration=$Row["Project_En d"]-$Row["Project_St art"];
    $data[] =
    array(array($j, array($erricon, $Row["ProjectNam e"],$duration,$Row["Project_St art"],$Row["Project_En d"])
    ,
    $Row["Project_St art"],$Row["Project_En d"],FF_ARIAL,FS_NO RMAL,8));
    ++$j;
    print $j;
    }

    // Create the bars and add them to the gantt chart
    for($i=0; $i<count($data) ; ++$i) {
    $bar = new
    GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3]);
    //if( count($data[$i])>4 )
    //$bar->title->SetFont($dat a[$i][4],$data[$i][5],$data[$i][6]);
    $bar->SetPattern(BAN D_RDIAG,"yellow ");
    $bar->SetFillColor(" gray");
    $bar->progress->Set(0.5);
    $bar->progress->SetPattern(GAN TT_SOLID,"darkg reen");

    //$bar->title->SetCSIMTarget( array('#1'.$i,' #2'.$i,'#3'.$i, '#4'.$i,'#5'.$i ),array('11'.$i ,'22'.$i,'33'.$ i));
    $graph->Add($bar);
    }

    // Output the chart
    $graph->Stroke();

    ?>

  • Janwillem Borleffs

    #2
    Re: Creating Gantt Chart in PHP

    Kuna schreef:
    I am able to create a gantt chart by
    hardcoding the datas but when I am trying to get the data from database
    then I am not able to get the chart it is showing errors.
    >
    What errors are you getting?


    JW

    Comment

    • Jerry Stuckle

      #3
      Re: Creating Gantt Chart in PHP

      Kuna wrote:
      Hi All,
      >
      I am trying to create a gantt chart in php by getting data from
      database. I am using WindowsXp OS and having php-4 and my-sql DB. I
      have installed the JPGRAPH package to my system and including the
      jpgraph modules accordingly. I am able to create a gantt chart by
      hardcoding the datas but when I am trying to get the data from database
      then I am not able to get the chart it is showing errors. I think thre
      might be some problem in my code . So please rectify my code I have
      posted here.
      >
      Thanks,
      Kuna
      >
      >
      <?php
      include ("C:/Program
      Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph.php");
      include ("C:/Program
      Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_gantt.p hp");
      >
      // Basic Gantt graph
      $graph = new GanttGraph();
      $graph->title->Set("Project StartDate and EndDate");
      >
      // Explicitely set the date range
      // (Autoscaling will of course also work)
      $graph->SetDateRange(' 2006-01-01','2007-12-31');
      >
      >
      // 1.5 line spacing to make more room
      $graph->SetVMarginFact or(1.5);
      >
      // Setup some nonstandard colors
      $graph->SetMarginColor ('lightgreen@0. 8');
      $graph->SetBox(true,'y ellow:0.6',2);
      $graph->SetFrame(true, 'darkgreen',4);
      $graph->scale->divider->SetColor('yell ow:0.6');
      $graph->scale->dividerh->SetColor('yell ow:0.6');
      >
      // Display month and year scale with the gridlines
      $graph->ShowHeaders(GA NTT_HMONTH | GANTT_HYEAR);
      $graph->scale->month->grid->SetColor('gray ');
      $graph->scale->month->grid->Show(true);
      $graph->scale->year->grid->SetColor('gray ');
      $graph->scale->year->grid->Show(true);
      >
      // For the titles we also add a minimum width of 100 pixels for the
      Task name column
      $graph->scale->actinfo->SetColTitles (
      array('Note','T ask','Duration' ,'Start','Finis h'),array(30,10 0));
      $graph->scale->actinfo->SetBackgroundC olor('green:0.5 @0.5');
      $graph->scale->actinfo->SetFont(FF_ARI AL,FS_NORMAL,10 );
      $graph->scale->actinfo->vgrid->SetStyle('soli d');
      $graph->scale->actinfo->vgrid->SetColor('gray ');
      >
      // Uncomment this to keep the columns but show no headers
      //$graph->scale->actinfo->Show(false);
      >
      // Setup the icons we want to use
      $erricon = new IconImage(GICON _FOLDER,0.8);
      $startconicon = new IconImage(GICON _FOLDEROPEN,0.6 );
      $endconicon = new IconImage(GICON _TEXTIMPORTANT, 0.5);
      >
      // Set the variables for the database access:
      $Host = "localhost" ;
      $User = "root";
      $Password = "";
      $DBName = "zend";
      $TableName = "tbl_projec ts";
      >
      $Link = mysql_connect ($Host, $User, $Password);
      $Query = "SELECT * from $TableName ";
      $Result = mysql_db_query( $DBName, $Query);
      >
      $j=0;
      while ($Row=mysql_fet ch_array($Resul t)) {
      >
      $duration=$Row["Project_En d"]-$Row["Project_St art"];
      $data[] =
      array(array($j, array($erricon, $Row["ProjectNam e"],$duration,$Row["Project_St art"],$Row["Project_En d"])
      ,
      $Row["Project_St art"],$Row["Project_En d"],FF_ARIAL,FS_NO RMAL,8));
      ++$j;
      print $j;
      }
      >
      // Create the bars and add them to the gantt chart
      for($i=0; $i<count($data) ; ++$i) {
      $bar = new
      GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3]);
      //if( count($data[$i])>4 )
      //$bar->title->SetFont($dat a[$i][4],$data[$i][5],$data[$i][6]);
      $bar->SetPattern(BAN D_RDIAG,"yellow ");
      $bar->SetFillColor(" gray");
      $bar->progress->Set(0.5);
      $bar->progress->SetPattern(GAN TT_SOLID,"darkg reen");
      >
      //$bar->title->SetCSIMTarget( array('#1'.$i,' #2'.$i,'#3'.$i, '#4'.$i,'#5'.$i ),array('11'.$i ,'22'.$i,'33'.$ i));
      $graph->Add($bar);
      }
      >
      // Output the chart
      $graph->Stroke();
      >
      ?>
      >
      You forgot three important parts here:

      1. What do you expect to get?
      2. What do you get? (No output because of the errors?)
      3. Exactly what errors are you getting?

      Also, have you checked the data you got from the database to ensure it
      is right (reasonable values, correct type, etc.)?

      --
      =============== ===
      Remove the "x" from my email address
      Jerry Stuckle
      JDS Computer Training Corp.
      jstucklex@attgl obal.net
      =============== ===

      Comment

      • Kuna

        #4
        Re: Creating Gantt Chart in PHP

        You forgot three important parts here:
        >
        1. What do you expect to get?
        2. What do you get? (No output because of the errors?)
        3. Exactly what errors are you getting?
        >
        Also, have you checked the data you got from the database to ensure it
        is right (reasonable values, correct type, etc.)?
        Thanks for replying me and I am really sorry I forgot to post the error
        message. But now I am able to get into some solutions but the problem
        is that still I am getting an error. I have populated the database with
        all fields. I am again posting the new code and this is the erro
        message I am getting. So please help me its urgent and important for
        me. I will be grateful to you.

        <?php
        // Gantt dyaminc from MySQL example
        include ("C:/Program
        Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph.php");
        include ("C:/Program
        Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_gantt.p hp");
        include ("C:/Program
        Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_date.ph p");

        $host="localhos t";
        $user="root";
        $password="";
        $db="zend";

        mysql_connect($ host,$user,$pas sword) or die("Could not connect: " .
        mysql_error());
        mysql_select_db ($db) or die("Could not select database: " .
        mysql_error());

        $tasks = mysql_query("SE LECT
        task_position,
        task_type_value ,
        task_name,
        start_date,
        end_date,
        DATE_FORMAT(sta rt_date, '%e/%m') as fstart_date,
        DATE_FORMAT(end _date, '%e/%m') as fend_date,
        CONCAT((end_dat e - start_date), ' ','days') as duration
        FROM tasks, task_type
        WHERE tasks.task_type _id=task_type.t ask_type_id");

        if ($row = mysql_fetch_arr ay($tasks)) {
        do {
        $position[] = $row["task_posit ion"];
        $type[] = $row["task_type_valu e"];
        $name[] = $row["task_name"];
        $start_date[] = $row["start_date "];
        $end_date[] = $row["end_date"];
        $fstart_date[] = $row["fstart_dat e"];
        $fend_date[] = $row["fend_date"];
        $duration[] = $row["duration"];
        }while($row = mysql_fetch_arr ay($tasks));
        }
        $lines = mysql_num_rows( $tasks);
        error_reporting (E_ALL);
        $graph = new GanttGraph(800, 640);
        $graph->SetFrame(true, 'white',.1);
        $graph->SetMarginColor ('white:1.7');
        //$graph->SetShadow();
        $graph->SetColor('whit e');
        //$graph->SetBackgroundG radient('darkbl ue','white',GRA D_HOR,BGRAD_MAR GIN);

        //$graph->title->SetColor('whit e');
        $graph->title->Set("SimpleGan tt");
        $graph->title->SetFont(FF_ARI AL,FS_BOLD,16);

        $graph->ShowHeaders(GA NTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
        $graph->scale->week->SetStyle(WEEKS TYLE_FIRSTDAY);
        $graph->scale->week->SetFont(FF_ARI AL, FS_NORMAL, 8);
        $graph->scale->month->SetStyle(MONTH STYLE_SHORTNAME YEAR2);
        $graph->scale->month->SetFont(FF_ARI AL, FS_BOLD, 8);

        $graph->scale->actinfo->SetColTitles (array('ID','Ta sks',
        'Duration','Sta rt','End'),arra y(0,0));
        $graph->scale->actinfo->SetFont(FF_ARI AL, FS_ITALIC, 8);

        for($i=0; $i< $lines; ++$i) {
        $activity = new GanttBar ($position[$i], array($position[$i],
        $name[$i], $duration[$i],$fstart_date[$i],$fend_date[$i]),
        $start_date[$i], $end_date[$i]);
        // $activity = array($position[$i], $type[$i], $name[$i],
        $start_date[$i], $end_date[$i]);
        $activity ->SetPattern(BAN D_RDIAG,"yellow ");
        $activity ->SetFillColor(" red");
        $activity->title->SetFont(FF_ARI AL, FS_NORMAL, 8);
        $graph->Add($activity) ;
        // $graph->CreateSimple($ activity);
        }
        $graph->Stroke();
        ?>

        Here is the Error Message :-
        "Cannot autoscale Gantt chart. No dated activities exist.
        [GetBarMinMax() start >= n]"

        I will be waiting for your reply :)

        Thanks and Regards,
        Kuna

        Comment

        • Jerry Stuckle

          #5
          Re: Creating Gantt Chart in PHP

          Kuna wrote:
          >>You forgot three important parts here:
          >>
          > 1. What do you expect to get?
          > 2. What do you get? (No output because of the errors?)
          > 3. Exactly what errors are you getting?
          >>
          >>Also, have you checked the data you got from the database to ensure it
          >>is right (reasonable values, correct type, etc.)?
          >
          >
          Thanks for replying me and I am really sorry I forgot to post the error
          message. But now I am able to get into some solutions but the problem
          is that still I am getting an error. I have populated the database with
          all fields. I am again posting the new code and this is the erro
          message I am getting. So please help me its urgent and important for
          me. I will be grateful to you.
          >
          <?php
          // Gantt dyaminc from MySQL example
          include ("C:/Program
          Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph.php");
          include ("C:/Program
          Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_gantt.p hp");
          include ("C:/Program
          Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_date.ph p");
          >
          $host="localhos t";
          $user="root";
          $password="";
          $db="zend";
          >
          mysql_connect($ host,$user,$pas sword) or die("Could not connect: " .
          mysql_error());
          mysql_select_db ($db) or die("Could not select database: " .
          mysql_error());
          >
          $tasks = mysql_query("SE LECT
          task_position,
          task_type_value ,
          task_name,
          start_date,
          end_date,
          DATE_FORMAT(sta rt_date, '%e/%m') as fstart_date,
          DATE_FORMAT(end _date, '%e/%m') as fend_date,
          CONCAT((end_dat e - start_date), ' ','days') as duration
          FROM tasks, task_type
          WHERE tasks.task_type _id=task_type.t ask_type_id");
          >
          if ($row = mysql_fetch_arr ay($tasks)) {
          do {
          $position[] = $row["task_posit ion"];
          $type[] = $row["task_type_valu e"];
          $name[] = $row["task_name"];
          $start_date[] = $row["start_date "];
          $end_date[] = $row["end_date"];
          $fstart_date[] = $row["fstart_dat e"];
          $fend_date[] = $row["fend_date"];
          $duration[] = $row["duration"];
          }while($row = mysql_fetch_arr ay($tasks));
          }
          $lines = mysql_num_rows( $tasks);
          error_reporting (E_ALL);
          $graph = new GanttGraph(800, 640);
          $graph->SetFrame(true, 'white',.1);
          $graph->SetMarginColor ('white:1.7');
          //$graph->SetShadow();
          $graph->SetColor('whit e');
          //$graph->SetBackgroundG radient('darkbl ue','white',GRA D_HOR,BGRAD_MAR GIN);
          >
          //$graph->title->SetColor('whit e');
          $graph->title->Set("SimpleGan tt");
          $graph->title->SetFont(FF_ARI AL,FS_BOLD,16);
          >
          $graph->ShowHeaders(GA NTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
          $graph->scale->week->SetStyle(WEEKS TYLE_FIRSTDAY);
          $graph->scale->week->SetFont(FF_ARI AL, FS_NORMAL, 8);
          $graph->scale->month->SetStyle(MONTH STYLE_SHORTNAME YEAR2);
          $graph->scale->month->SetFont(FF_ARI AL, FS_BOLD, 8);
          >
          $graph->scale->actinfo->SetColTitles (array('ID','Ta sks',
          'Duration','Sta rt','End'),arra y(0,0));
          $graph->scale->actinfo->SetFont(FF_ARI AL, FS_ITALIC, 8);
          >
          for($i=0; $i< $lines; ++$i) {
          $activity = new GanttBar ($position[$i], array($position[$i],
          $name[$i], $duration[$i],$fstart_date[$i],$fend_date[$i]),
          $start_date[$i], $end_date[$i]);
          // $activity = array($position[$i], $type[$i], $name[$i],
          $start_date[$i], $end_date[$i]);
          $activity ->SetPattern(BAN D_RDIAG,"yellow ");
          $activity ->SetFillColor(" red");
          $activity->title->SetFont(FF_ARI AL, FS_NORMAL, 8);
          $graph->Add($activity) ;
          // $graph->CreateSimple($ activity);
          }
          $graph->Stroke();
          ?>
          >
          Here is the Error Message :-
          "Cannot autoscale Gantt chart. No dated activities exist.
          [GetBarMinMax() start >= n]"
          >
          I will be waiting for your reply :)
          >
          Thanks and Regards,
          Kuna
          >
          OK, I'm not familiar with this specific package, but I looked at the
          documentation.

          The first thing which comes to mind is are your start and end dates in
          the correct format? Have you tried echoing them to the screen to see
          what's in them? According to the doc, they should be in the format
          '2006-11-07' as a string. That's the default date format for MySQL in
          my system, but yours may be different.

          Also, I don't like your line:

          $activity = new GanttBar ($position[$i], array($position[$i],
          $name[$i], $duration[$i],$fstart_date[$i],$fend_date[$i]),
          $start_date[$i], $end_date[$i]);

          The second parameter according to the doc should be a text label; you're
          passing it an array. That may be causing problems. But since you are
          getting a chart with hardcoded data, it should be OK.

          I'd recommend echoing all of your parameters to the screen to see if
          they are really what you expect.


          --
          =============== ===
          Remove the "x" from my email address
          Jerry Stuckle
          JDS Computer Training Corp.
          jstucklex@attgl obal.net
          =============== ===

          Comment

          • Kuna

            #6
            Re: Creating Gantt Chart in PHP

            Thanks Jerry,

            Thanks a lot for helping I am able to solve it. Actually the problem is
            that I have not inserted data in database I thought that first of all
            it will show me the blank graph and after entering data it will show
            the gantt charts accordingly but I was wrong I need to insert data in
            the database so finally I am able to solve it. Thanks again for
            cooperating me a lot.

            Kuna. :)

            Comment

            Working...