Hi everyone, the attaChed patch-set refactores the media upload form to make use the new form class introduced a while ago. This effectively allows to add custom form fields via action plugins which could be helpful in regards to the also lately added MEDIA_UPLOAD_FINISH event. It also introduces the possibility to set the form enctype via the form class constructor. Another thing: the form class code was recently changed because the CSS class edit was hardcoded - but - the way it is now it seems that one can't interfere with the CSS classes of certain field types either. Take this function, responsible for the text fields, as example: function form_makeTextField($name, $value='', $label=null, $id='', $class='', $attrs=array()) { if (is_null($label)) $label = $name; $elem = array('_elem'=>'textfield', '_text'=>$label, '_class'=>$class, 'id'=>$id, 'name'=>$name, 'value'=>$value, 'class'=>'edit'); return array_merge($elem, $attrs); } if I use this function like this: $form->addElement(form_makeTextField('id', '', $lang['txt_filename'].':', 'upload__name'), '', array('class'=>'edit test')); the CSS class of the input field does not, as expected, change to class="edit test" instead the resulting class is still "edit". I have to confess that I don't understand this - because according to the php docs the value of 'class' which is hold in $elem should be overwritten by the one provided in $attrs on the array_merge() call. Maybe someone else can either confirm this behaviour? Best Regards, Michi -- Michael Klier mail: chi@xxxxxxxxxxx www: http://www.chimeric.de icq: 206179334 jabber: chi@xxxxxxxxxxxxxxxxxx key: http://downloads.chimeric.de/chi.asc key-id: 0x8308F551
New patches: [allow enctype setting in form class Michael Klier <chi@xxxxxxxxxxx>**20071029134359] { hunk ./inc/form.php 38 + // Change for special forms only + var $enctype = ''; + hunk ./inc/form.php 64 - function Doku_Form($id, $action=false, $method=false) { + function Doku_Form($id, $action=false, $method=false, $enctype=false) { hunk ./inc/form.php 68 + if ($enctype) $this->enctype = $enctype; hunk ./inc/form.php 245 + if (!empty($this->enctype)) print ' enctype="'.$this->enctype.'"'; } [refactored media upload form Michael Klier <chi@xxxxxxxxxxx>**20071029134739] { hunk ./inc/media.php 564 - ?> - <div class="upload"><?php echo $lang['mediaupload']?></div> - <form action="<?php echo DOKU_BASE?>lib/exe/mediamanager.php" - method="post" enctype="multipart/form-data" class="upload"> - <fieldset> - <legend class="hidden"><?php echo $lang['btn_upload']?></legend> - <input type="hidden" name="ns" value="<?php echo hsc($ns)?>" /> - <?php formSecurityToken();?> - <p> - <label for="upload__file"><?php echo $lang['txt_upload']?>:</label> - <input type="file" name="upload" class="edit" id="upload__file" /> - </p> + print '<div class="upload">' . $lang['mediaupload'] . '</div>'; + $form = new Doku_Form('dw__upload', DOKU_BASE.'lib/exe/mediamanager.php', false, 'multipart/form-data'); + $form->addElement(formSecurityToken()); + $form->addHidden('ns', hsc($ns)); + $form->addElement(form_makeOpenTag('p')); + $form->addElement(form_makeFileField('upload', $lang['txt_upload'].':', 'upload__file')); + $form->addElement(form_makeCloseTag('p')); + $form->addElement(form_makeOpenTag('p')); + $form->addElement(form_makeTextField('id', '', $lang['txt_filename'].':', 'upload__name')); + $form->addElement(form_makeButton('submit', '', $lang['btn_upload'])); + $form->addElement(form_makeCloseTag('p')); hunk ./inc/media.php 576 - <p> - <label for="upload__name"><?php echo $lang['txt_filename']?>:</label> - <span class="nowrap"> - <input type="text" name="id" class="edit" id="upload__name" /><input - type="submit" class="button" value="<?php echo $lang['btn_upload']?>" - accesskey="s" /> - </span> - </p> + if($auth >= AUTH_DELETE){ + $form->addElement(form_makeOpenTag('p')); + $form->addElement(form_makeCheckboxField('ow', 1, $lang['txt_overwrt'], 'dw__ow', 'check')); + $form->addElement(form_makeCloseTag('p')); + } hunk ./inc/media.php 582 - <?php if($auth >= AUTH_DELETE){?> - <p> - <input type="checkbox" name="ow" value="1" id="dw__ow" class="check" /> - <label for="dw__ow" class="check"><?php echo $lang['txt_overwrt']?></label> - </p> - <?php }?> - </fieldset> - </form> - <?php + html_form('upload', $form); hunk ./inc/media.php 585 - - } [CSS update for media form Michael Klier <chi@xxxxxxxxxxx>**20071029135607] { hunk ./lib/tpl/default/media.css 137 -#media__content form.upload { +#media__content form#dw__upload { hunk ./lib/tpl/default/media.css 142 -#media__content form.upload fieldset { +#media__content form#dw__upload fieldset { hunk ./lib/tpl/default/media.css 148 -#media__content form.upload p { - clear: left; +#media__content form#dw__upload p { hunk ./lib/tpl/default/media.css 154 -#media__content form.upload label { - float: left; - width: 30%; -} -#media__content form.upload label.check { +#media__content form#dw__upload label.check { hunk ./lib/tpl/default/media.css 157 -} -#media__content form.upload input.check { - margin-left: 30%; + margin-left: 11.5em; } [added makeFileField method to form class Michael Klier <chi@xxxxxxxxxxx>**20071029141013] { hunk ./inc/form.php 430 +/** + * form_makeFileField + * + * Create a form element for a file input element with label + * + * @see form_makeField + * @author Michael Klier <chi@xxxxxxxxxxx> + */ +function form_makeFileField($name, $label=null, $id='', $class='', $attrs=array()) { + if (is_null($label)) $label = $name; + $elem = array('_elem'=>'filefield', '_text'=>$label, '_class'=>$class, + 'id'=>$id, 'name'=>$name, 'class'=>'edit'); + return array_merge($elem, $attrs); +} + hunk ./inc/form.php 742 + $s .= '<br />'; + return $s; +} + +/** + * form_filefield + * + * Print the HTML for a file input field. + * _class : class attribute used on the label tag + * _text : Text to display before the input. Not escaped + * _maxlength : Allowed size in byte + * _accept : Accepted mime-type + * Other attributes are passed to buildAttributes() for the input tag + * + * @author Michael Klier <chi@xxxxxxxxxxx> + */ +function form_filefield($attrs) { + $s = '<label class="'.$attrs['_class'].'"'; + if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; + $s .= '><span>'.$attrs['_text'].'</span> '; + $s .= '<input type="file" '.buildAttributes($attrs,true); + if (!empty($attrs['_maxlength'])) $s .= ' maxlength="'.$attrs['_maxlength'].'"'; + if (!empty($attrs['_accept'])) $s .= ' accept="'.$attrs['_accept'].'"'; + $s .= '/></label>'; + if (preg_match('/(^| )block($| )/', $attrs['_class'])) } Context: [adds a second class to action buttons Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071026210930] [Galician language update Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071026205405] [Turkish update Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071026185916] [Translatable JavaScript strings for plugins Gabriel Birke <Gabriel.Birke@xxxxxxxxx>**20071026131130 Strings to be used in plugin provided JavaScript can now be put into the plugin's lang.php files. It has to be stored as subkeys of $lang['js']. Eg the following in lib/plugins/blah/lang/en/lang.php $lang['js']['foo'] = "bar"; will be available from JavaScript code as LANG['plugins']['blah']['foo'] ] [Brasilian Portuguese Update Frederico Goncalves Guimaraes <frederico@xxxxxxxxxxx>**20071026110711] [Malagasy translation added infogasy.net <contact@xxxxxxxxxxxx>**20071026105801] [Latvian language update Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071019063310] [Allow HTML from inline RSS (typo fix) Tom N Harris <tnharris@xxxxxxxxxxxxx>**20071015225606] [Fix border condition on recent change update Tom N Harris <tnharris@xxxxxxxxxxxxx>**20071015225711] [header support for renderer plugins Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071016185626 Renderer plugins now can store HTTP header information in 'format <mode>' which will be used to send their output. Also fixes a problem with loading cache files. ] [fixed Thai romanization Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071015170603] [tiny compatibility fix for FeedParser Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071015121248 This should make older plugins working with a SimplePie Beta wor with Dokuwiki's current SimplePie version ] [Reduce memory requirement for indexer Tom N Harris <tnharris@xxxxxxxxxxxxx>**20071012000327] [fixed URLs in plugin and user manager Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071013191842 For the new plugin repository, plugins should use a page named after their class at wiki.splitbrain.org ] [xmlrpc_putpage Dennis Ploeger <develop@xxxxxxxxxxxxxx>**20071012135930 Adds the putpage-method to the xmlrpc-server-code ] [X-Sendfile support for fetch.php Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071008185019 This patch enables the use of the X-Sendfile extension offered by certain webservers to deliver static files after running a dynamic script. This combines the flexibility of a PHP file to check for authorization, caching and resizing with the low memory footprint and high performance of static file delivery of the webserver. See http://blog.lighttpd.net/articles/2006/07/02/x-sendfile for details ] [esperanto update Andreas Gohr <andi@xxxxxxxxxxxxxx>**20071007191109] [corrections for earlier MAIL_MESSAGE_SEND patch :) Chris Smith <chris@xxxxxxxxxxxxx>**20070930124603] [fixes for p_get_metadata() & p_set_metadata (incl. resolution of FS#1254) Chris Smith <chris@xxxxxxxxxxxxx>**20070930022739 - add page existence check to prevent attempts to render metadata for non-existent pages (FS#1254) - add key & subkey existence checks to avoid PHP warnings ] [add page_exists function (inc/pageutils.php) Chris Smith <chris@xxxxxxxxxxxxx>**20070930021040 bool page_exists($id, $rev='', $clean=true) checks wiki page existence, returns true if page exists, false if it doesn't. Parameters are the same as for wikiFN() $id -- page id $rev -- page revision $clean -- flag indicating whether or not $id requires cleaning ] [ptln parameter spelling correction Chris Smith <chris@xxxxxxxxxxxxx>**20070930020815] [Add MAIL_MESSAGE_SEND event (resolution of FS#1007) Chris Smith <chris@xxxxxxxxxxxxx>**20070930014728 Wrapper around DokuWiki's mail_send() function. For full details refer http://wiki.splitbrain.org/wiki:events_list#mail_message_send Also see discussion at //www.freelists.org/archives/dokuwiki/09-2007/msg00077.html ] [Avoid duplicate attributes in forms Tom N Harris <tnharris@xxxxxxxxxxxxx>**20071006195720] [Remove extraneous print statement Tom N Harris <tnharris@xxxxxxxxxxxxx>**20071001192639] [TAG develsnap 2007-10-01 Andreas Gohr <andi@xxxxxxxxxxxxxx>**20070930230001] Patch bundle hash: b3bc5290a27929bf9a650ee12a63e1a38706fdd1