示例#1
0
 /**
  * Renders the localized version of the date-time value.
  * If the culture is not specified, the default application
  * culture will be used.
  * This method overrides parent's implementation.
  */
 protected function getFormattedDate()
 {
     $value = $this->getValue();
     $defaultText = $this->getDefaultText();
     if (empty($value) && !empty($defaultText)) {
         return $this->getDefaultText();
     }
     $app = $this->getApplication()->getGlobalization();
     //initialized the default class wide formatter
     if (self::$formatter === null) {
         self::$formatter = new DateFormat($app->getCulture());
     }
     $culture = $this->getCulture();
     //return the specific cultural formatted date time
     if (strlen($culture) && $app->getCulture() !== $culture) {
         $formatter = new DateFormat($culture);
         return $formatter->format($value, $this->getPattern(), $this->getCharset());
     }
     //return the application wide culture formatted date time.
     $result = self::$formatter->format($value, $this->getPattern(), $this->getCharset());
     return $result;
 }
示例#2
0
 protected function onPrint()
 {
     $from = $this->Session[$this->getApplication()->getService()->getRequestedPagePath() . 'Start'];
     $to = $this->Session[$this->getApplication()->getService()->getRequestedPagePath() . 'End'];
     $event = $this->getData($from, $to);
     //print_r($event); exit;
     parent::onPrint();
     $data = array();
     $header = array(Prado::localize('Mon'), Prado::localize('Tue'), Prado::localize('Wed'), Prado::localize('Thu'), Prado::localize('Fri'), Prado::localize('Sat'), Prado::localize('Sun'));
     $this->pdf->AddPage('L');
     $this->pdf->SetFillColor(255, 255, 255);
     $this->pdf->SetTextColor(0, 0, 0);
     $this->pdf->SetDrawColor(0, 0, 0);
     $this->pdf->SetLineWidth(0.3);
     $this->pdf->SetFont('', 'B');
     $this->pdf->SetFontSize(10);
     //En-tête
     $this->pdf->Ln();
     $w = array(39.5, 39.5, 39.5, 39.5, 39.5, 39.5, 39.5);
     for ($i = 0; $i < count($header); $i++) {
         $this->pdf->Cell($w[$i], 4, $header[$i], 1, 0, 'C', 1);
     }
     $this->pdf->Ln();
     //Restauration des couleurs et de la police
     $this->pdf->SetTextColor(0);
     $this->pdf->SetFont('');
     $from = strtotime($from);
     $to = strtotime($to);
     $from_default = $from;
     $x = 46;
     $y = 37;
     $this->pdf->SetFontSize(8);
     $startMonth = false;
     $from = $from_default;
     $eventPerLine = array(0, 0, 0, 0, 0, 0);
     $eventPerDay = array();
     $i = 1;
     while ($from < $to) {
         $eventPerDay[$i] = 0;
         foreach ($event as $e) {
             $eventDateStart = strtotime($e['start']);
             $eventDateEnd = strtotime($e['end']);
             if ($eventDateStart <= $from && $from <= $eventDateEnd) {
                 $eventPerDay[$i] = $eventPerDay[$i] + 1;
             }
         }
         $i++;
         $from = strtotime("+1 day", $from);
     }
     $line = 1;
     $i = 1;
     foreach ($eventPerDay as $k => $v) {
         if ($v > $eventPerLine[$line - 1]) {
             $eventPerLine[$line - 1] = $v;
         }
         if ($i % 7 == 0) {
             $line++;
         }
         $i++;
     }
     $line = 1;
     $i = 1;
     $from = $from_default;
     while ($from < $to) {
         $height = $eventPerLine[$line - 1] * 3.4 + 6;
         $this->pdf->SetFontSize(10);
         $this->pdf->Cell($w[$i % 7], $height, '', 1, 0, 'C', 0);
         $this->pdf->SetFontSize(8);
         $day = date("j", $from);
         if (!$startMonth) {
             $this->pdf->SetTextColor(179, 179, 179);
         }
         if ($startMonth && $day == 1) {
             $startMonth = false;
             $this->pdf->SetTextColor(179, 179, 179);
         } else {
             if ($i >= 1 && $day == 1) {
                 $startMonth = true;
                 $month = new TDateFormat();
                 $month->setValue(date("d-n-Y", $from));
                 $month->Pattern = "MMM  yyyy";
                 $this->pdf->SetFontSize(12);
                 $this->pdf->SetTextColor(0, 0, 0);
                 $this->pdf->Text(10, 26, utf8_decode($month->FormattedDate));
                 $this->pdf->SetFontSize(8);
                 $this->pdf->SetTextColor(255, 255, 255);
             }
             if ($startMonth) {
                 $this->pdf->SetTextColor(0, 0, 0);
             }
         }
         $this->pdf->Text($x, $y, $day);
         $x += 39.5;
         if ($i % 7 == 0) {
             $this->pdf->Ln();
             $y += $eventPerLine[$line - 1] * 3.4 + 6;
             $x = 46;
             $line++;
         }
         $i++;
         $from = strtotime("+1 day", $from);
     }
     $eventIndex = 0;
     $eventPerLine2 = array(1 => array(), 2 => array(), 3 => array(), 4 => array(), 5 => array(), 6 => array());
     $eventIndexPerLine = array(0, 0, 0, 0, 0, 0);
     $this->pdf->SetTextColor(255, 255, 255);
     $this->pdf->SetFontSize(8);
     foreach ($event as $e) {
         $y = 38;
         $colorR = hexdec(substr($e['color'], 1, 2));
         $colorG = hexdec(substr($e['color'], 3, 2));
         $colorB = hexdec(substr($e['color'], 5, 2));
         $this->pdf->SetFillColor($colorR, $colorG, $colorB);
         $x = 10.1;
         $eventDateStart = strtotime($e['start']);
         $eventDateEnd = strtotime($e['end']);
         $from = $from_default;
         $fromStart = 0;
         $i = 1;
         $line = 1;
         $eventStart = false;
         $countEvent = false;
         $j = 0;
         while ($from < $to) {
             if (!isset($eventPerLine2[$line][$from])) {
                 $eventPerLine2[$line][$from] = 0;
             }
             if ($eventDateStart == $from && !$eventStart) {
                 $eventStart = true;
                 $countEvent = true;
                 $eventIndexPerLine[$line - 1]++;
                 $fromStart = $from;
                 if ($eventDateEnd == $from) {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $this->pdf->RoundedRect($x + $j * 39.5 + 1, $y, 37, 3, 0.5, '1234', 'F');
                     $eventPerLine2[$line][$from]++;
                 } else {
                     if ($i % 7 == 0) {
                         $y += $eventPerLine2[$line][$from] * 3.4;
                         $this->pdf->RoundedRect($x + $j * 39.5 + 1, $y, 39, 3, 0.5, '14', 'F');
                         $eventPerLine2[$line][$from]++;
                     } else {
                         $y += $eventPerLine2[$line][$from] * 3.4;
                         $this->pdf->RoundedRect($x + $j * 39.5 + 1, $y, 39, 3, 0.5, '14', 'F');
                         $eventPerLine2[$line][$from]++;
                     }
                 }
             }
             if ($eventDateStart < $from && !$eventStart) {
                 $eventStart = true;
                 $eventIndexPerLine[$line - 1]++;
                 $countEvent = true;
                 $fromStart = $from;
                 if ($eventDateEnd == $from) {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $this->pdf->RoundedRect($x + $j * 39.5, $y, 39.5, 3, 0.5, '23', 'F');
                     $eventPerLine2[$line][$from]++;
                 } else {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $this->pdf->RoundedRect($x + $j * 39.5, $y, 40, 3, 0.5, '', 'F');
                     $eventPerLine2[$line][$from]++;
                 }
             }
             if ($eventDateEnd == $from && $eventStart && $eventDateEnd != $fromStart) {
                 if (!$countEvent) {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $countEvent = true;
                     $eventIndexPerLine[$line - 1]++;
                 }
                 $this->pdf->RoundedRect($x + $j * 39.5, $y, 38.5, 3, 0.5, '23', 'F');
                 $eventPerLine2[$line][$from]++;
             }
             if ($eventDateEnd > $from && $eventStart && $from > $fromStart) {
                 if (!$countEvent) {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $countEvent = true;
                     $eventIndexPerLine[$line - 1]++;
                 }
                 $this->pdf->RoundedRect($x + $j * 39.5, $y, 39.5, 3, 0.5, '', 'F');
                 $eventPerLine2[$line][$from]++;
             }
             $j++;
             if ($i % 7 == 0) {
                 //next line
                 $y = 38;
                 $y += $eventPerLine[$line - 1] * 3.4 + 6;
                 for ($k = 1; $k < $line; $k++) {
                     $y += $eventPerLine[$k - 1] * 3.4 + 6;
                 }
                 $countEvent = false;
                 $line++;
                 $j = 0;
             }
             $from = strtotime("+1 day", $from);
             $i++;
         }
         $eventIndex++;
     }
     // text
     $eventIndex = 0;
     $eventPerLine2 = array(1 => array(), 2 => array(), 3 => array(), 4 => array(), 5 => array(), 6 => array());
     $eventIndexPerLine = array(0, 0, 0, 0, 0, 0);
     foreach ($event as $e) {
         $y = 38;
         $x = 10.1;
         $eventDateStart = strtotime($e['start']);
         $eventDateEnd = strtotime($e['end']);
         $from = $from_default;
         $fromStart = 0;
         $i = 1;
         $line = 1;
         $eventStart = false;
         $countEvent = false;
         $j = 0;
         while ($from < $to) {
             if (!isset($eventPerLine2[$line][$from])) {
                 $eventPerLine2[$line][$from] = 0;
             }
             if ($eventDateStart == $eventDateEnd) {
                 $width = $this->pdf->GetStringWidth(utf8_decode($e["title"]));
                 $fontSize = 8;
                 if ($width > 35) {
                     while ($this->pdf->GetStringWidth(utf8_decode($e["title"])) > 35) {
                         $fontSize -= 0.1;
                         $this->pdf->SetFontSize($fontSize);
                     }
                 }
             } else {
                 $this->pdf->SetFontSize(8);
             }
             if ($eventDateStart == $from && !$eventStart) {
                 $eventStart = true;
                 $countEvent = true;
                 $eventIndexPerLine[$line - 1]++;
                 $fromStart = $from;
                 if ($eventDateEnd == $from) {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $this->pdf->Text($x + $j * 39.5 + 1 + 1, $y + 2.4, utf8_decode($e["title"]));
                     $eventPerLine2[$line][$from]++;
                 } else {
                     if ($i % 7 == 0) {
                         $y += $eventPerLine2[$line][$from] * 3.4;
                         $this->pdf->Text($x + $j * 39.5 + 1 + 1, $y + 2.4, utf8_decode($e["title"]));
                         $eventPerLine2[$line][$from]++;
                     } else {
                         $y += $eventPerLine2[$line][$from] * 3.4;
                         $this->pdf->Text($x + $j * 39.5 + 1 + 1, $y + 2.4, utf8_decode($e["title"]));
                         $eventPerLine2[$line][$from]++;
                     }
                 }
             }
             if ($eventDateStart < $from && !$eventStart) {
                 $eventStart = true;
                 $eventIndexPerLine[$line - 1]++;
                 $countEvent = true;
                 $fromStart = $from;
                 if ($eventDateEnd == $from) {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $eventPerLine2[$line][$from]++;
                     $this->pdf->Text($x + $j * 39.5 + 1 + 1, $y + 2.4, utf8_decode($e["title"]));
                 } else {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $eventPerLine2[$line][$from]++;
                     $this->pdf->Text($x + $j * 39.5 + 1 + 1, $y + 2.4, utf8_decode($e["title"]));
                 }
             }
             if ($eventDateEnd == $from && $eventStart && $eventDateEnd != $fromStart) {
                 if (!$countEvent) {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $countEvent = true;
                     $eventIndexPerLine[$line - 1]++;
                 }
                 $eventPerLine2[$line][$from]++;
             }
             if ($eventDateEnd > $from && $eventStart && $from > $fromStart) {
                 if (!$countEvent) {
                     $y += $eventPerLine2[$line][$from] * 3.4;
                     $countEvent = true;
                     $eventIndexPerLine[$line - 1]++;
                     $this->pdf->Text($x + $j * 39.5 + 1 + 1, $y + 2.4, utf8_decode($e["title"]));
                 }
                 $eventPerLine2[$line][$from]++;
             }
             $j++;
             if ($i % 7 == 0) {
                 //next line
                 $y = 38;
                 $y += $eventPerLine[$line - 1] * 3.4 + 6;
                 for ($k = 1; $k < $line; $k++) {
                     $y += $eventPerLine[$k - 1] * 3.4 + 6;
                 }
                 $countEvent = false;
                 $line++;
                 $j = 0;
             }
             $from = strtotime("+1 day", $from);
             $i++;
         }
         $eventIndex++;
     }
     $this->pdf->SetTextColor(0, 0, 0);
     //$this->pdf->Cell(array_sum($w),0,'','T');
     $this->pdf->render();
 }
 /**
  * Renders the localized version of the date-time value.
  * If the culture is not specified, the default application
  * culture will be used.
  * This method overrides parent's implementation.
  */
 protected function renderBody()
 {
     $app = $this->Application->getGlobalization();
     //initialized the default class wide formatter
     if (is_null(self::$formatter)) {
         self::$formatter = new DateFormat($app->Culture);
     }
     $culture = $this->getCulture();
     $value = $this->getValue();
     //return the specific cultural formatted date time
     if (strlen($culture) && $app->Culture !== $culture) {
         $formatter = new DateFormat($culture);
         return $formatter->format($value, $this->getPattern());
     }
     $charset = $this->getCharset();
     if (empty($charset)) {
         $charset = 'UTF-8';
     }
     //return the application wide culture formatted date time.
     return self::$formatter->format($value, $this->getPattern(), $charset);
 }