3 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
\r
4 * Copyright (C) 2002-2012 The Nucleus Group
\r
6 * This program is free software; you can redistribute it and/or
\r
7 * modify it under the terms of the GNU General Public License
\r
8 * as published by the Free Software Foundation; either version 2
\r
9 * of the License, or (at your option) any later version.
\r
10 * (see nucleus/documentation/index.html#license for more info)
\r
13 * @license http://nucleuscms.org/license.txt GNU General Public License
\r
14 * @copyright Copyright (C) 2002-2012 The Nucleus Group
\r
16 * $NucleusJP: PAGEFACTORY.php,v 1.8.2.2 2007/10/30 16:12:27 shizuki Exp $
\r
20 * The formfactory class can be used to insert add/edit item forms into
\r
21 * admin area, bookmarklet, skins or any other places where such a form
\r
24 class PAGEFACTORY extends BaseActions {
\r
26 // ref to the blog object for which an add:edit form is created
\r
29 // allowed actions (for parser)
\r
32 // allowed types of forms (bookmarklet/admin)
\r
34 var $type; // one of the types in $allowedTypes
\r
39 // info to fill out in the form (e.g. catid, itemid, ...)
\r
43 * creates a new PAGEFACTORY object
\r
45 function PAGEFACTORY($blogid) {
\r
46 // call constructor of superclass first
\r
47 $this->BaseActions();
\r
50 $this->blog =& $manager->getBlog($blogid);
\r
52 // TODO: move the definition of actions to the createXForm
\r
54 $this->actions = Array(
\r
86 // TODO: maybe add 'skin' later on?
\r
87 // TODO: maybe add other pages from admin area
\r
88 $this->allowedTypes = Array('bookmarklet','admin');
\r
92 * creates a "add item" form for a given type of page
\r
95 * 'admin' or 'bookmarklet'
\r
97 function createAddForm($type, $contents = array()) {
\r
98 if (!in_array($type, $this->allowedTypes))
\r
100 $this->type = $type;
\r
101 $this->method = 'add';
\r
105 'contents' => &$contents,
\r
106 'blog' => &$this->blog
\r
108 $manager->notify('PreAddItemForm', $param);
\r
110 $this->createForm($contents);
\r
114 * creates a "add item" form for a given type of page
\r
117 * 'admin' or 'bookmarklet'
\r
119 * An associative array
\r
120 * 'author' => author
\r
123 function createEditForm($type, $contents) {
\r
124 if (!in_array($type, $this->allowedTypes))
\r
126 $this->type = $type;
\r
127 $this->method = 'edit';
\r
128 $this->createForm($contents);
\r
132 * (private) creates a form for a given type of page
\r
134 function createForm($contents) {
\r
136 $this->variables = $contents;
\r
138 // get template to use
\r
139 $template = $this->getTemplateFor($this->type);
\r
141 // use the PARSER engine to parse that template
\r
142 $parser = new PARSER($this->actions, $this);
\r
143 $parser->parse($template);
\r
147 * returns an appropriate template
\r
149 function getTemplateFor($type) {
\r
152 $filename = $DIR_LIBS . 'include/' . $this->type . '-' . $this->method . '.template';
\r
154 if (!file_exists($filename))
\r
157 $fsize = filesize($filename);
\r
161 // read file and return it
\r
162 $fd = fopen ($filename, 'r');
\r
163 $contents = fread ($fd, $fsize);
\r
170 // create category dropdown box
\r
171 function parse_categories($startidx = 0) {
\r
172 if (array_key_exists('catid', $this->variables) && $this->variables['catid'])
\r
173 $catid = $this->variables['catid']; // on edit item
\r
175 $catid = $this->blog->getDefaultCategory(); // on add item
\r
177 ADMIN::selectBlogCategory('catid',$catid,$startidx,1,$this->blog->getID());
\r
180 function parse_blogid() {
\r
181 echo $this->blog->getID();
\r
184 function parse_blogname() {
\r
185 echo $this->blog->getName();
\r
188 function parse_bloglink() {
\r
189 echo '<a href="'.htmlspecialchars($this->blog->getURL()).'">'.htmlspecialchars($this->blog->getName()).'</a>';
\r
192 function parse_authorname() {
\r
193 // don't use on add item?
\r
195 echo $member->getDisplayName();
\r
198 function parse_title() {
\r
199 echo $this->contents['title'];
\r
203 * Indicates the start of a conditional block of data. It will be added to
\r
204 * the output only if the blogsetting with the given name equals the
\r
205 * given value (default for value = 1 = true)
\r
207 * the name of the blogsetting is the column name in the nucleus_blog table
\r
209 * the conditional block ends with an <endif> var
\r
211 function parse_ifblogsetting($name,$value=1) {
\r
212 $this->_addIfCondition(($this->blog->getSetting($name) == $value));
\r
215 function parse_ifitemproperty($name,$value=1) {
\r
216 $this->_addIfCondition(($this->variables[$name] == $value));
\r
219 function parse_ifautosave($name,$value=1) {
\r
221 $this->_addIfCondition($member->getAutosave() == $value);
\r
224 function parse_helplink($topic) {
\r
228 // for future items
\r
229 function parse_currenttime($what) {
\r
230 $nu = getdate($this->blog->getCorrectTime());
\r
234 // date change on edit item
\r
235 function parse_itemtime($what) {
\r
236 $itemtime = getdate($this->variables['timestamp']);
\r
237 echo $itemtime[$what];
\r
240 // some init stuff for all forms
\r
241 function parse_init() {
\r
242 $authorid = ($this->method == 'edit') ? $this->variables['authorid'] : '';
\r
243 $this->blog->insertJavaScriptInfo($authorid);
\r
246 // on bookmarklets only: insert extra html header information (by plugins)
\r
247 function parse_extrahead() {
\r
253 'extrahead' => &$extrahead
\r
255 $manager->notify('BookmarkletExtraHead', $param);
\r
260 // inserts some localized text
\r
261 function parse_text($which) {
\r
262 // constant($which) only available from 4.0.4 :(
\r
263 if (defined($which)) {
\r
264 eval("echo $which;");
\r
266 echo $which; // this way we see where definitions are missing
\r
271 function parse_contents($which) {
\r
272 if (!isset($this->variables[$which])) $this->variables[$which] = '';
\r
273 echo htmlspecialchars($this->variables[$which],ENT_QUOTES);
\r
276 function parse_checkedonval($value, $name) {
\r
277 if (!isset($this->variables[$name])) $this->variables[$name] = '';
\r
278 if ($this->variables[$name] == $value)
\r
279 echo 'checked="checked"';
\r
282 // extra javascript for input and textarea fields
\r
283 function parse_jsinput($which) {
\r
284 global $CONF, $member;
\r
286 $attributes = " name=\"{$which}\"";
\r
287 $attributes .= " id=\"input{$which}\"";
\r
289 if ($CONF['DisableJsTools'] != 1) {
\r
290 $attributes .= ' onclick="storeCaret(this);"';
\r
291 $attributes .= ' onselect="storeCaret(this);"';
\r
292 if ($member->getAutosave()) {
\r
293 $attributes .= " onkeyup=\"storeCaret(this); updPreview('{$which}'); doMonitor();\"";
\r
295 $attributes .= " onkeyup=\"storeCaret(this); updPreview('{$which}');\"";
\r
299 if ($CONF['DisableJsTools'] == 0) {
\r
300 $attributes .= ' onkeypress="shortCuts();"';
\r
302 if ($member->getAutosave()) {
\r
303 $attributes .= ' onkeyup="doMonitor();"';
\r
309 // shows the javascript button bar
\r
310 function parse_jsbuttonbar($extrabuttons = "") {
\r
312 switch($CONF['DisableJsTools']) {
\r
315 echo '<div class="jsbuttonbar">';
\r
317 $this->_jsbutton('cut','cutThis()',_ADD_CUT_TT . " (Ctrl + X)");
\r
318 $this->_jsbutton('copy','copyThis()',_ADD_COPY_TT . " (Ctrl + C)");
\r
319 $this->_jsbutton('paste','pasteThis()',_ADD_PASTE_TT . " (Ctrl + V)");
\r
320 $this->_jsbuttonspacer();
\r
321 $this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT ." (Ctrl + Shift + B)");
\r
322 $this->_jsbutton('italic',"italicThis()",_ADD_ITALIC_TT ." (Ctrl + Shift + I)");
\r
323 $this->_jsbutton('link',"ahrefThis()",_ADD_HREF_TT ." (Ctrl + Shift + A)");
\r
324 $this->_jsbuttonspacer();
\r
325 $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);
\r
326 $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT);
\r
327 $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT);
\r
328 $this->_jsbuttonspacer();
\r
329 $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT);
\r
330 $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT);
\r
333 if ($extrabuttons) {
\r
334 $btns = explode('+',$extrabuttons);
\r
335 $this->_jsbuttonspacer();
\r
336 foreach ($btns as $button) {
\r
339 $this->_jsbutton('media',"addMedia()",_ADD_MEDIA_TT . " (Ctrl + Shift + M)");
\r
342 $this->_jsbutton('preview',"showedit()",_ADD_PREVIEW_TT);
\r
352 echo '<div class="jsbuttonbar">';
\r
354 $this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT);
\r
355 $this->_jsbutton('italic',"italicThis()",_ADD_ITALIC_TT);
\r
356 $this->_jsbutton('link',"ahrefThis()",_ADD_HREF_TT);
\r
357 $this->_jsbuttonspacer();
\r
358 $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);
\r
359 $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT);
\r
360 $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT);
\r
361 $this->_jsbuttonspacer();
\r
362 $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT);
\r
363 $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT);
\r
366 if ($extrabuttons) {
\r
367 $btns = explode('+',$extrabuttons);
\r
368 $this->_jsbuttonspacer();
\r
369 foreach ($btns as $button) {
\r
372 $this->_jsbutton('media',"addMedia()",_ADD_MEDIA_TT);
\r
385 * Allows plugins to add their own custom fields
\r
387 function parse_pluginextras() {
\r
390 switch ($this->method) {
\r
393 'blog' => &$this->blog
\r
395 $manager->notify('AddItemFormExtras', $param);
\r
399 'variables' => $this->variables,
\r
400 'blog' => &$this->blog,
\r
401 'itemid' => $this->variables['itemid']
\r
403 $manager->notify('EditItemFormExtras', $param);
\r
409 * Adds the itemOptions of a plugin to a page
\r
412 function parse_itemoptions() {
\r
414 ADMIN::_insertPluginOptions('item', $itemid);
\r
417 function parse_ticket() {
\r
419 $manager->addTicketHidden();
\r
423 * convenience method
\r
425 function _jsbutton($type, $code ,$tooltip) {
\r
427 <span class="jsbutton"
\r
428 onmouseover="BtnHighlight(this);"
\r
429 onmouseout="BtnNormal(this);"
\r
430 onclick="<?php echo $code?>" >
\r
431 <img src="images/button-<?php echo $type?>.gif" alt="<?php echo $tooltip?>" title="<?php echo $tooltip?>" width="16" height="16"/>
\r
435 function _jsbuttonspacer() {
\r
436 echo '<span class="jsbuttonspacer"> </span>';
\r