2 rcs_id('$Id: AppendText.php,v 1.5 2004-11-26 18:39:02 rurban Exp $');
4 Copyright 2004 $ThePhpWikiProgrammingTeam
6 This file is part of PhpWiki.
8 PhpWiki is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 PhpWiki is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with PhpWiki; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 * Append text to an existing page.
26 * @Author: Pascal Giard <evilynux@gmail.com>
28 * See http://sourceforge.net/mailarchive/message.php?msg_id=10141823
29 * why not to use "text" as parameter. Nasty mozilla bug with mult. radio rows.
31 class WikiPlugin_AppendText
35 return _("AppendText");
38 function getDescription() {
39 return _("Append text to any page in this wiki.");
42 function getVersion() {
43 return preg_replace("/[Revision: $]/", '',
47 function getDefaultArguments() {
48 return array('page' => '[pagename]',
49 's' => '', // Text to append.
50 'before' => '', // Add before (ignores after if defined)
51 'after' => '', // Add after line beginning with this
52 'redirect' => false // Redirect to modified page
56 function _fallback($addtext, $oldtext, $notfound, &$message) {
57 $message->pushContent(sprintf(_("%s not found. Appending at the end.\n"), $notfound));
58 return $oldtext . "\n" . $addtext;
61 function run($dbi, $argstr, &$request, $basepage) {
63 $args = $this->getArgs($argstr, $request);
64 $pagename = $args['page'];
66 if (empty($args['s'])) {
67 if ($request->isPost()) {
68 if ($pagename != _("AppendText"))
69 return HTML($request->redirect(WikiURL($pagename, false, 'absurl'), false));
74 $page = $dbi->getPage($pagename);
77 if (!$page->exists()) { // We might want to create it?
78 $message->pushContent(sprintf(_("Page could not be updated. %s doesn't exist!\n"),
83 $current = $page->getCurrentRevision();
84 $oldtext = $current->getPackedContent();
87 // If a "before" or "after" is specified but not found, we simply append text to the end.
88 if (!empty($args['before'])) {
89 $before = preg_quote($args['before'], "/");
91 $newtext = preg_match("/\n${before}/", $oldtext)
92 ? preg_replace("/(\n${before})/",
93 "\n" . preg_quote($text, "/") . "\\1",
95 : $this->_fallback($text, $oldtext, $args['before'], &$message);
96 } elseif (!empty($args['after'])) {
98 $after = preg_quote($args['after'], "/");
99 $newtext = preg_match("/\n${after}/", $oldtext)
100 ? preg_replace("/(\n${after})/",
101 "\\1\n" . preg_quote($text, "/"),
103 : $this->_fallback($text, $oldtext, $args['after'], &$message);
106 $newtext = $oldtext .
110 require_once("lib/loadsave.php");
111 $meta = $current->_data;
112 $meta['summary'] = sprintf(_("AppendText to %s"), $pagename);
113 if ($page->save($newtext, $current->getVersion() + 1, $meta)) {
114 $message->pushContent(_("Page successfully updated."), HTML::br());
117 // AppendText has been called from the same page that got modified
118 // so we directly show the page.
119 if ( $request->getArg($pagename) == $pagename ) {
120 // TODO: Just invalidate the cache, if AppendText didn't
121 // change anything before.
123 return $request->redirect(WikiURL($pagename, false, 'absurl'), false);
125 // The user asked to be redirected to the modified page
126 } elseif ($args['redirect']) {
127 return $request->redirect(WikiURL($pagename, false, 'absurl'), false);
130 $link = HTML::em(WikiLink($pagename));
131 $message->pushContent(HTML::Raw(sprintf(_("Go to %s."), $link->asXml())));
138 // $Log: not supported by cvs2svn $
139 // Revision ext-1.4 2004/11/25 15:39:40 Pascal Giard <evilynux@gmail.com>
140 // * Directly including modified page when AppendText got called from
141 // the page to be modified.
142 // * Translatable link to page.
144 // Revision ext-1.3 2004/11/25 9:44:45 Pascal Giard <evilynux@gmail.com>
145 // * text modified to s to workaround mozilla bug.
146 // * Added redirect parameter allowing you to be redirected to the modified page.
148 // Revision 1.4 2004/11/25 17:20:52 rurban
149 // and again a couple of more native db args: backlinks
151 // Revision 1.3 2004/11/25 13:56:23 rurban
152 // renamed text to s because of nasty mozilla radio button bug
154 // Revision 1.2 2004/11/25 08:29:43 rurban
155 // update from Pascal
157 // Revision ext-1.2 2004/11/24 11:22:30 Pascal Giard <evilynux@gmail.com>
158 // * Integrated rurban's modifications.
160 // Revision 1.1 2004/11/24 09:25:35 rurban
161 // simple plugin by Pascal Giard (QC/EMC)
163 // Revision 1.0 2004/11/23 09:43:35 epasgia
164 // * Initial version.
171 // c-hanging-comment-ender-p: nil
172 // indent-tabs-mode: nil