Skip to content

Commit b6306a3

Browse files
committed
Respect $conf[useheading] for title fields w/o title
Also add tests for fields of the type page, title, and pageid
1 parent 1e92136 commit b6306a3

File tree

2 files changed

+129
-12
lines changed

2 files changed

+129
-12
lines changed

_test/syntax_plugin_data_entry.test.php

Lines changed: 125 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@
22

33
require_once DOKU_INC . 'inc/parser/xhtml.php';
44

5+
class Doku_Renderer_xhtml_mock extends Doku_Renderer_xhtml {
6+
7+
function internallink($id, $name = null, $search = null, $returnonly = false, $linktype = 'content') {
8+
$inputvalues = array(
9+
'id' => $id,
10+
'name' => $name,
11+
'search' => $search,
12+
'returnonly' => $returnonly,
13+
'linktype' => $linktype
14+
);
15+
return "<internallink>" . serialize($inputvalues) . "</internallink>";
16+
}
17+
}
18+
519
/**
620
* @group plugin_data
721
* @group plugins
@@ -12,6 +26,10 @@ class syntax_plugin_data_entry_test extends DokuWikiTest {
1226

1327
private $exampleEntry;
1428

29+
public function setUp() {
30+
parent::setUp();
31+
}
32+
1533
function __construct() {
1634
$this->exampleEntry = "---- dataentry projects ----\n"
1735
. "type : web development\n"
@@ -65,36 +83,131 @@ function testHandle() {
6583
$this->assertEquals($cols, $result['cols'], 'Cols array corrupted');
6684
}
6785

86+
function test_pageEntry_noTitle() {
87+
$test_entry = '---- dataentry ----
88+
test1_page: foo
89+
----';
90+
91+
/** @var syntax_plugin_data_entry $plugin */
92+
$plugin = plugin_load('syntax','data_entry');
93+
94+
$handler = new Doku_Handler();
95+
$data = $plugin->handle($test_entry, 0, 10, $handler);
96+
$renderer = new Doku_Renderer_xhtml_mock();
97+
$plugin->render('xhtml',$renderer,$data);
98+
$result = $renderer->doc;
99+
$result = substr($result,0,strpos($result,'</internallink>'));
100+
$result = substr($result,strpos($result,'<internallink>')+14);
101+
$result = unserialize($result);
102+
103+
$this->assertSame('foo',$result['id']);
104+
$this->assertSame(null,$result['name'], 'page does not accept a title. useheading decides');
105+
}
106+
107+
function test_pageEntry_withTitle() {
108+
$test_entry = '---- dataentry ----
109+
test1_page: foo|bar
110+
----';
111+
112+
/** @var syntax_plugin_data_entry $plugin */
113+
$plugin = plugin_load('syntax','data_entry');
114+
115+
$handler = new Doku_Handler();
116+
$data = $plugin->handle($test_entry, 0, 10, $handler);
117+
$renderer = new Doku_Renderer_xhtml_mock();
118+
$plugin->render('xhtml',$renderer,$data);
119+
$result = $renderer->doc;
120+
$result = substr($result,0,strpos($result,'</internallink>'));
121+
$result = substr($result,strpos($result,'<internallink>')+14);
122+
$result = unserialize($result);
123+
124+
$this->assertSame('foo_bar',$result['id'], 'for type page a title becomes part of the id');
125+
$this->assertSame(null,$result['name'], 'page never accepts a title. useheading decides');
126+
}
127+
128+
function test_pageidEntry_noTitle() {
129+
$test_entry = '---- dataentry ----
130+
test1_pageid: foo
131+
----';
132+
133+
/** @var syntax_plugin_data_entry $plugin */
134+
$plugin = plugin_load('syntax','data_entry');
135+
136+
$handler = new Doku_Handler();
137+
$data = $plugin->handle($test_entry, 0, 10, $handler);
138+
$renderer = new Doku_Renderer_xhtml_mock();
139+
$plugin->render('xhtml',$renderer,$data);
140+
$result = $renderer->doc;
141+
$result = substr($result,0,strpos($result,'</internallink>'));
142+
$result = substr($result,strpos($result,'<internallink>')+14);
143+
$result = unserialize($result);
144+
145+
$this->assertSame('foo',$result['id']);
146+
$this->assertSame('foo',$result['name'], 'pageid: use the pageid as title if no title is provided.');
147+
}
148+
149+
function test_pageidEntry_withTitle() {
150+
$test_entry = '---- dataentry ----
151+
test1_pageid: foo|bar
152+
----';
153+
154+
/** @var syntax_plugin_data_entry $plugin */
155+
$plugin = plugin_load('syntax','data_entry');
156+
157+
$handler = new Doku_Handler();
158+
$data = $plugin->handle($test_entry, 0, 10, $handler);
159+
$renderer = new Doku_Renderer_xhtml_mock();
160+
$plugin->render('xhtml',$renderer,$data);
161+
$result = $renderer->doc;
162+
$result = substr($result,0,strpos($result,'</internallink>'));
163+
$result = substr($result,strpos($result,'<internallink>')+14);
164+
$result = unserialize($result);
165+
166+
$this->assertSame('foo',$result['id'], "wrong id handed to internal link");
167+
$this->assertSame('bar',$result['name'], 'pageid: use the provided title');
168+
}
169+
68170
function test_titleEntry_noTitle() {
69171
$test_entry = '---- dataentry ----
70-
test_title: bar
172+
test1_title: foo
71173
----';
72-
$plugin = new syntax_plugin_data_entry();
174+
175+
/** @var syntax_plugin_data_entry $plugin */
176+
$plugin = plugin_load('syntax','data_entry');
73177

74178
$handler = new Doku_Handler();
75179
$data = $plugin->handle($test_entry, 0, 10, $handler);
76-
$renderer = new Doku_Renderer_xhtml();
180+
$renderer = new Doku_Renderer_xhtml_mock();
77181
$plugin->render('xhtml',$renderer,$data);
78182
$result = $renderer->doc;
79-
$result = substr($result,0,strpos($result,'</a>')+4);
80-
$result = substr($result,strpos($result,'<a'));
81-
$this->assertSame('<a href="/./doku.php?id=bar" class="wikilink2" title="bar" rel="nofollow">bar</a>',$result);
183+
$result = substr($result,0,strpos($result,'</internallink>'));
184+
$result = substr($result,strpos($result,'<internallink>')+14);
185+
$result = unserialize($result);
186+
187+
$this->assertSame('foo',$result['id']);
188+
$this->assertSame(null,$result['name'], 'no title should be given to internal link. Let useheading decide.');
82189
}
83190

