1 <?php rcs_id('$Id: PageType.php,v 1.13 2002-09-04 20:39:47 dairiki Exp $');
3 Copyright 1999, 2000, 2001, 2002 $ThePhpWikiProgrammingTeam
5 This file is part of PhpWiki.
7 PhpWiki is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 PhpWiki is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with PhpWiki; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 include_once('lib/BlockParser.php');
31 * require_once('lib/PageType.php');
32 * $transformedContent = PageType($pagerevisionhandle, $pagename, $markup);
34 * The pagename and markup args are only required when displaying the content
35 * for an edit preview, otherwise they will be extracted from the page $revision
38 * See http://phpwiki.sourceforge.net/phpwiki/PageType
40 function PageType(&$rev, $pagename = false, $markup = false) {
42 if (isa($rev, 'WikiDB_PageRevision')) {
43 $text = $rev->getPackedContent();
44 $pagename = $rev->getPageName();
45 $markup = $rev->get('markup');
48 // Hopefully only an edit preview gets us here, else we might be screwed.
49 if ($pagename == false) {
50 $error_text = "DEBUG: \$rev was not a 'WikiDB_PageRevision'. (Are you not previewing a page edit?)"; //debugging message only
51 trigger_error($error_text, E_USER_NOTICE);
56 // PageType currently only works with InterWikiMap.
57 // Once a contentType field has been implemented in the
58 // database then that can be used instead of this pagename check.
59 $i = _("InterWikiMap");
62 $ContentTemplateName = 'interwikimap';
63 $content_template = new interWikiMapPageType($text, $markup);
66 $ContentTemplateName = 'wikitext';
67 $content_template = new PageType($text, $markup);
70 return $content_template->getContent();
79 * This is a simple WikiPage
85 function PageType (&$content, $markup) {
86 $this->_content = $content;
87 $this->_markup = $markup;
88 $this->_html = HTML();
90 $this->_defineSections();
91 $this->_populateSections();
94 function _defineSections() {
96 * ... section_id => ('css_class', $this->_section_function)
98 $this->_divs = array('wikitext' => array('wikitext', $this->_extractText()));
101 function _populateSections() {
102 foreach ($this->_divs as $section => $data) {
103 list($class, $function) = $data;
104 if (!empty($function))
105 $this->_html->pushContent(HTML::div(array('class' => $class), $function));
109 function _extractText() {
111 * Custom text extractions might want to check if the section
112 * contains any text using trim() before returning any
113 * transformed text, to avoid displaying blank boxes.
114 * See interWikiMapPageType->_extractStartText()
115 * and interWikiMapPageType->_extractEndText() for examples.
117 return TransformText($this->_content, $this->_markup);
120 function getContent() {
126 class interWikiMapPageType extends PageType {
128 function _defineSections() {
130 * section_id => ('css_class', $this->_section_function)
132 $this->_divs = array('interwikimap-header' => array('wikitext', $this->_extractStartText()),
133 'interwikimap' => array('wikitext', $this->_getMap()),
134 'interwikimap-footer' => array('wikitext', $this->_extractEndText()));
139 // let interwiki.php get the map
140 include_once("lib/interwiki.php");
141 $map = InterWikiMap::GetMap($request);
142 return $this->_arrayToTable($map->_map, $request);
145 function _arrayToTable ($array, &$request) {
146 $thead = HTML::thead();
147 $label[0] = _("Name");
148 $label[1] = _("InterWiki Address");
149 $thead->pushContent(HTML::tr(HTML::td($label[0]),
150 HTML::td($label[1])));
152 $tbody = HTML::tbody();
153 $dbi = $request->getDbh();
155 foreach ($array as $moniker => $interurl) {
156 if ($dbi->isWikiPage($moniker)) {
157 $moniker = WikiLink($moniker);
159 $moniker = HTML::td(array('class' => 'interwiki-moniker'), $moniker);
160 $interurl = HTML::td(array('class' =>'interwiki-url'), HTML::tt($interurl));
162 $tbody->pushContent(HTML::tr($moniker, $interurl));
165 $table = HTML::table();
166 $table->setAttr('class', 'interwiki-map');
167 $table->pushContent($thead);
168 $table->pushContent($tbody);
173 function _extractStartText() {
174 // get the start block of text
175 $v = strpos($this->_content, "<verbatim>");
177 list($wikitext, $cruft) = explode("<verbatim>", $this->_content);
179 $wikitext = $this->_content;
182 return TransformText($wikitext, $this->_markup);
187 function _extractEndText() {
188 // get the ending block of text
189 $v = strpos($this->_content, "</verbatim>");
191 list($cruft, $endtext) = explode("</verbatim>", $this->_content);
193 return TransformText($endtext, $this->_markup);
205 // c-hanging-comment-ender-p: nil
206 // indent-tabs-mode: nil