mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 05:58:34 +01:00
MDL-65954 dataformat_pdf: Convert object records to array
* 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.
This commit is contained in:
parent
f7e108438f
commit
b3f4d77e00
@ -89,6 +89,11 @@ class writer extends \core\dataformat\base {
|
||||
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));
|
||||
}
|
||||
@ -99,12 +104,19 @@ class writer extends \core\dataformat\base {
|
||||
$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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user