/** * 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; }