arrayValores = $arrayValores; $this->datainicio = $dataInicio; $this->dataAtual = $dataInicio; $this->legenda = $legenda; $this->titulo = $titulo; $this->mostraWeekend = $mostraWeekend; $this->timeDataAtual = strtotime( $this->dataAtual[2] . "/" . $this->dataAtual[1] . "/" . $this->dataAtual[0] ); if( $dataFim ) { $this->datafim = $dataFim; } else { $this->datafim[0] = date( "d", time() ); $this->datafim[1] = date( "m", time() ); $this->datafim[2] = date( "Y", time() ); } foreach ( $this->arrayValores AS $ano => $anoValue ) { foreach ( $anoValue AS $mes => $mesValue ) { foreach ( $mesValue AS $dia => $diaValue ) { foreach ( $diaValue AS $key => $valor ) { if( $valor > $this->maxVal ) { $this->maxVal = $valor; } } } } } $this->maxVal = 100; } function addZero( $valor ) { if( $valor < 10 ) { return "0" . $valor; } return $valor; } function linhaDias( $mes ) { $retorno = ""; // coluna dos numeros $retorno .= "Valores\n"; // coloca a linha abaixo do grafico com os dias do mes for( $i = 1; $i <= 31; $i++ ) { // até o ultimo dia do mes ele coloca numeros, depois coloca em branco if( $i <= $this->ultimoDiaMes[$mes + 0] ) { $strData = $this->dataAtual[2] . "/" . $this->mesAtual . "/" . $this->addZero( $i ); $indiceSemana = date( "w", strtotime( $strData ) ); $legDia = substr( $this->diasSemana[$indiceSemana], 0, 3 ); $estilo = ( $indiceSemana == 6 || $indiceSemana == 0 ) ? "graf_diafindi": "graf_dias"; $retorno .= "" . $this->addZero( $i ) . "
{$legDia}\n"; } else { $retorno .= " \n"; } } $retorno .= "Média\n"; $retorno .= " \n"; return $retorno; } function insereMedia( $ultimoDia, $somaVals, $diasUteis ) { $retorno = ""; // completa os campos de grafico em branco até o dia 31 $retorno .= $this->preencheGrafVazio( $ultimoDia, 31 ); // coloca o grafico com as medias do mes $mediaVals[0] = $somaVals[0] / $diasUteis; $mediaVals[1] = $somaVals[1] / $diasUteis; $mediaVals[2] = $somaVals[2] / $diasUteis; $mediaVals[3] = $somaVals[3] / $diasUteis; $alturas = array(); $alturas[0] = ceil( $mediaVals[0] * $this->altura / $this->maxVal ); $alturas[1] = ceil( $mediaVals[1] * $this->altura / $this->maxVal ); $alturas[2] = ceil( $mediaVals[2] * $this->altura / $this->maxVal ); $alturas[3] = ceil( $mediaVals[3] * $this->altura / $this->maxVal ); $retorno .= "\n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "
altura / $this->maxVal ), $this->altura ) . "\" borde=\"0\" title=\"" . number_format( $mediaVals[0], 2, ",", "." ) . "\">altura / $this->maxVal ), $this->altura ) . "\" borde=\"0\" title=\"" . number_format( $mediaVals[1], 2, ",", "." ) . "\">altura / $this->maxVal ), $this->altura ) . "\" borde=\"0\" title=\"" . number_format( $mediaVals[2], 2, ",", "." ) . "\">altura / $this->maxVal ), $this->altura ) . "\" borde=\"0\" title=\"" . number_format( $mediaVals[3], 2, ",", "." ) . "\">
\n"; $retorno .= "\n"; return $retorno; } function preencheGrafVazio( $ini, $fim ) { $retorno = ""; for( $i = $ini; $i < $fim; $i++ ) { $retorno .= " \n"; } return $retorno; } function geraHTML( $insideTemplate=false ) { $diasArray = array(); $somaVals = array( 0, 0, 0, 0 ); $diasUteis = 0; $ultimoDia = 0; $fechouMes = false; $retorno = ""; if( ! $insideTemplate ) { $retorno.= "Grafico Diario"; } if( $this->titulo ) { $retorno .= "
{$this->titulo}

