From 2e55802c049a2388811419cc4acd287b29279928 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 20 Jun 2011 11:02:46 +0300 Subject: media history --- inc/html.php | 9 ++- inc/lang/en/lang.php | 2 + inc/media.php | 181 +++++++++++++++++++++++++++++++++++++-------------- 3 files changed, 140 insertions(+), 52 deletions(-) (limited to 'inc') diff --git a/inc/html.php b/inc/html.php index cf0b00397..809db30bd 100644 --- a/inc/html.php +++ b/inc/html.php @@ -533,7 +533,7 @@ function html_revisions($first=0, $media_id = false){ if($exists){ if (!$media_id) $href = wl($id,"rev=$rev,do=diff", false, '&'); - else $href = media_managerURL(array('image' => $id, 'tab_details' => 'view', 'rev' => $rev)); + else $href = media_managerURL(array('image' => $id, 'rev' => $rev, 'mediado' => 'diff')); $form->addElement(form_makeOpenTag('a', array('href' => $href, 'class' => 'diff_link'))); $form->addElement(form_makeTag('img', array( 'src' => DOKU_BASE.'lib/images/diff.png', @@ -572,7 +572,12 @@ function html_revisions($first=0, $media_id = false){ $form->addElement(form_makeCloseTag('li')); } $form->addElement(form_makeCloseTag('ul')); - if (!$media_id) $form->addElement(form_makeButton('submit', 'diff', $lang['diff2'])); + if (!$media_id) { + $form->addElement(form_makeButton('submit', 'diff', $lang['diff2'])); + } else { + $form->addHidden('mediado', 'diff'); + $form->addElement(form_makeButton('submit', '', $lang['diff2'])); + } html_form('revisions', $form); print ''; echo '
'; - media_preview($image, $auth); + $rev = (int) $_REQUEST['rev']; + media_preview($image, $auth, $rev); + media_details($image, $auth, $rev); echo '
'; echo ''; } @@ -739,6 +741,7 @@ function media_tab_edit($image, $ns, $auth=null) { function media_tab_history($image, $ns, $auth=null) { global $lang; if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*"); + $do = $_REQUEST['mediado']; echo '
'; echo '
'; @@ -746,8 +749,14 @@ function media_tab_history($image, $ns, $auth=null) { echo '
'; echo '
'; - $first = isset($_REQUEST['first']) ? intval($_REQUEST['first']) : 0; - html_revisions($first, $image); + if ($auth >= AUTH_READ && $image) { + if ($do == 'diff'){ + media_diff($image, $ns, $auth); + } else { + $first = isset($_REQUEST['first']) ? intval($_REQUEST['first']) : 0; + html_revisions($first, $image); + } + } echo '
'; echo '
'; } @@ -757,61 +766,132 @@ function media_tab_history($image, $ns, $auth=null) { * * @author Kate Arzamastseva */ -function media_preview($image, $auth) { +function media_preview($image, $auth, $rev=false) { global $lang; - if ($auth >= AUTH_READ && $image) { - $info = new JpegMeta(mediaFN($image)); - $w = (int) $info->getField('File.Width'); + if ($auth < AUTH_READ || !$image) return ''; + $info = new JpegMeta(mediaFN($image)); + $w = (int) $info->getField('File.Width'); - $rev = $_REQUEST['rev']; - $more = ''; - if (isset($rev)) $more = "rev=$rev"; - $src = ml($image, $more); + $more = ''; + if ($rev) $more = "rev=$rev"; + $src = ml($image, $more); - echo '

'; + echo '

'; - $link = ml($image,'',true); - echo $image.' '; + $link = ml($image,$more,true); + echo $image.' '; - // delete button - if($auth >= AUTH_DELETE){ - $link = media_managerURL(array('delete' => $image,'sectok' => getSecurityToken())); - echo ' '. - ''.$lang['btn_delete'].''; - } + // delete button + if($auth >= AUTH_DELETE && !$rev){ + $link = media_managerURL(array('delete' => $image,'sectok' => getSecurityToken())); + echo ' '. + ''.$lang['btn_delete'].''; + } - echo '

'; - - $tags = array( - array('simple.title','img_title','text'), - array('Date.EarliestTime','img_date','date'), - array('File.Name','img_fname','text'), - array(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'),'img_artist','text'), - array(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'),'img_copyr','text'), - array('File.Format','img_format','text'), - array('File.NiceSize','img_fsize','text'), - array('Simple.Camera','img_camera','text'), - array(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'),'img_keywords','text') - ); - - $src = mediaFN($image); - echo '
'; - foreach($tags as $key => $tag){ - $t = $tag[0]; - if (!is_array($t)) $t = array($tag[0]); - $value = tpl_img_getTag($t,'',$src); - $value = cleanText($value); - if ($value) { - echo '
'.$lang[$tag[1]].':
'; - if ($tag[2] == 'text') echo hsc($value); - if ($tag[2] == 'date') echo dformat($value); - echo '
'; - } +} + +/** + * Prints mediafile tags + * + * @author Kate Arzamastseva + */ +function media_details($image, $auth, $rev=false) { + global $lang; + + $tags = array( + array('simple.title','img_title','text'), + array('Date.EarliestTime','img_date','date'), + array('File.Name','img_fname','text'), + array(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'),'img_artist','text'), + array(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'),'img_copyr','text'), + array('File.Format','img_format','text'), + array('File.NiceSize','img_fsize','text'), + array('File.Width','img_width','text'), + array('File.Height','img_height','text'), + array('Simple.Camera','img_camera','text'), + array(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'),'img_keywords','text') + ); + + $src = mediaFN($image, $rev); + echo '
'; + foreach($tags as $key => $tag){ + $t = $tag[0]; + if (!is_array($t)) $t = array($tag[0]); + $value = media_getTag($t,$src); + $value = cleanText($value); + if (!$value) $value='-'; + echo '
'.$lang[$tag[1]].':
'; + if ($tag[2] == 'text') echo hsc($value); + if ($tag[2] == 'date') echo dformat($value); + echo '
'; + } + echo '
'; +} + +/** + * Returns the requested EXIF/IPTC tag from the current image + * + */ +function media_getTag($tags,$src,$alt=''){ + $meta = new JpegMeta($src); + if($meta === false) return $alt; + $info = $meta->getField($tags); + if($info == false) return $alt; + return $info; +} + +/** + * Shows difference between two revisions of file + * + * @author Kate Arzamastseva + */ +function media_diff($image, $ns, $auth) { + global $lang; + global $conf; + + $rev1 = (int) $_REQUEST['rev']; + + if(is_array($_REQUEST['rev2'])){ + $rev1 = (int) $_REQUEST['rev2'][0]; + $rev2 = (int) $_REQUEST['rev2'][1]; + + if(!$rev1){ + $rev1 = $rev2; + unset($rev2); + } + }else{ + $rev2 = (int) $_REQUEST['rev2']; + } + if($rev1 && $rev2){ // two specific revisions wanted + // make sure order is correct (older on the left) + if($rev1 < $rev2){ + $l_rev = $rev1; + $r_rev = $rev2; + }else{ + $l_rev = $rev2; + $r_rev = $rev1; } - echo '
'; + }elseif($rev1){ // single revision given, compare to current + $r_rev = ''; + $l_rev = $rev1; + }else{ // no revision was given, compare previous to current + $r_rev = ''; + $revs = getRevisions($image, 0, 1, 8192, true); + $l_rev = $revs[0]; } + echo ''; + echo ''; + echo '
'; + media_preview($image, $auth, $l_rev); + echo ''; + media_preview($image, $auth, $r_rev); + echo '
'; + media_details($image, $auth, $l_rev); + echo ''; + media_details($image, $auth, $r_rev); + echo '
'; } /** @@ -1065,6 +1145,7 @@ function media_managerURL($params=false, $amp='&') { unset($gets['sectok']); unset($gets['delete']); unset($gets['rev']); + unset($gets['mediado']); if ($params) { foreach ($params as $k => $v) { -- cgit v1.2.3