Esempio n. 1
0
 public function process(DBResult &$reportArray, ReportNotes &$notes)
 {
     $countForGrouping = 0;
     $sumArray = array();
     $totalSumArray = array();
     $holdArray = array();
     $fields = $reportArray->fetchFields();
     $numFields = count($fields);
     if ($numFields !== 0) {
         echo '<thead>';
         $this->processColumns($fields);
         echo '</thead>';
         // loop through resultset
         $groupArrayCount = count($this->groupColsArray);
         $rowNum = 1;
         echo '<tbody>';
         while ($currentRow = $reportArray->fetchRowPersist(MYSQLI_ASSOC)) {
             if (isset($currentRow['platformID'])) {
                 $notes->addPlatform($currentRow['platformID']);
             }
             if (isset($currentRow['publisherPlatformID'])) {
                 $notes->addPublisher($currentRow['publisherPlatformID']);
             }
             $reset = $rowNum === $this->startPage;
             $performCheck = false;
             $print_subtotal_flag = false;
             $rowoutput = "<tr>";
             $colNum = 0;
             foreach ($currentRow as $field => $data) {
                 // stop displaying columns once we hit title ID or platform ID
                 if ($field === 'titleID' || $field === 'platformID') {
                     break;
                 }
                 if ($data === '') {
                     $data = '&nbsp;';
                 }
                 // if sort is explicitly requested we will group on this column if it is allowed according to DB
                 if (isset($holdArray[$colNum]) && isset($this->groupColsArray[$field]) && $data != $holdArray[$colNum]) {
                     if ($this->sortColumn === $colNum + 1) {
                         $hold_rprt_grpng_data = $holdArray[$colNum];
                         $print_subtotal_flag = true;
                         // if no sort order is specified, use default grouping
                     } else {
                         if ($this->sortOrder === '' && $holdArray[$colNum] != '') {
                             $this->groupColsArray[$field] = true;
                             // default echo flag to Y, we will reset later
                             $print_subtotal_flag = true;
                             $performCheck = true;
                             if ($groupArrayCount === 1) {
                                 $hold_rprt_grpng_data = $holdArray[$colNum];
                             } else {
                                 $hold_rprt_grpng_data = 'Group';
                             }
                         }
                     }
                 }
                 if ($data != (isset($holdArray[$colNum]) ? $holdArray[$colNum] : null) || $reset || $this->outputType === 'xls' || $this->perform_subtotal_flag && $this->sortOrder === '' && $groupArrayCount > 1) {
                     $reset = true;
                     $print_data = $data;
                 } else {
                     if ($print_data == '0' . $print_data) {
                         $print_data = '&nbsp;';
                     } else {
                         $print_data = $data;
                     }
                 }
                 if ($this->outputType === 'web' && $print_data !== '&nbsp;' && $field === 'TITLE') {
                     if ($this->report->getID() != '1') {
                         $print_data .= '<br><font size="-4"><a target="_BLANK" href="report.php?reportID=1&prm_4=' . ($this->showUnadjusted ? 'Y' : 'N') . "&titleID={$currentRow['titleID']}&outputType=web'>view related titles</a></font>";
                     }
                     // echo link resolver link
                     if (($currentRow['PRINT_ISSN'] || $currentRow['ONLINE_ISSN']) && isset($this->baseURL)) {
                         $print_data .= '<br><font size="-4"><a target="_BLANK" href="' . $this->getLinkResolverLink($currentRow) . '">view in link resolver</a></font>';
                     }
                 }
                 if (isset($currentRow[$field . '_OVERRIDE']) || isset($currentRow[$field . '_OUTLIER']) && $currentRow[$field . '_OUTLIER'] > 0) {
                     if (!$this->showUnadjusted && isset($currentRow[$field . '_OVERRIDE'])) {
                         $rowoutput .= "<td class='overriden'>" . $currentRow[$field . '_OVERRIDE'] . "</td>";
                     } else {
                         if ($this->showUnadjusted) {
                             if ($currentRow[$field . '_OUTLIER'] >= 4) {
                                 $tmp_outlier_color = Color::$levelColors[$currentRow[$field . '_OUTLIER'] - 3];
                             } else {
                                 $tmp_outlier_color = Color::$levelColors[$currentRow[$field . '_OUTLIER']];
                             }
                             $rowoutput .= "<td class='{$tmp_outlier_color['1']}'>{$print_data}</td>";
                             unset($tmp_outlier_color);
                         } else {
                             $rowoutput .= "<td class='flagged'>{$print_data}</td>";
                         }
                     }
                 } else {
                     if (isset($currentRow['MERGE_IND'])) {
                         $rowoutput .= "<td class='merged'>{$print_data}</td>";
                     } else {
                         $rowoutput .= "<td>{$print_data}</td>";
                     }
                 }
                 $holdArray[$colNum] = $data;
                 if (isset($this->groupColsArray[$field])) {
                     if ($this->sortColumn === $colNum + 1) {
                         $hold_rprt_grpng_data = $holdArray[$colNum];
                     } else {
                         if ($this->sortOrder === '') {
                             if ($groupArrayCount === 1) {
                                 $hold_rprt_grpng_data = $holdArray[$colNum];
                             } else {
                                 $hold_rprt_grpng_data = 'Group';
                             }
                         }
                     }
                 }
                 // get the numbers out for summing
                 if (isset($sumArray[$field])) {
                     $sumArray[$field][] = $data;
                     $totalSumArray[$field] += $data;
                     // filter_var($data, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION) );
                 } else {
                     $sumArray[$field] = array($data);
                     $totalSumArray[$field] = $data;
                     // filter_var($data, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION) );
                 }
                 // end if display columns is Y
                 ++$colNum;
             }
             // end loop through columns
             ++$countForGrouping;
             // loop through the group arrays, if any are N then echo flag is N otherwise it will be left to Y
             // determine if the current row needs to be grouped
             if ($this->outputType != 'xls' && !($performCheck && in_array(false, $this->groupColsArray, true) !== false) && $print_subtotal_flag && $this->report->hasGroupTotalInd()) {
                 $rowoutput .= "</tr>";
                 if ($countForGrouping > 1) {
                     $rowoutput .= "<tr class='data'><td class='sum'>Total for {$hold_rprt_grpng_data}</td>";
                     foreach ($fields as $field) {
                         $rowoutput .= '<td class="sum">' . $this->sumField($this->sumColsArray[$field], $sumArray[$field]) . '</td>';
                     }
                     $rowoutput .= '</tr>';
                 }
                 $sumArray = array();
                 $countForGrouping = 0;
                 $rowoutput .= "<tr class='data'><td colspan={$numFields}>&nbsp;</td></tr><tr class='data'>";
             }
             ++$rowNum;
             if ($this->maxRows <= 0 || $rowNum < $this->maxRows) {
                 echo $rowoutput;
             }
             if ($rowNum % 15000 === 0) {
                 ob_flush();
             }
         }
         --$rowNum;
         if ($this->outputType != 'xls' && $this->perform_subtotal_flag) {
             if ($this->report->hasGroupTotalInd() && $hold_rprt_grpng_data) {
                 // one last grouping summary
                 if ($countForGrouping > 1) {
                     $grp .= "<tr class='data'><td class='sum'>Total for {$hold_rprt_grpng_data}</td>";
                     foreach ($fields as $field) {
                         $grp .= "<td class='sum'>" . $this->sumField($this->sumColsArray[$field], $sumArray[$field]) . "</td>";
                     }
                     echo "{$grp}</tr>";
                 }
                 echo "<tr class='data'><td colspan={$numFields}>&nbsp;</td></tr>";
             }
             echo '<tr class="data"><td class="sum">Total for Report</td>';
             $total = '';
             for ($colNum = 1; $colNum < $numFields; ++$colNum) {
                 if (isset($this->sumColsArray[$fields[$colNum]])) {
                     $total = $this->sumColTotal($this->sumColsArray[$fields[$colNum]], $totalSumArray[$fields[$colNum]], $rowNum);
                 }
                 if ($total) {
                     echo "<td class='sum'>{$total}</td>";
                 } else {
                     echo "<td class='sum'>&nbsp;</td>";
                 }
             }
             echo '</tr>';
         }
         if ($rowNum === 0) {
             echo "<tr class='data'><td colspan={$numFields}><i>Sorry, no rows were returned.";
         } else {
             echo "<tr><td colspan={$numFields} align='right'><i>Showing rows {$this->startPage} to ";
             if ($this->maxRows > 0 && $rowNum > $this->maxRows) {
                 echo "{$this->maxRows} of {$this->maxRows}";
             } else {
                 echo "{$rowNum} of {$rowNum}";
             }
         }
         echo '</i></td></tr></tbody>';
     }
 }
 public function __construct($result, $sql)
 {
     parent::__construct($result, $sql);
 }
Esempio n. 3
0
 public function populateFromDBResult(DomainObject $object, DBResult $result)
 {
     $row = $result->row();
     return $row ? $this->populateFromRow($object, $row) : (bool) $object->setError();
 }