Skip to content

Commit

Permalink
MDL-67547 dataformat: allow plugins to declare support for HTML.
Browse files Browse the repository at this point in the history
  • Loading branch information
paulholden committed May 5, 2020
1 parent a09eb26 commit 118a109
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 10 deletions.
11 changes: 11 additions & 0 deletions dataformat/html/classes/writer.php
Expand Up @@ -92,13 +92,24 @@ public function start_sheet($columns) {
echo \html_writer::end_tag('tr');
}

/**
* Method to define whether the dataformat supports export of HTML
*
* @return bool
*/
public function supports_html(): bool {
return true;
}

/**
* Write a single record
*
* @param array $record
* @param int $rownum
*/
public function write_record($record, $rownum) {
$record = $this->format_record($record);

echo \html_writer::start_tag('tr');
foreach ($record as $cell) {
echo \html_writer::tag('td', $cell);
Expand Down
2 changes: 1 addition & 1 deletion dataformat/json/classes/writer.php
Expand Up @@ -80,7 +80,7 @@ public function write_record($record, $rownum) {
echo ",";
}

echo json_encode($record, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo json_encode($this->format_record($record), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

$this->sheetdatadded = true;
}
Expand Down
23 changes: 17 additions & 6 deletions dataformat/pdf/classes/writer.php
Expand Up @@ -93,14 +93,25 @@ public function start_sheet($columns) {
$this->print_heading();
}

/**
* Method to define whether the dataformat supports export of HTML
*
* @return bool
*/
public function supports_html(): bool {
return true;
}

/**
* Write a single record
*
* @param array $record
* @param int $rownum
*/
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;
}

$record = $this->format_record($record);
foreach ($record as $cell) {
$rowheight = max($rowheight, $this->pdf->getStringHeight($this->colwidth, $cell, false, true, '', 1));
}
Expand All @@ -123,7 +134,7 @@ public function write_record($record, $rownum) {
// 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);
$this->pdf->writeHTMLCell($this->colwidth, $rowheight, '', '', $cell, 1, $nextposition, false, true, 'L');
}
}

Expand Down
21 changes: 21 additions & 0 deletions lib/classes/dataformat/base.php
Expand Up @@ -145,6 +145,27 @@ public function start_sheet($columns) {
// Override me if needed.
}

/**
* Method to define whether the dataformat supports export of HTML
*
* @return bool
*/
public function supports_html(): bool {
return false;
}

/**
* Apply formatting to the cells of a given record
*
* @param array|\stdClass $record
* @return array
*/
protected function format_record($record): array {
$record = (array)$record;

return $record;
}

/**
* Write a single record
*
Expand Down
4 changes: 2 additions & 2 deletions lib/classes/dataformat/spout_base.php
Expand Up @@ -116,11 +116,11 @@ public function start_sheet($columns) {
/**
* Write a single record
*
* @param object $record
* @param array $record
* @param int $rownum
*/
public function write_record($record, $rownum) {
$row = \Box\Spout\Writer\Common\Creator\WriterEntityFactory::createRowFromArray((array)$record);
$row = \Box\Spout\Writer\Common\Creator\WriterEntityFactory::createRowFromArray($this->format_record($record));
$this->writer->addRow($row);
}

Expand Down
11 changes: 10 additions & 1 deletion lib/tablelib.php
Expand Up @@ -2012,7 +2012,7 @@ function format_text($text, $format=FORMAT_MOODLE, $options=NULL, $courseid=NULL
*/
class table_dataformat_export_format extends table_default_export_format_parent {

/** @var $dataformat */
/** @var \core\dataformat\base $dataformat */
protected $dataformat;

/** @var $rownum */
Expand Down Expand Up @@ -2047,6 +2047,15 @@ public function __construct(&$table, $dataformat) {
\core\session\manager::write_close();
}

/**
* Whether the current dataformat supports export of HTML
*
* @return bool
*/
public function supports_html(): bool {
return $this->dataformat->supports_html();
}

/**
* Start document
*
Expand Down

0 comments on commit 118a109

Please sign in to comment.