forked from extern/egroupware
305 lines
6.6 KiB
PHP
305 lines
6.6 KiB
PHP
|
<?PHP
|
||
|
/**
|
||
|
*
|
||
|
* class for creating matrix like timeframes for items
|
||
|
*
|
||
|
* this matrix is having the days of actual month in
|
||
|
* the x-axis and the items, which could be projects,
|
||
|
* in the y-axis.
|
||
|
* You will see a top-down view of all items and their
|
||
|
* associated timeframes. You probably saw this in
|
||
|
* projectmanagement apps
|
||
|
*
|
||
|
* @author Marc Logemann [loge@mail.com]
|
||
|
* @version 0.9
|
||
|
*
|
||
|
*/
|
||
|
class matrixview {
|
||
|
|
||
|
var $sumdays = 0;
|
||
|
|
||
|
var $month = 0;
|
||
|
var $monthname = "";
|
||
|
var $year = 0;
|
||
|
var $day = 0;
|
||
|
|
||
|
var $items_content = array();
|
||
|
var $items_count = 0;
|
||
|
|
||
|
var $arr_second_dim = 0;
|
||
|
var $image1pix = "images/pix.gif";
|
||
|
|
||
|
var $color_headerfield = "#FFFF33";
|
||
|
var $color_emptyfield = "#CCCCCC";
|
||
|
|
||
|
var $selection = 1;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* construtor: graphview class
|
||
|
*
|
||
|
* constructor waits for the desired month in
|
||
|
* integer presentation and the desired year also
|
||
|
* in integer presentation 4 digits (ex. 2001)
|
||
|
*
|
||
|
* @param int month (for example: 02)
|
||
|
* @param int year (for example: 2001)
|
||
|
*
|
||
|
*/
|
||
|
function matrixview ($month_int = 0, $year_int = 0)
|
||
|
{
|
||
|
for($i;$i<32;$i++)
|
||
|
{
|
||
|
if(checkdate($month_int,$i,$year_int)) $days++;
|
||
|
}
|
||
|
|
||
|
$this->month = $month_int;
|
||
|
$this->year = $year_int;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* set a Period for a specified item
|
||
|
*
|
||
|
* setting a period for an element means to define
|
||
|
* a fromDate and and a toDate together with the
|
||
|
* item itself. This will store a timeframe associated
|
||
|
* with an item for later usage
|
||
|
*
|
||
|
* @param string item for the timeframe
|
||
|
* @param date fromdate in format yyyymmdd
|
||
|
* @param date todate in format yyyymmdd
|
||
|
*
|
||
|
* @return boolean false if item cannot be saved
|
||
|
* otherwise true
|
||
|
*/
|
||
|
|
||
|
function setPeriod ($item, $fromdate, $todate, $color="#990033")
|
||
|
{
|
||
|
$fyear = substr($fromdate,0,4);
|
||
|
$fmonth = substr($fromdate,4,2);
|
||
|
$fday = substr($fromdate,6,2);
|
||
|
|
||
|
$tyear = substr($todate,0,4);
|
||
|
$tmonth = substr($todate,4,2);
|
||
|
$tday = substr($todate,6,2);
|
||
|
|
||
|
if(mktime(0,0,0, $tmonth, $tday, $tyear) < mktime(0,0,0, $this->month+1,0,$this->year))
|
||
|
$this->day = $tday;
|
||
|
else
|
||
|
{
|
||
|
$dinfo = getdate(mktime(0,0,0, $this->month+1,0,$this->year));
|
||
|
$this->day = $dinfo[mday];
|
||
|
}
|
||
|
|
||
|
$go = 1;
|
||
|
$i = 0;
|
||
|
$z = 0;
|
||
|
|
||
|
while($go==1)
|
||
|
{
|
||
|
// calculates fromdate
|
||
|
// echo date("d/m/Y", mktime(0,0,0, $fmonth, $fday+$i, $fyear)); echo "<br>";
|
||
|
$datinfo = getdate(mktime(0,0,0, $fmonth, $fday+$i, $fyear));
|
||
|
|
||
|
if($datinfo["mon"]==$this->month
|
||
|
&& $datinfo["year"]==$this->year
|
||
|
&& $datinfo["mday"]<=$this->day)
|
||
|
{
|
||
|
$t = $datinfo["mday"];
|
||
|
$this->items_content[$this->items_count][$t] = "x";
|
||
|
}
|
||
|
|
||
|
if (mktime(0,0,0, $fmonth, $fday+$i, $fyear) >=
|
||
|
mktime(0,0,0, $this->month+1, 0, $this->year)
|
||
|
||
|
||
|
mktime(0,0,0, $fmonth, $fday+$i, $fyear) >=
|
||
|
mktime(0,0,0, $tmonth, $tday, $tyear)) $go = 0
|
||
|
;
|
||
|
$i++;
|
||
|
}
|
||
|
|
||
|
$this->items_content[$this->items_count][0] = "$item;$color";
|
||
|
// increase number of items in two-dimensional array
|
||
|
$this->items_count++;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* sets the color for empty dayfields
|
||
|
*
|
||
|
* @param string color in hexadecimal (ex. "#336699")
|
||
|
*/
|
||
|
|
||
|
function setEmptyFieldColor ($color)
|
||
|
{
|
||
|
$this->color_emptyfield=$color;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* sets the color for calendar day fields
|
||
|
*
|
||
|
* @param string color in hexadecimal (ex. "#336699")
|
||
|
*/
|
||
|
|
||
|
function setHeaderFieldColor ($color)
|
||
|
{
|
||
|
$this->color_headerfield=$color;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* sets a new path for 1pixel (pix.gif) gif needed for the table
|
||
|
* default is set actual script dir + /images
|
||
|
*
|
||
|
* @param string path and name to 1pixel gif
|
||
|
*/
|
||
|
|
||
|
function set1PixelGif ($filepath)
|
||
|
{
|
||
|
$this->image1pix=$filepath;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* disable selection of new timeframe
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
function diableSelection ()
|
||
|
{
|
||
|
$this->selection=0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* return the html code for the matrix
|
||
|
*
|
||
|
* will return the complete html code for the matrix.
|
||
|
* In the calling program you can do some other
|
||
|
* operations on it, because it wont be echoed directly
|
||
|
*
|
||
|
* @return string html code for the matrix
|
||
|
*/
|
||
|
|
||
|
function out ()
|
||
|
{
|
||
|
// get days of desired month (month submitted in constructor)
|
||
|
$in = getdate(mktime(0,0,0, $this->month+1,0,$this->year));
|
||
|
$this->sumdays = $in[mday];
|
||
|
$this->monthname = $in[month];
|
||
|
|
||
|
$this->out_monthyear();
|
||
|
|
||
|
echo "<div align=\"center\">\n";
|
||
|
echo "<table border=0>\n";
|
||
|
$this->out_header();
|
||
|
|
||
|
// loop through number of items
|
||
|
for($z=0;$z<$this->items_count;$z++)
|
||
|
{
|
||
|
// seperate color and name from first array element
|
||
|
$itemname = strtok($this->items_content[$z][0],";");
|
||
|
$itemcolor = strtok(";");
|
||
|
|
||
|
echo "<tr>\n";
|
||
|
echo "<td>" . $itemname . "</td>\n";
|
||
|
// loop through days of desired month
|
||
|
for($r=1;$r<$this->sumdays+1;$r++)
|
||
|
{
|
||
|
if($this->items_content[$z][$r]=="x") $color = $itemcolor; else $color = $this->color_emptyfield;
|
||
|
echo "<td bgcolor=\"$color\"> </td>\n";
|
||
|
}
|
||
|
echo "</tr>\n";
|
||
|
$this->out_ruler();
|
||
|
}
|
||
|
echo "</table>";
|
||
|
echo "</div>\n";
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* private class for out method
|
||
|
*
|
||
|
* should not be used from external
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
function out_header ()
|
||
|
{
|
||
|
echo "<tr>\n";
|
||
|
echo "<td height=\"1\" colspan=\""; echo $this->sumdays+1; echo "\" bgcolor=black><img src=\"" . $this->image1pix . "\"></td>\n";
|
||
|
echo "</tr>\n";
|
||
|
echo "<tr>\n";
|
||
|
echo "<td>Projectname</td>\n";
|
||
|
for($i=1;$i<$this->sumdays+1;$i++)
|
||
|
{
|
||
|
echo "<td bgcolor=\""; echo $this->color_headerfield; echo "\">" . sprintf("%02d",$i) . "</td>\n";
|
||
|
}
|
||
|
echo "</tr>\n";
|
||
|
|
||
|
echo "<tr>\n";
|
||
|
echo "<td height=\"1\" colspan=\""; echo $this->sumdays+1; echo "\" bgcolor=black><img src=\"" . $this->image1pix ."\"></td>\n";
|
||
|
echo "</tr>\n";
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* private class for out method
|
||
|
*
|
||
|
* should not be used from external
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
function out_ruler ()
|
||
|
{
|
||
|
echo "<tr>\n";
|
||
|
echo "<td colspan=\""; echo $this->sumdays+1; echo "\" bgcolor=\"#999999\"><img src=\"" . $this->image1pix ."\"></td>\n";
|
||
|
echo "</tr>\n";
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* private class for out method
|
||
|
*
|
||
|
* should not be used from external
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
function out_monthyear ()
|
||
|
{
|
||
|
global $phpgw;
|
||
|
|
||
|
echo "<form action=\"" . $phpgw->link() . "\" method=\"post\">\n";
|
||
|
echo "<table border=0 width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">";
|
||
|
echo "<tr>\n";
|
||
|
echo "<td align=\"center\"><h2>"; echo $this->monthname; echo " "; echo $this->year; echo "</h2></td>\n";
|
||
|
|
||
|
if($this->selection==1)
|
||
|
{
|
||
|
echo "<td align=\"right\">Month: <select name=\"month\"";
|
||
|
for($i=0;$i<13;$i++)
|
||
|
{
|
||
|
if($this->month==$i) $sel = " selected"; else unset($sel);
|
||
|
echo "<option value=\"$i\"$sel>$i</option>"; }
|
||
|
echo "</select>";
|
||
|
echo "Year: <select name=\"year\"";
|
||
|
for($i = date("Y") -2;$i<date("Y")+5;$i++)
|
||
|
{
|
||
|
if($this->year==$i) $sel = " selected"; else unset($sel);
|
||
|
echo "<option value=\"$i\"$sel>$i</option>";
|
||
|
}
|
||
|
echo "</select>";
|
||
|
echo " <input type=\"submit\" name=\"selection\" value=\"Select\"> ";
|
||
|
echo "</td>\n";
|
||
|
}
|
||
|
|
||
|
echo "</tr>\n";
|
||
|
echo "</table>\n";
|
||
|
echo "</form>\n";
|
||
|
}
|
||
|
|
||
|
}
|
||
|
?>
|