diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/exe/media.php | 70 | ||||
-rw-r--r-- | lib/images/edit.gif | bin | 0 -> 142 bytes | |||
-rw-r--r-- | lib/tpl/default/design.css | 22 | ||||
-rw-r--r-- | lib/tpl/default/mediaedit.php | 90 |
4 files changed, 166 insertions, 16 deletions
diff --git a/lib/exe/media.php b/lib/exe/media.php index c8db37153..cddf258db 100644 --- a/lib/exe/media.php +++ b/lib/exe/media.php @@ -14,8 +14,12 @@ //get namespace to display (either direct or from deletion order) if($_REQUEST['delete']){ - $DEL = cleanID($_REQUEST['delete']); + $DEL = cleanID($_REQUEST['delete']); $NS = getNS($DEL); + }elseif($_REQUEST['edit']){ + $IMG = cleanID($_REQUEST['edit']); + $SRC = mediaFN($IMG); + $NS = getNS($IMG); }else{ $NS = $_REQUEST['ns']; $NS = cleanID($NS); @@ -35,9 +39,9 @@ //handle deletion $mediareferences = array(); if($DEL && $AUTH >= AUTH_DELETE){ - if($conf['refcheck']){ - search($mediareferences,$conf['datadir'],'search_reference',array('query' => $DEL)); - } + if($conf['refcheck']){ + search($mediareferences,$conf['datadir'],'search_reference',array('query' => $DEL)); + } if(!count($mediareferences)){ media_delete($DEL); }elseif(!$conf['refshow']){ @@ -45,6 +49,11 @@ } } + //handle metadatasaving + if($UPLOADOK && $SRC && $_REQUEST['save']){ + media_metasave($SRC,$_REQUEST['meta']); + } + //handle upload if($_FILES['upload']['tmp_name'] && $UPLOADOK){ media_upload($NS,$AUTH); @@ -54,6 +63,8 @@ header('Content-Type: text/html; charset=utf-8'); if($conf['refshow'] && count($mediareferences)){ include(template('mediaref.php')); + }elseif($IMG){ + include(template('mediaedit.php')); }else{ include(template('media.php')); } @@ -87,7 +98,7 @@ function media_delete($delid){ * @author Andreas Gohr <andi@splitbrain.org> */ function media_upload($NS,$AUTH){ - require_once(DOKU_INC.'inc/confutils.php'); + require_once(DOKU_INC.'inc/confutils.php'); global $lang; global $conf; @@ -101,24 +112,24 @@ function media_upload($NS,$AUTH){ $fn = mediaFN($id); // get filetype regexp - $types = array_keys(getMimeTypes()); - $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types); + $types = array_keys(getMimeTypes()); + $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types); $regex = join('|',$types); // we set the umask here but this doesn't really help // because a temp file was created already umask($conf['umask']); if(preg_match('/\.('.$regex.')$/i',$fn)){ - //check for overwrite - if(@file_exists($fn) && (!$_POST['ow'] || $AUTH < AUTH_DELETE)){ - msg($lang['uploadexist'],0); - return false; - } - // prepare directory - io_makeFileDir($fn); + //check for overwrite + if(@file_exists($fn) && (!$_POST['ow'] || $AUTH < AUTH_DELETE)){ + msg($lang['uploadexist'],0); + return false; + } + // prepare directory + io_makeFileDir($fn); if(move_uploaded_file($file['tmp_name'], $fn)) { - // set the correct permission here - chmod($fn, 0777 - $conf['umask']); + // set the correct permission here + chmod($fn, 0777 - $conf['umask']); msg($lang['uploadsucc'],1); return true; }else{ @@ -146,4 +157,31 @@ function media_html_list_namespaces($item){ return $ret; } +/** + * Saves image meta data + * + * @author Andreas Gohr <andi@splitbrain.org> + */ +function media_metasave($src,$data){ + global $lang; + + $meta = new JpegMeta($src); + $meta->_parseAll(); + + foreach($data as $key => $val){ + $val=trim($val); + if(empty($val)){ + $meta->deleteField($key); + }else{ + $meta->setField($key,$val); + } + } + + if($meta->save()){ + msg($lang['metasaveok'],1); + }else{ + msg($lang['metasaveerr'],-1); + } +} + ?> diff --git a/lib/images/edit.gif b/lib/images/edit.gif Binary files differnew file mode 100644 index 000000000..a2a23de7b --- /dev/null +++ b/lib/images/edit.gif diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css index 48453a736..ee03815ff 100644 --- a/lib/tpl/default/design.css +++ b/lib/tpl/default/design.css @@ -733,3 +733,25 @@ div.mediaselect-right li, div.uploadform { clear: both; } +div.mediaedit div.data label{ + display: block; + text-align: right; + width: 20%; + float: left; + margin-right: 0.5em; +} + +div.mediaedit div.data input, div.mediaedit div.data textarea{ + width: 75%; + padding: 0.1em; + margin: 0.1em; +} + +div.mediaedit div.data input.button { + width: 10em; + display: block; + margin-left: auto; + margin-right: auto; +} + + diff --git a/lib/tpl/default/mediaedit.php b/lib/tpl/default/mediaedit.php new file mode 100644 index 000000000..53a969e1b --- /dev/null +++ b/lib/tpl/default/mediaedit.php @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<?php +/** + * DokuWiki Default Template + * + * This is the template for editing image meta data. + * It is displayed in the media popup. + * + * You should leave the doctype at the very top - It should + * always be the very first line of a document. + * + * @link http://wiki.splitbrain.org/wiki:tpl:templates + * @author Andreas Gohr <andi@splitbrain.org> + */ +?> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr"> +<head> + <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <?php tpl_metaheaders()?> + + <link rel="shortcut icon" href="<?php echo DOKU_BASE?>images/favicon.ico" /> + <link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>layout.css" /> + <link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>design.css" /> +</head> + +<body> +<div class="dokuwiki"> + <?php html_msgarea()?> + + <h1><?php echo hsc($lang['metaedit'])?> <code><?php echo hsc(noNS($IMG))?></code></h1> + + <div class="mediaedit"> + <?php/* everything in meta array is tried to save and read */?> + + <div class="data"> + <form action="<?php echo DOKU_BASE?>lib/exe/media.php" accept-charset="utf-8" method="post"> + <input type="hidden" name="edit" value="<?php echo hsc($IMG)?>" /> + <input type="hidden" name="save" value="1" /> + + <label for="title"><?php echo $lang['img_title']?></label> + <input type="text" name="meta[Iptc.Headline]" id="title" class="edit" + value="<?php echo hsc(tpl_img_getTag('IPTC.Headline'))?>" /><br /> + + <label for="caption"><?php echo $lang['img_caption']?></label> + <textarea name="meta[Iptc.Caption]" id="caption" class="edit" rows="5"><?php + echo hsc(tpl_img_getTag(array('IPTC.Caption', + 'EXIF.UserComment', + 'EXIF.TIFFImageDescription', + 'EXIF.TIFFUserComment'))); + ?></textarea><br /> + + <label for="artist"><?php echo $lang['img_artist']?></label> + <input type="text" name="meta[Iptc.Byline]" id="artist" class="edit" + value="<?php echo hsc(tpl_img_getTag(array('Iptc.Byline', + 'Exif.TIFFArtist', + 'Exif.Artist', + 'Iptc.Credit')))?>" /><br /> + + <label for="copy"><?php echo $lang['img_copyr']?></label> + <input type="text" name="meta[Iptc.CopyrightNotice]" id="copy" class="edit" + value="<?php echo hsc(tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright')))?>" /><br /> + + + <label for="keywords"><?php echo $lang['img_keywords']?></label> + <textarea name="meta[Iptc.Keywords]" id="keywords" class="edit"><?php + echo hsc(tpl_img_getTag(array('IPTC.Keywords', + 'EXIF.Category'))); + ?></textarea><br /> + + + <input type="submit" value="<?php echo $lang['btn_save']?>" title="ALT+S" + accesskey="s" class="button" /> + + </form> + </div> + + + <div class="footer"> + <hr> + <?php tpl_button('backtomedia')?> + </div> + </div> + +</div> +</body> +</html> + |