]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/display.php
Moved "redirected from" message onto next line after h1,
[SourceForge/phpwiki.git] / lib / display.php
1 <?php
2 // display.php: fetch page or get default content
3 rcs_id('$Id: display.php,v 1.48 2003-11-04 18:20:20 carstenklapp Exp $');
4
5 require_once('lib/Template.php');
6
7 /**
8  * Extract keywords from Category* links on page. 
9  */
10 function GleanKeywords ($page) {
11     global $KeywordLinkRegexp;
12
13     $links = $page->getLinks(false);
14
15     $keywords[] = split_pagename($page->getName());
16     
17     while ($link = $links->next())
18         if (preg_match("/${KeywordLinkRegexp}/x", $link->getName(), $m))
19             $keywords[] = split_pagename($m[0]);
20
21     $keywords[] = WIKI_NAME;
22     
23     return join(', ', $keywords);
24 }
25
26 /** Make a link back to redirecting page.
27  *
28  * @param $pagename string  Name of redirecting page.
29  * @return XmlContent Link to the redirecting page.
30  */
31 function RedirectorLink($pagename) {
32     $url = WikiURL($pagename, array('redirectfrom' => ''));
33     return HTML::a(array('class' => 'redirectfrom wiki',
34                          'href' => $url),
35                    $pagename);
36 }
37
38     
39 function actionPage(&$request, $action) {
40     global $Theme;
41
42     $pagename = $request->getArg('pagename');
43     $version = $request->getArg('version');
44
45     $page = $request->getPage();
46     $revision = $page->getCurrentRevision();
47
48     $dbi = $request->getDbh();
49     $actionpage = $dbi->getPage($action);
50     $actionrev = $actionpage->getCurrentRevision();
51
52     // $splitname = split_pagename($pagename);
53
54     $pagetitle = HTML(fmt("%s: %s", $actionpage->getName(),
55                           $Theme->linkExistingWikiWord($pagename, false, $version)));
56
57     $validators = new HTTP_ValidatorSet(array('pageversion' => $revision->getVersion(),
58                                               '%mtime' => $revision->get('mtime')));
59                                         
60     $request->appendValidators(array('pagerev' => $revision->getVersion(),
61                                      '%mtime' => $revision->get('mtime')));
62     $request->appendValidators(array('actionpagerev' => $actionrev->getVersion(),
63                                      '%mtime' => $actionrev->get('mtime')));
64
65     $transformedContent = $actionrev->getTransformedContent();
66     $template = Template('browse', array('CONTENT' => $transformedContent));
67
68     header("Content-Type: text/html; charset=" . CHARSET);
69     GeneratePage($template, $pagetitle, $revision);
70     $request->checkValidators();
71     flush();
72 }
73
74 function displayPage(&$request, $template=false) {
75     $pagename = $request->getArg('pagename');
76     $version = $request->getArg('version');
77     $page = $request->getPage();
78     if ($version) {
79         $revision = $page->getRevision($version);
80         if (!$revision)
81             NoSuchRevision($request, $page, $version);
82     }
83     else {
84         $revision = $page->getCurrentRevision();
85     }
86
87     $splitname = split_pagename($pagename);
88     if (isSubPage($pagename)) {
89         $pages = explode(SUBPAGE_SEPARATOR,$pagename);
90         $last_page = array_pop($pages); // deletes last element from array as side-effect
91         $pagetitle = HTML::span(HTML::a(array('href' => WikiURL($pages[0]),
92                                               'class' => 'pagetitle'
93                                               ),
94                                         split_pagename($pages[0] . SUBPAGE_SEPARATOR)));
95         $first_pages = $pages[0] . SUBPAGE_SEPARATOR;
96         array_shift($pages);
97         foreach ($pages as $p)  {
98             $pagetitle->pushContent(HTML::a(array('href' => WikiURL($first_pages . $p),
99                                                   'class' => 'backlinks'),
100                                        split_pagename($p . SUBPAGE_SEPARATOR)));
101             $first_pages .= $p . SUBPAGE_SEPARATOR;
102         }
103         $backlink = HTML::a(array('href' => WikiURL($pagename,
104                                                     array('action' => _("BackLinks"))),
105                                   'class' => 'backlinks'),
106                             split_pagename($last_page));
107         $backlink->addTooltip(sprintf(_("BackLinks for %s"), $pagename));
108         $pagetitle->pushContent($backlink);
109     } else {
110         $pagetitle = HTML::a(array('href' => WikiURL($pagename,
111                                                      array('action' => _("BackLinks"))),
112                                    'class' => 'backlinks'),
113                              $splitname);
114         $pagetitle->addTooltip(sprintf(_("BackLinks for %s"), $pagename));
115         if ($request->getArg('frame'))
116             $pagetitle->setAttr('target', '_top');
117     }
118
119     $pageheader = $pagetitle;
120     if (($redirect_from = $request->getArg('redirectfrom'))) {
121         $redirect_message = HTML::span(array('class' => 'redirectfrom'),
122                                        fmt("(Redirected from %s)",
123                                            RedirectorLink($redirect_from)));
124     }
125
126     $request->appendValidators(array('pagerev' => $revision->getVersion(),
127                                      '%mtime' => $revision->get('mtime')));
128
129     // FIXME: should probably be in a template...
130     header("Content-Type: text/html; charset=" . CHARSET); // FIXME: this gets done twice?
131
132     $page_content = $revision->getTransformedContent();
133     
134     $toks['CONTENT'] = new Template('browse', $request, $page_content);
135     
136     $toks['TITLE'] = $pagetitle;
137     $toks['HEADER'] = $pageheader;
138     $toks['revision'] = $revision;
139     if (!empty($redirect_message))
140         $toks['redirected'] = $redirect_message;
141     $toks['ROBOTS_META'] = 'index,follow';
142     $toks['PAGE_DESCRIPTION'] = $page_content->getDescription();
143     $toks['PAGE_KEYWORDS'] = GleanKeywords($page);
144     
145     if (!$template)
146         $template = new Template('html', $request);
147
148     $template->printExpansion($toks);
149     $page->increaseHitCount();
150
151     $request->checkValidators();
152     flush();
153 }
154
155 // For emacs users
156 // Local Variables:
157 // mode: php
158 // tab-width: 8
159 // c-basic-offset: 4
160 // c-hanging-comment-ender-p: nil
161 // indent-tabs-mode: nil
162 // End:
163 ?>