191+
84192
function test_titleEntry_withTitle() {
85193
$test_entry = '---- dataentry ----
86-
test_title: link:to:page|TitleOfPage
194+
test3_title: link:to:page|TitleOfPage
87195
----';
88-
$plugin = new syntax_plugin_data_entry();
196+
197+
/** @var syntax_plugin_data_entry $plugin */
198+
$plugin = plugin_load('syntax','data_entry');
89199

90200
$handler = new Doku_Handler();
91201
$data = $plugin->handle($test_entry, 0, 10, $handler);
92-
$renderer = new Doku_Renderer_xhtml();
202+
$renderer = new Doku_Renderer_xhtml_mock();
93203
$plugin->render('xhtml',$renderer,$data);
94204
$result = $renderer->doc;
95-
$result = substr($result,0,strpos($result,'</a>')+4);
96-
$result = substr($result,strpos($result,'<a'));
97-
$this->assertSame('<a href="/./doku.php?id=link:to:page" class="wikilink2" title="link:to:page" rel="nofollow">TitleOfPage</a>',$result);
205+
$result = substr($result,0,strpos($result,'</internallink>'));
206+
$result = substr($result,strpos($result,'<internallink>')+14);
207+
$result = unserialize($result);
208+
209+
$this->assertSame('link:to:page',$result['id']);
210+
$this->assertSame('TitleOfPage',$result['name'], 'The Title provided should be the title shown.');
98211
}
99212

100213
function test_editToWiki() {

helper.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,10 @@ function _formatData($column, $value, Doku_Renderer_xhtml $R) {
235235
$outs[] = $R->internallink($val, null, null, true);
236236
break;
237237
case 'title':
238+
list($id, $title) = explode('|', $val, 2);
239+
$id = $this->_addPrePostFixes($column['type'], $id);
240+
$outs[] = $R->internallink($id, $title, null, true);
241+
break;
238242
case 'pageid':
239243
list($id, $title) = explode('|', $val, 2);
240244

0 commit comments

Comments
 (0)