BaseActions(); global $manager; $this->blog =& $manager->getBlog($blogid); // TODO: move the definition of actions to the createXForm // methods $this->actions = Array( 'actionurl', 'title', 'body', 'more', 'blogid', 'bloglink', 'blogname', 'authorname', 'checkedonval', 'helplink', 'currenttime', 'itemtime', 'init', 'text', 'jsinput', 'jsbuttonbar', 'categories', 'contents', 'ifblogsetting', 'ifitemproperty', 'else', 'endif', 'pluginextras', 'itemoptions', 'extrahead', 'ticket' ); // TODO: maybe add 'skin' later on? // TODO: maybe add other pages from admin area $this->allowedTypes = Array('bookmarklet','admin'); } /** * creates a "add item" form for a given type of page * * @param type * 'admin' or 'bookmarklet' */ function createAddForm($type, $contents = array()) { if (!in_array($type, $this->allowedTypes)) return; $this->type = $type; $this->method = 'add'; global $manager; $manager->notify('PreAddItemForm', array('contents' => &$contents, 'blog' => &$this->blog)); $this->createForm($contents); } /** * creates a "add item" form for a given type of page * * @param type * 'admin' or 'bookmarklet' * @param contents * An associative array * 'author' => author * '' => */ function createEditForm($type, $contents) { if (!in_array($type, $this->allowedTypes)) return; $this->type = $type; $this->method = 'edit'; $this->createForm($contents); } /** * (private) creates a form for a given type of page */ function createForm($contents) { // save contents $this->variables = $contents; // get template to use $template = $this->getTemplateFor($this->type); // use the PARSER engine to parse that template $parser =& new PARSER($this->actions, $this); $parser->parse($template); } /** * returns an appropriate template */ function getTemplateFor($type) { global $DIR_LIBS; $filename = $DIR_LIBS . 'include/' . $this->type . '-' . $this->method . '.template'; if (!file_exists($filename)) return ''; $fsize = filesize($filename); if ($fsize <= 0) return ''; // read file and return it $fd = fopen ($filename, 'r'); $contents = fread ($fd, $fsize); fclose ($fd); return $contents; } // create category dropdown box function parse_categories($startidx = 0) { if ($this->variables['catid']) $catid = $this->variables['catid']; // on edit item else $catid = $this->blog->getDefaultCategory(); // on add item ADMIN::selectBlogCategory('catid',$catid,$startidx,1,$this->blog->getID()); } function parse_blogid() { echo $this->blog->getID(); } function parse_blogname() { echo $this->blog->getName(); } function parse_bloglink() { echo ''.$this->blog->getName().''; } function parse_authorname() { // don't use on add item? global $member; echo $member->getDisplayName(); } function parse_title() { echo $this->contents['title']; } /** * Indicates the start of a conditional block of data. It will be added to * the output only if the blogsetting with the given name equals the * given value (default for value = 1 = true) * * the name of the blogsetting is the column name in the nucleus_blog table * * the conditional block ends with an var */ function parse_ifblogsetting($name,$value=1) { $this->_addIfCondition(($this->blog->getSetting($name) == $value)); } function parse_ifitemproperty($name,$value=1) { $this->_addIfCondition(($this->variables[$name] == $value)); } function parse_helplink($topic) { help($topic); } // for future items function parse_currenttime($what) { $nu = getdate($this->blog->getCorrectTime()); echo $nu[$what]; } // date change on edit item function parse_itemtime($what) { $itemtime = getdate($this->variables['timestamp']); echo $itemtime[$what]; } // some init stuff for all forms function parse_init() { $authorid = ($this->method == 'edit') ? $this->variables['authorid'] : ''; $this->blog->insertJavaScriptInfo($authorid); } // on bookmarklets only: insert extra html header information (by plugins) function parse_extrahead() { global $manager; $extrahead = ''; $manager->notify( 'BookmarkletExtraHead', array( 'extrahead' => &$extrahead ) ); echo $extrahead; } // inserts some localized text function parse_text($which) { // constant($which) only available from 4.0.4 :( if (defined($which)) { eval("echo $which;"); } else { echo $which; // this way we see where definitions are missing } } function parse_contents($which) { echo htmlspecialchars($this->variables[$which]); } function parse_checkedonval($value, $name) { if ($this->variables[$name] == $value) echo "checked='checked'"; } // extra javascript for input and textarea fields function parse_jsinput($which) { global $CONF; ?> name="" id="input" onkeyup="storeCaret(this); updPreview(''); doMonitor();" onclick="storeCaret(this);" onselect="storeCaret(this);" onkeyup="doMonitor();" onkeypress="shortCuts();" onkeyup="doMonitor();" '; $this->_jsbutton('cut','cutThis()',_ADD_CUT_TT . " (Ctrl + X)"); $this->_jsbutton('copy','copyThis()',_ADD_COPY_TT . " (Ctrl + C)"); $this->_jsbutton('paste','pasteThis()',_ADD_PASTE_TT . " (Ctrl + V)"); $this->_jsbuttonspacer(); $this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT ." (Ctrl + Shift + B)"); $this->_jsbutton('italic',"italicThis()",_ADD_ITALIC_TT ." (Ctrl + Shift + I)"); $this->_jsbutton('link',"ahrefThis()",_ADD_HREF_TT ." (Ctrl + Shift + A)"); $this->_jsbuttonspacer(); $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT); $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT); $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT); $this->_jsbuttonspacer(); $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT); $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT); if ($extrabuttons) { $btns = explode('+',$extrabuttons); $this->_jsbuttonspacer(); foreach ($btns as $button) { switch($button) { case "media": $this->_jsbutton('media',"addMedia()",_ADD_MEDIA_TT . " (Ctrl + Shift + M)"); break; case "preview": $this->_jsbutton('preview',"showedit()",_ADD_PREVIEW_TT); break; } } } echo ''; break; case "2": echo '
'; $this->_jsbutton('bold',"boldThis()",''); $this->_jsbutton('italic',"italicThis()",''); $this->_jsbutton('link',"ahrefThis()",''); $this->_jsbuttonspacer(); $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT); $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT); $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT); $this->_jsbuttonspacer(); $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT); $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT); if ($extrabuttons) { $btns = explode('+',$extrabuttons); $this->_jsbuttonspacer(); foreach ($btns as $button) { switch($button) { case "media": $this->_jsbutton('media',"addMedia()",''); break; } } } echo '
'; break; } } /** * Allows plugins to add their own custom fields */ function parse_pluginextras() { global $manager; switch ($this->method) { case 'add': $manager->notify('AddItemFormExtras', array( 'blog' => &$this->blog ) ); break; case 'edit': $manager->notify('EditItemFormExtras', array( 'variables' => $this->variables, 'blog' => &$this->blog, 'itemid' => $this->variables['itemid'] ) ); break; } } /** * Adds the itemOptions of a plugin to a page * @author TeRanEX */ function parse_itemoptions() { global $itemid; ADMIN::_insertPluginOptions('item', $itemid); } function parse_ticket() { global $manager; $manager->addTicketHidden(); } /** * convenience method */ function _jsbutton($type, $code ,$tooltip) { ?> <?php echo $tooltip?> '; } } ?>