Skip to content

Commit

Permalink
MDL-65954 dataformat_pdf: Convert object records to array
Browse files Browse the repository at this point in the history
* count() doesn't work quite as expected when the record being written
to the PDF is an object. So make sure to convert the record to an array.
* In addition, instead of comparing the total vs the current cell
counter, it would be more reliable to determine whether we're at the
last element of the array by getting the key for the last element and
comparing it with the key for the element that's currently being
processed.
  • Loading branch information
junpataleta committed Jul 15, 2019
1 parent f7e1084 commit b3f4d77
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions dataformat/pdf/classes/writer.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ public function start_sheet($columns) {
public function write_record($record, $rownum) {
$rowheight = 0;

// If $record is an object convert it to an array.
if (is_object($record)) {
$record = (array)$record;
}

foreach ($record as $cell) {
$rowheight = max($rowheight, $this->pdf->getStringHeight($this->colwidth, $cell, false, true, '', 1));
}
Expand All @@ -99,12 +104,19 @@ public function write_record($record, $rownum) {
$this->print_heading();
}

$total = count($record);
$counter = 1;
foreach ($record as $cell) {
$nextposition = ($counter == $total) ? 1 : 0;
// Get the last key for this record.
end($record);
$lastkey = key($record);

// Reset the record pointer.
reset($record);

// Loop through each element.
foreach ($record as $key => $cell) {
// Determine whether we're at the last element of the record.
$nextposition = ($lastkey === $key) ? 1 : 0;
// Write the element.
$this->pdf->Multicell($this->colwidth, $rowheight, $cell, 1, 'L', false, $nextposition);
$counter++;
}
}

Expand Down

0 comments on commit b3f4d77

Please sign in to comment.