From 36df6fa3069d55db3c35724c4f465bde9c50b53a Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 31 Jul 2005 18:35:54 +0200 Subject: image metadata editor This patch adds an meta data editor for JPEG files. Currently title, caption, artist, copyright and keywords can be saved. The data is saved to the apropriate IPTC fields. Additional fields can be added in the appropriate template. Compatibility testing with other programs is needed! darcs-hash:20050731163554-7ad00-dd936ec19549203dcf72de8774309c0b17d0b679.gz --- lib/exe/media.php | 70 ++++++++++++++++++++++++-------- lib/images/edit.gif | Bin 0 -> 142 bytes lib/tpl/default/design.css | 22 +++++++++++ lib/tpl/default/mediaedit.php | 90 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 166 insertions(+), 16 deletions(-) create mode 100644 lib/images/edit.gif create mode 100644 lib/tpl/default/mediaedit.php (limited to 'lib') 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 */ 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 + */ +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 new file mode 100644 index 000000000..a2a23de7b Binary files /dev/null and b/lib/images/edit.gif differ 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 @@ + + + */ +?> + + + <?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>] + + + + + + + + + + +
+ + +

+ +
+ + +
+
+ + + + +
+ + +
+ + +
+ + +
+ + + +
+ + + + +
+
+ + + +
+ +
+ + + -- cgit v1.2.3