Пример #1
0
 /**
  * Print Region List from Database
  *
  * @param      object &$db     JDatabase
  * @param      string $region  Parameter description (if any) ...
  * @param      mixed  $t       Parameter description (if any) ...
  * @param      mixed  $enddate Parameter description (if any) ...
  * @return     string HTML
  */
 private function regionlist(&$db, $region, $t = 0, $enddate = 0)
 {
     // Set region list parameters...
     $hub = 1;
     if (!$enddate) {
         $dtmonth = date("m") - 1;
         $dtyear = date("Y");
         if (!$dtmonth) {
             $dtmonth = 12;
             $dtyear = $dtyear - 1;
         }
         $enddate = $dtyear . '-' . $dtmonth;
     }
     // Look up region list information...
     $regionname = '';
     $sql = "SELECT name, valfmt, size FROM regions WHERE region = '" . $db->Quote($region) . "'";
     $db->setQuery($sql);
     $result = $db->loadRow();
     if ($result) {
         $regionname = $result[0];
         $valfmt = $result[1];
         $size = $result[2];
     }
     $html = '';
     if ($regionname) {
         // Prepare some date ranges...
         $enddate .= "-00";
         $dtmonth = floor(substr($enddate, 5, 2));
         $dtyear = floor(substr($enddate, 0, 4));
         $dt = $dtyear . '-' . sprintf("%02d", $dtmonth) . '-00';
         $dtmonthnext = floor(substr($enddate, 5, 2) + 1);
         $dtyearnext = $dtyear + 1;
         if ($dtmonthnext > 12) {
             $dtmonthnext = 1;
             $dtyearnext++;
         }
         $dtyearprior = substr($enddate, 0, 4) - 1;
         $monthtext = date("F", mktime(0, 0, 0, $dtmonth, 1, $dtyear)) . ' ' . $dtyear;
         $yeartext = 'Jan - ' . date("M", mktime(0, 0, 0, $dtmonth, 1, $dtyear)) . ' ' . $dtyear;
         $twelvetext = date("M", mktime(0, 0, 0, $dtmonthnext, 1, $dtyear)) . ' ' . $dtyearprior . ' - ' . date("M", mktime(0, 0, 0, $dtmonth, 1, $dtyear)) . ' ' . $dtyear;
         $period = array(array('key' => 1, 'name' => $monthtext), array('key' => 0, 'name' => $yeartext), array('key' => 12, 'name' => $twelvetext));
         // Process each different date/time periods/range...
         $maxrank = 0;
         $regionlist = array();
         for ($pidx = 0; $pidx < count($period); $pidx++) {
             // Calculate the total value for this regionlist...
             $regionlistset = array();
             $sql = "SELECT regionvals.name, regionvals.value FROM regions, regionvals WHERE regions.region = regionvals.region AND regionvals.hub = '" . $db->Quote($hub) . "' AND regions.region = '" . $db->Quote($region) . "' AND regionvals.datetime = '" . $db->Quote($dt) . "' AND regionvals.period = '" . $db->Quote($period[$pidx]["key"]) . "' AND regionvals.rank = '0'";
             $db->setQuery($sql);
             $results = $db->loadObjectList();
             if ($results) {
                 foreach ($results as $row) {
                     $formattedval = \Components\Usage\Helpers\Helper::valformat($row->value, $valfmt);
                     if (strstr($formattedval, "day") !== FALSE) {
                         $chopchar = strrpos($formattedval, ',');
                         if ($chopchar !== FALSE) {
                             $formattedval = substr($formattedval, 0, $chopchar) . '+';
                         }
                     }
                     array_push($regionlistset, array($row->name, $row->value, $formattedval, sprintf("%0.1f%%", 100)));
                 }
             }
             if (!count($regionlistset)) {
                 array_push($regionlistset, array("n/a", 0, "n/a", "n/a"));
             }
             // Calculate the region values for the regionlist...
             $rank = 1;
             $sql = "SELECT regionvals.rank, regionvals.name, regionvals.value FROM regions, regionvals WHERE regions.region = regionvals.region AND regionvals.hub = '" . $db->Quote($hub) . "' AND regions.region = '" . $db->Quote($region) . "' AND datetime = '" . $db->Quote($dt) . "' AND regionvals.period = '" . $db->Quote($period[$pidx]["key"]) . "' AND regionvals.rank > '0' ORDER BY regionvals.rank, regionvals.name";
             $db->setQuery($sql);
             $results = $db->loadObjectList();
             if ($results) {
                 foreach ($results as $row) {
                     if ($row->rank > 0 && (!$size || $row->rank <= $size)) {
                         while ($rank < $row->rank) {
                             array_push($regionlistset, array('n/a', 0, 'n/a', 'n/a'));
                             $rank++;
                         }
                         $formattedval = \Components\Usage\Helpers\Helper::valformat($row->value, $valfmt);
                         if (strstr($formattedval, 'day') !== FALSE) {
                             $chopchar = strrpos($formattedval, ',');
                             if ($chopchar !== FALSE) {
                                 $formattedval = substr($formattedval, 0, $chopchar) . '+';
                             }
                         }
                         if ($regionlistset[0][1] > 0) {
                             array_push($regionlistset, array($row->name, $row->value, $formattedval, sprintf("%0.1f%%", 100 * $row->value / $regionlistset[0][1])));
                         } else {
                             array_push($regionlistset, array($row->name, $row->value, $formattedval, 'n/a'));
                         }
                         $rank++;
                     }
                 }
             }
             while ($rank <= $size || $rank == 1) {
                 array_push($regionlistset, array('n/a', 0, 'n/a', 'n/a'));
                 $rank++;
             }
             array_push($regionlist, $regionlistset);
             if ($rank > $maxrank) {
                 $maxrank = $rank;
             }
         }
         $cls = 'even';
         // Print region list table...
         $html .= '<table summary="' . $regionname . '">' . "\n";
         $html .= "\t" . '<caption>' . Lang::txt('Table') . ' ' . $t . ': ' . $regionname . '</caption>' . "\n";
         $html .= "\t" . '<thead>' . "\n";
         $html .= "\t\t" . '<tr>' . "\n";
         for ($pidx = 0; $pidx < count($period); $pidx++) {
             $html .= "\t\t\t" . '<th colspan="3" scope="colgroup">' . $period[$pidx]["name"] . '</th>' . "\n";
         }
         $html .= "\t\t" . '</tr>' . "\n";
         $html .= "\t" . '</thead>' . "\n";
         $html .= "\t" . '<tbody>' . "\n";
         $cls = $cls == 'even' ? 'odd' : 'even';
         $html .= "\t\t" . '<tr class="summary">' . "\n";
         $k = 0;
         for ($pidx = 0; $pidx < count($period); $pidx++) {
             $k++;
             $tdcls = $k != 2 ? ' class="group"' : '';
             $html .= "\t\t\t" . '<th' . $tdcls . ' scope="row">' . $regionlist[$pidx][0][0] . '</th>' . "\n";
             $html .= "\t\t\t" . '<td' . $tdcls . '>' . $regionlist[$pidx][0][2] . '</td>' . "\n";
             $html .= "\t\t\t" . '<td' . $tdcls . '>' . $regionlist[$pidx][0][3] . '</td>' . "\n";
         }
         $html .= "\t\t" . '</tr>' . "\n";
         for ($i = 1; $i < $maxrank; $i++) {
             $cls = $cls == 'even' ? 'odd' : 'even';
             $k = 0;
             $html .= "\t\t" . '<tr class="' . $cls . '">' . "\n";
             for ($pidx = 0; $pidx < count($period); $pidx++) {
                 $k++;
                 $tdcls = $k != 2 ? ' class="group"' : '';
                 $html .= "\t\t\t" . '<th' . $tdcls . ' scope="row">';
                 $html .= isset($regionlist[$pidx][$i][0]) ? $regionlist[$pidx][$i][0] : '';
                 $html .= '</th>' . "\n";
                 $html .= "\t\t\t" . '<td' . $tdcls . '>';
                 $html .= isset($regionlist[$pidx][$i][2]) ? $regionlist[$pidx][$i][2] : '';
                 $html .= '</td>' . "\n";
                 $html .= "\t\t\t" . '<td' . $tdcls . '>';
                 $html .= isset($regionlist[$pidx][$i][3]) ? $regionlist[$pidx][$i][3] : '';
                 $html .= '</td>' . "\n";
             }
             $html .= "\t\t" . '</tr>' . "\n";
         }
         $html .= "\t" . '</tbody>' . "\n";
         $html .= '</table>' . "\n";
     }
     return $html;
 }