/**
  * Constructor method
  */
 public function __construct()
 {
     parent::__construct();
     // create the HTML Renderer
     $this->html = new THtmlRenderer('app/resources/agenda.html');
     // define replacements for the main section
     $replaces = array();
     try {
         // load the products
         TTransaction::open('samples');
         $events = Event::getWeekEvents();
         $first_date = Event::getFirstWeekDay();
         $replace_detail = array();
         if ($events) {
             // iterate products
             foreach ($events as $event) {
                 $ordered_events[$event->event_date][(int) $event->start_hour] = $event;
             }
             for ($day = 0; $day < 7; $day++) {
                 $dt = new DateTime($first_date);
                 $dt->add(new DateInterval('P' . $day . 'D'));
                 $filter_date = $dt->format('Y-m-d');
                 $replaces['day' . ($day + 1)] = '';
                 if (isset($ordered_events[$filter_date])) {
                     for ($hour = 0; $hour < 24; $hour++) {
                         if (isset($ordered_events[$filter_date][$hour])) {
                             $event = $ordered_events[$filter_date][$hour];
                             $replace_event = $event->toArray();
                             $replace_event['height'] = $event->duration * 24;
                             $replace_event['hour'] = $hour;
                             $event_html = new THtmlRenderer('app/resources/event.html');
                             $event_html->enableSection('main', $replace_event);
                             $replaces['day' . ($day + 1)] .= $event_html->getContents();
                             // array of replacements
                             $hour += $event->duration - 1;
                         } else {
                             $event_html = new THtmlRenderer('app/resources/event_empty.html');
                             $event_html->enableSection('main', array('popmenu' => 'fa-plus-square-o', 'day' => $filter_date, 'hour' => $hour));
                             $replaces['day' . ($day + 1)] .= $event_html->getContents();
                         }
                     }
                 } else {
                     for ($hour = 0; $hour < 24; $hour++) {
                         $event_html = new THtmlRenderer('app/resources/event_empty.html');
                         $event_html->enableSection('main', array('popmenu' => 'fa-plus-square-o', 'day' => $filter_date, 'hour' => $hour));
                         $replaces['day' . ($day + 1)] .= $event_html->getContents();
                     }
                 }
             }
         } else {
             for ($day = 0; $day < 7; $day++) {
                 $dt = new DateTime($first_date);
                 $dt->add(new DateInterval('P' . $day . 'D'));
                 $filter_date = $dt->format('Y-m-d');
                 $replaces['day' . ($day + 1)] = '';
                 for ($hour = 0; $hour < 24; $hour++) {
                     $event_html = new THtmlRenderer('app/resources/event_empty.html');
                     $event_html->enableSection('main', array('popmenu' => 'fa-plus-square-o', 'day' => $filter_date, 'hour' => $hour));
                     $replaces['day' . ($day + 1)] .= $event_html->getContents();
                 }
             }
         }
         // enable products section as repeatable
         $this->html->enableSection('main', $replaces);
         TTransaction::close();
     } catch (Exception $e) {
         new TMessage('error', $e->getMessage());
     }
     // wrap the page content using vertical box
     $vbox = new TVBox();
     $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
     $vbox->add($this->html);
     parent::add($vbox);
 }