-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix #3660. Code existed to read a hyperlink in a cell for Ods, but did not exist for writing. Hyperlinks pointing within a document use a different representation than for Excel (and therefore for PhpSpreadsheet); read and write will both handle the mapping from one to the other. While researching how to write the text part of a started Xml element, it transpired that writing 2 Ods properties (Company and Category) did not escape their values properly. Confirmed and fixed problem. I do not believe that there is such an exposure for any other writer. As it turns out, Ods Reader was not processing Company or Category properly; that is fixed.
- Loading branch information
Showing
5 changed files
with
82 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
<?php | ||
|
||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Ods; | ||
|
||
use PhpOffice\PhpSpreadsheet\Spreadsheet; | ||
use PhpOffice\PhpSpreadsheet\Writer\Ods; | ||
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; | ||
|
||
class HyperlinkTest extends AbstractFunctional | ||
{ | ||
public function testSaveAndLoadHyperlinks(): void | ||
{ | ||
$spreadsheetOld = new Spreadsheet(); | ||
$spreadsheetOld->getProperties()->setCompany('g</meta:user-defined>zorg'); | ||
$spreadsheetOld->getProperties()->setCategory('h</meta:user-defined>zorg'); | ||
$sheet = $spreadsheetOld->getActiveSheet(); | ||
$sheet->getCell('A1')->setValue('Hello World'); | ||
$sheet->getCell('A2')->setValue('http://example.org'); | ||
$sheet->getCell('A2')->getHyperlink()->setUrl('http://example.org/'); | ||
$sheet->getCell('A3')->setValue('pa<ge1'); | ||
$sheet->getCell('A3')->getHyperlink()->setUrl('http://example.org/page1.html'); | ||
$sheet2 = $spreadsheetOld->createSheet(); | ||
$sheet2->setTitle('TargetSheet'); | ||
$sheet2->setCellValue('B4', 'TargetCell'); | ||
$sheet2->setCellValue('B3', 'not target'); | ||
$sheet->getCell('A4')->setValue('go to Target'); | ||
$sheet->getCell('A4')->getHyperlink()->setUrl('sheet://TargetSheet!B4'); | ||
$spreadsheet = $this->writeAndReload($spreadsheetOld, 'Ods'); | ||
$spreadsheetOld->disconnectWorksheets(); | ||
|
||
$newSheet = $spreadsheet->getActiveSheet(); | ||
self::assertSame('g</meta:user-defined>zorg', $spreadsheet->getProperties()->getCompany()); | ||
self::assertSame('h</meta:user-defined>zorg', $spreadsheet->getProperties()->getCategory()); | ||
self::assertSame('http://example.org', $newSheet->getCell('A2')->getValue()); | ||
self::assertSame('http://example.org/', $newSheet->getCell('A2')->getHyperlink()->getUrl()); | ||
self::assertSame('pa<ge1', $newSheet->getCell('A3')->getValue()); | ||
self::assertSame('http://example.org/page1.html', $newSheet->getCell('A3')->getHyperlink()->getUrl()); | ||
self::assertSame('go to Target', $newSheet->getCell('A4')->getValue()); | ||
self::assertSame('sheet://TargetSheet!B4', $newSheet->getCell('A4')->getHyperlink()->getUrl()); | ||
|
||
// Verify that http links are unchanged, | ||
// but internal sheet link has changed. | ||
$writer = new Ods($spreadsheet); | ||
$content = $writer->getWriterPartContent()->write(); | ||
self::assertStringContainsString('xlink:href="http://example.org/"', $content); | ||
self::assertStringContainsString('xlink:href="http://example.org/page1.html"', $content); | ||
self::assertStringContainsString('xlink:href="#TargetSheet!B4"', $content); | ||
self::assertStringNotContainsString('sheet:', $content); | ||
|
||
$spreadsheet->disconnectWorksheets(); | ||
} | ||
} |