\n"; } $retorno .= "\n"; while ( $this->dataAtual[2] < $this->datafim[2] || ( $this->dataAtual[2] == $this->datafim[2] && $this->dataAtual[1] < $this->datafim[1] ) || ( $this->dataAtual[2] == $this->datafim[2] && $this->dataAtual[1] == $this->datafim[1] && $this->dataAtual[0] < $this->datafim[0] ) ) { $fechouMes = false; if( isset( $this->arrayValores[$this->dataAtual[2]][$this->dataAtual[1]][$this->dataAtual[0]] ) ) { $infoDoDia = $this->arrayValores[$this->dataAtual[2]][$this->dataAtual[1]][$this->dataAtual[0]]; } else { $infoDoDia = array( 0, 0, 0, 0 ); } // virou o mes? if( $this->mesAtual != $this->dataAtual[1] ) { // teve mes passado? if( $this->mesAtual ) { $retorno .= $this->insereMedia( $ultimoDia, $somaVals, $diasUteis ); $retorno .= $this->linhaDias( $this->dataAtual[1] ); } // escreve a linha em destaque para o proximo mes $retorno .= "\n"; // se é o primeiro mes preenche com campos em branco até o dia de inicio if( ! $this->mesAtual ) { $retorno .= $this->preencheGrafVazio( 1, $this->dataAtual[0] ); } $this->mesAtual = $this->dataAtual[1]; $fechouMes = true; $somaVals = array( 0, 0, 0, 0 ); $diasUteis = 0; } $diaDaSemana = date( "w", $this->timeDataAtual ); if( ! $this->mostraWeekend && ( $diaDaSemana == 6 || $diaDaSemana == 0 ) ) { $retorno .= $this->preencheGrafVazio( 0, 1 ); } else { // escreve os valores do dia atual $retorno .= "\n"; $somaVals[0] += $infoDoDia[0]; $somaVals[1] += $infoDoDia[1]; $somaVals[2] += $infoDoDia[2]; $somaVals[3] += $infoDoDia[3]; $diasUteis++; } $ultimoDia = $this->dataAtual[0]; // passa a data atual para o proximo dia $this->timeDataAtual += 60 * 60 * 24; $this->dataAtual[0] = date( "d", $this->timeDataAtual ); $this->dataAtual[1] = date( "m", $this->timeDataAtual ); $this->dataAtual[2] = date( "Y", $this->timeDataAtual ); } // se o grafico acabou no meio de um mes vamos termina-lo if( ! $fechouMes ) { $retorno .= $this->insereMedia( $ultimoDia, $somaVals, $diasUteis ); $retorno .= $this->linhaDias( $this->dataAtual[1] ); } $retorno .= "
" . $this->mesesExtenso[$this->dataAtual[1] + 0] . " de {$this->dataAtual[2]}
 \n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "
altura / $this->maxVal ), $this->altura ) . "\" borde=\"0\" title=\"" . number_format( $infoDoDia[0], 2, ",", "." ) . "\">altura / $this->maxVal ), $this->altura ) . "\" borde=\"0\" title=\"" . number_format( $infoDoDia[1], 2, ",", "." ) . "\">altura / $this->maxVal ), $this->altura ) . "\" borde=\"0\" title=\"" . number_format( $infoDoDia[2], 2, ",", "." ) . "\">altura / $this->maxVal ), $this->altura ) . "\" borde=\"0\" title=\"" . number_format( $infoDoDia[3], 2, ",", "." ) . "\">
"; if( is_array( $this->legenda ) ) { $retorno .= "

\n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "\n"; $retorno .= "
{$this->legenda[0]}:
{$this->legenda[1]}:
{$this->legenda[2]}:
{$this->legenda[3]}:


\n"; } if( ! $insideTemplate ) { $retorno.= ""; } return $retorno; } function printHTML() { echo $this->geraHTML(); } } ?>