* * 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 * * * * Copyright (C) 2000, 2001 Marc Logemann * * -------------------------------------------------------------------------* * This library is part of phpGroupWare (http://www.phpgroupware.org) * * This library is free software; you can redistribute it and/or modify it * * under the terms of the GNU Lesser General Public License as published by * * the Free Software Foundation; either version 2.1 of the License, * * or any later version. * * This library is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * * along with this library; if not, write to the Free Software Foundation, * * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * \**************************************************************************/ /* $Id$ */ 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) { global $phpgw; for($i;$i<32;$i++) { if(checkdate($month_int,$i,$year_int)) $days++; } $this->month = $month_int; $this->year = $year_int; $this->set1PixelGif($phpgw->common->get_image_path('todo').'/pix.gif'); } /** * * 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 "
"; $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 "
\n"; echo "\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 "\n"; echo "\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 "\n"; } echo "\n"; $this->out_ruler(); } echo "
" . $itemname . " 
"; echo "
\n"; } /** * * private class for out method * * should not be used from external * */ function out_header () { echo "\n"; echo "sumdays+1; echo "\" bgcolor=black>image1pix . "\">\n"; echo "\n"; echo "\n"; echo "Projectname\n"; for($i=1;$i<$this->sumdays+1;$i++) { echo "color_headerfield; echo "\">" . sprintf("%02d",$i) . "\n"; } echo "\n"; echo "\n"; echo "sumdays+1; echo "\" bgcolor=black>image1pix ."\">\n"; echo "\n"; } /** * * private class for out method * * should not be used from external * */ function out_ruler () { echo "\n"; echo "sumdays+1; echo "\" bgcolor=\"#999999\">image1pix ."\">\n"; echo "\n"; } /** * * private class for out method * * should not be used from external * */ function out_monthyear () { global $phpgw; echo "
link() . "\" method=\"post\">\n"; echo ""; echo "\n"; echo "\n"; if($this->selection==1) { echo "\n"; } echo "\n"; echo "

"; echo $this->monthname; echo " "; echo $this->year; echo "

Month: "; echo "Year: "; echo "  "; echo "
\n"; echo "
\n"; } } ?>