<?php /**************************************************************************\ * phpGroupWare API - Matrix View Generator * * This file written by Marc Logemann <loge@phpgroupware.org> * * 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 the phpGroupWare API * * http://www.phpgroupware.org/api * * ------------------------------------------------------------------------ * * 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 "<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; $this->items_color[$this->items_count] = $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($form_link) { // 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($form_link); 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 = $this->items_content[$z][0]; $itemcolor = $this->items_color[$z]; 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>' . lang('Title') . '</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($form_link) { global $phpgw; echo '<form action="' . $form_link . '" method="post">' . "\n"; echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">' . "\n"; echo '<tr>' . "\n"; echo '<td align="center"><h2>'; echo lang($this->monthname); echo ' '; echo $this->year; echo '</h2></td>' . "\n"; if($this->selection == 1) { echo '<td align="right">' . "\n"; echo '<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>' . "\n"; echo '<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>' . "\n"; echo ' <input type="submit" name="selection" value="' . lang('Filter') . '"> '; echo '</td>' . "\n"; } echo '</tr>' . "\n"; echo '</table>' . "\n"; echo '</form>' . "\n"; } } ?>