From 8e69fd30702f1101a9c70dbe6eac6f45f9af3970 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva <pshns@ukr.net> Date: Mon, 13 Jun 2011 20:23:18 +0300 Subject: [PATCH] media manager --- inc/html.php | 52 +++++++---- inc/lang/en/lang.php | 16 ++++ inc/media.php | 50 +++++----- inc/pageutils.php | 2 +- lib/tpl/default/mediamanager.css | 155 +++++++++++++++++++++++++++++++ 5 files changed, 231 insertions(+), 44 deletions(-) create mode 100644 lib/tpl/default/mediamanager.css diff --git a/inc/html.php b/inc/html.php index 29e40174c..738ee6d75 100644 --- a/inc/html.php +++ b/inc/html.php @@ -415,20 +415,28 @@ function html_locked(){ * * @author Andreas Gohr <andi@splitbrain.org> * @author Ben Coburn <btcoburn@silicodon.net> + * @author Kate Arzamastseva <pshns@ukr.net> */ -function html_revisions($first=0){ +function html_revisions($first=0, $media_id = false){ global $ID; global $INFO; global $conf; global $lang; + $id = $ID; /* we need to get one additionally log entry to be able to * decide if this is the last page or is there another one. * see html_recent() */ - $revisions = getRevisions($ID, $first, $conf['recent']+1); + if (!$media_id) $revisions = getRevisions($ID, $first, $conf['recent']+1); + else { + $revisions = getRevisions($media_id, $first, $conf['recent']+1, 8192, true); + $id = $media_id; + } + if(count($revisions)==0 && $first!=0){ $first=0; - $revisions = getRevisions($ID, $first, $conf['recent']+1);; + if (!$media_id) $revisions = getRevisions($ID, $first, $conf['recent']+1); + else $revisions = getRevisions($media_id, $first, $conf['recent']+1, 8192, true); } $hasNext = false; if (count($revisions)>$conf['recent']) { @@ -436,14 +444,19 @@ function html_revisions($first=0){ array_pop($revisions); // remove extra log entry } - $date = dformat($INFO['lastmod']); + if (!$media_id) $date = dformat($INFO['lastmod']); + else $date = dformat(@filemtime(mediaFN($id))); - print p_locale_xhtml('revisions'); + if (!$media_id) print p_locale_xhtml('revisions'); $form = new Doku_Form(array('id' => 'page__revisions')); $form->addElement(form_makeOpenTag('ul')); - if($INFO['exists'] && $first==0){ - if (isset($INFO['meta']) && isset($INFO['meta']['last_change']) && $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) + + if (!$media_id) $exists = $INFO['exists']; + else $exists = @file_exists(mediaFN($id)); + + if($exists && $first==0){ + if (!$media_id && isset($INFO['meta']) && isset($INFO['meta']['last_change']) && $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $form->addElement(form_makeOpenTag('li', array('class' => 'minor'))); else $form->addElement(form_makeOpenTag('li')); @@ -461,8 +474,8 @@ function html_revisions($first=0){ $form->addElement(form_makeOpenTag('a', array( 'class' => 'wikilink1', - 'href' => wl($ID)))); - $form->addElement($ID); + 'href' => wl($id)))); + $form->addElement($id); $form->addElement(form_makeCloseTag('a')); $form->addElement(form_makeOpenTag('span', array('class' => 'sum'))); @@ -471,6 +484,7 @@ function html_revisions($first=0){ $form->addElement(form_makeCloseTag('span')); $form->addElement(form_makeOpenTag('span', array('class' => 'user'))); + /// $form->addElement((empty($INFO['editor']))?('('.$lang['external_edit'].')'):editorinfo($INFO['editor'])); $form->addElement(form_makeCloseTag('span')); @@ -481,8 +495,9 @@ function html_revisions($first=0){ foreach($revisions as $rev){ $date = dformat($rev); - $info = getRevisionInfo($ID,$rev,true); - $exists = page_exists($ID,$rev); + $info = getRevisionInfo($id,$rev,true); + if (!$media_id) $exists = page_exists($id,$rev); + else $exists = @file_exists(mediaFN($id,$rev)); if ($info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $form->addElement(form_makeOpenTag('li', array('class' => 'minor'))); @@ -503,7 +518,8 @@ function html_revisions($first=0){ $form->addElement(form_makeCloseTag('span')); if($exists){ - $form->addElement(form_makeOpenTag('a', array('href' => wl($ID,"rev=$rev,do=diff", false, '&'), 'class' => 'diff_link'))); + /// + $form->addElement(form_makeOpenTag('a', array('href' => wl($id,"rev=$rev,do=diff", false, '&'), 'class' => 'diff_link'))); $form->addElement(form_makeTag('img', array( 'src' => DOKU_BASE.'lib/images/diff.png', 'width' => 15, @@ -511,13 +527,13 @@ function html_revisions($first=0){ 'title' => $lang['diff'], 'alt' => $lang['diff']))); $form->addElement(form_makeCloseTag('a')); - - $form->addElement(form_makeOpenTag('a', array('href' => wl($ID,"rev=$rev",false,'&'), 'class' => 'wikilink1'))); - $form->addElement($ID); + /// + $form->addElement(form_makeOpenTag('a', array('href' => wl($id,"rev=$rev",false,'&'), 'class' => 'wikilink1'))); + $form->addElement($id); $form->addElement(form_makeCloseTag('a')); }else{ $form->addElement('<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />'); - $form->addElement($ID); + $form->addElement($id); } $form->addElement(form_makeOpenTag('span', array('class' => 'sum'))); @@ -549,12 +565,12 @@ function html_revisions($first=0){ $first -= $conf['recent']; if ($first < 0) $first = 0; print '<div class="pagenav-prev">'; - print html_btn('newer',$ID,"p",array('do' => 'revisions', 'first' => $first)); + print html_btn('newer',$id,"p",array('do' => 'revisions', 'first' => $first)); print '</div>'; } if ($hasNext) { print '<div class="pagenav-next">'; - print html_btn('older',$ID,"n",array('do' => 'revisions', 'first' => $last)); + print html_btn('older',$id,"n",array('do' => 'revisions', 'first' => $last)); print '</div>'; } print '</div>'; diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php index 51fd8f645..5dca273c3 100644 --- a/inc/lang/en/lang.php +++ b/inc/lang/en/lang.php @@ -48,6 +48,7 @@ $lang['btn_recover'] = 'Recover draft'; $lang['btn_draftdel'] = 'Delete draft'; $lang['btn_revert'] = 'Restore'; $lang['btn_register'] = 'Register'; +$lang['btn_apply'] = 'Apply'; $lang['loggedinas'] = 'Logged in as'; $lang['user'] = 'Username'; @@ -179,6 +180,9 @@ $lang['external_edit'] = 'external edit'; $lang['summary'] = 'Edit summary'; $lang['noflash'] = 'The <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is needed to display this content.'; $lang['download'] = 'Download Snippet'; +$lang['pages_changes'] = 'Show pages changes'; +$lang['media_changes'] = 'Show media files changes'; +$lang['both_changes'] = 'Show both'; $lang['mail_newpage'] = 'page added:'; $lang['mail_changed'] = 'page changed:'; @@ -318,5 +322,17 @@ $lang['seconds'] = '%d seconds ago'; $lang['wordblock'] = 'Your change was not saved because it contains blocked text (spam).'; +$lang['media_uploadtab'] = 'Upload'; +$lang['media_searchtab'] = 'Search'; +$lang['media_viewtab'] = 'View'; +$lang['media_edittab'] = 'Edit'; +$lang['media_historytab'] = 'History'; +$lang['media_thumbsview'] = 'Thumnails'; +$lang['media_listview'] = 'List'; +$lang['media_sort'] = 'Sort'; +$lang['media_search'] = 'Search'; +$lang['media_view'] = 'View'; +$lang['media_edit'] = 'Edit'; +$lang['media_history'] = 'These are the older revisons of the file.'; //Setup VIM: ex: et ts=2 : diff --git a/inc/media.php b/inc/media.php index d98e225b9..5f443a1f7 100644 --- a/inc/media.php +++ b/inc/media.php @@ -357,9 +357,7 @@ function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite, $move = 'mov global $lang; $old = @filemtime($fn); - $oldRev = getRevisions($id, -1, 1, 1024, true); // from changelog - $oldRev = (int)(empty($oldRev)?0:$oldRev[0]); - if(!@file_exists(mediaFN($id, $old)) && @file_exists($fn) && $old>=$oldRev) { + if(!@file_exists(mediaFN($id, $old)) && @file_exists($fn)) { // add old revision to the attic if missing media_saveOldRevision($id); } @@ -530,21 +528,21 @@ function media_tabs_files($selected=false){ '" rel=".mediamanager-tab-files"'; if (!empty($selected) && $selected == 'files') $class = 'files selected'; else $class = 'files'; - $tab .= ' class="'.$class.'" >Files</a>'; + $tab .= ' class="'.$class.'" >'.$lang['mediaselect'].'</a>'; echo $tab; $tab = '<a href="'.media_managerURL(array('tab_files' => 'upload')). '" rel=".mediamanager-tab-upload"'; if (!empty($selected) && $selected == 'upload') $class = 'upload selected'; else $class = 'upload'; - $tab .= ' class="'.$class.'" >Upload</a>'; + $tab .= ' class="'.$class.'" >'.$lang['media_uploadtab'].'</a>'; echo $tab; $tab = '<a href="'.media_managerURL(array('tab_files' => 'search')). '" rel=".mediamanager-tab-search"'; if (!empty($selected) && $selected == 'search') $class = 'search selected'; else $class = 'search'; - $tab .= ' class="'.$class.'" >Search</a>'; + $tab .= ' class="'.$class.'" >'.$lang['media_searchtab'].'</a>'; echo $tab; echo '<div class="mediamanager-clear"> </div>'; @@ -565,21 +563,21 @@ function media_tabs_details($selected=false){ '" rel=".mediamanager-tab-view"'; if (!empty($selected) && $selected == 'view') $class = 'view selected'; else $class = 'view'; - $tab .= ' class="'.$class.'" >View</a>'; + $tab .= ' class="'.$class.'" >'.$lang['media_viewtab'].'</a>'; echo $tab; $tab = '<a href="'.media_managerURL(array('tab_details' => 'edit')). '" rel=".mediamanager-tab-edit"'; if (!empty($selected) && $selected == 'edit') $class = 'edit selected'; else $class = 'edit'; - $tab .= ' class="'.$class.'" >Edit</a>'; + $tab .= ' class="'.$class.'" >'.$lang['media_edittab'].'</a>'; echo $tab; $tab = '<a href="'.media_managerURL(array('tab_details' => 'history')). '" rel=".mediamanager-tab-history"'; if (!empty($selected) && $selected == 'history') $class = 'history selected'; else $class = 'history'; - $tab .= ' class="'.$class.'" >History</a>'; + $tab .= ' class="'.$class.'" >'.$lang['media_historytab'].'</a>'; echo $tab; echo '<div class="mediamanager-clear"> </div>'; @@ -597,14 +595,14 @@ function media_tab_files_options(){ echo '<div class="background-container">'; echo '<div id="id-mediamanager-tabs-files" style="display: inline;">'; echo '<a href="'.media_managerURL(array('view' => 'thumbs')).'" - rel=".mediamanager-files-thumbnails-tab" class="mediamanager-link-thumbnails"> - Thumbs</a>'; + rel=".mediamanager-files-thumbnails-tab" class="mediamanager-link-thumbnails">'. + $lang['media_thumbsview'].'</a>'; echo '<a href="'.media_managerURL(array('view' => 'list')).'" rel=".mediamanager-files-list-tab" class="mediamanager-link-list" - title="View as list">List</a>'; + title="View as list">'.$lang['media_listview'].'</a>'; echo '</div>'; - echo '<div class="mediamanager-block-sort">Sort'; + echo '<div class="mediamanager-block-sort">'.$lang['media_sort']; //select echo '</div>'; echo '<div class="mediamanager-clear"> </div>'; @@ -675,7 +673,7 @@ function media_tab_search($ns,$auth=null) { echo '<div class="mediamanager-tab-search">'; echo '<div class="background-container">'; - echo 'Search'; + echo $lang['media_search']; echo'</div>'; echo '<div class="scroll-container">'; @@ -699,16 +697,16 @@ function media_tab_view($image, $ns, $auth=null) { echo '<div class="mediamanager-tab-detail-view">'; echo '<div class="background-container">'; - echo 'Preview of image'; + echo $lang['media_view']; echo '</div>'; echo '<div class="scroll-container">'; - if($auth < AUTH_READ) return false; - - $info = new JpegMeta(mediaFN($image)); - $w = (int) $info->getField('File.Width'); - $src = ml($image); - echo '<img src="'.$src.'" alt="" width="99%" style="max-width: '.$w.'px;" />'; + if ($auth >= AUTH_READ && $image) { + $info = new JpegMeta(mediaFN($image)); + $w = (int) $info->getField('File.Width'); + $src = ml($image); + echo '<img src="'.$src.'" alt="" width="99%" style="max-width: '.$w.'px;" />'; + } echo '</div>'; echo '</div>'; } @@ -724,11 +722,11 @@ function media_tab_edit($image, $ns, $auth=null) { echo '<div class="mediamanager-tab-detail-edit">'; echo '<div class="background-container">'; - echo 'Edit'; + echo $lang['media_edit']; echo '</div>'; echo '<div class="scroll-container">'; - media_metaform($image,$auth,true); + if ($image) media_metaform($image,$auth,true); echo '</div>'; echo '</div>'; } @@ -744,11 +742,12 @@ function media_tab_history($image, $ns, $auth=null) { echo '<div class="mediamanager-tab-detail-history">'; echo '<div class="background-container">'; - echo 'History'; + echo $lang['media_history']; echo '</div>'; echo '<div class="scroll-container">'; - + $first = isset($_REQUEST['first']) ? intval($_REQUEST['first']) : 0; + html_revisions($first, $image); echo '</div>'; echo '</div>'; } @@ -764,6 +763,7 @@ function media_tab_history($image, $ns, $auth=null) { function media_searchlist($query,$ns,$auth=null,$fullscreen=false){ global $conf; global $lang; + $ns = cleanID($ns); if ($query) { diff --git a/inc/pageutils.php b/inc/pageutils.php index 09a23cbdd..81dcb66e7 100644 --- a/inc/pageutils.php +++ b/inc/pageutils.php @@ -347,7 +347,7 @@ function mediaFN($id, $rev=''){ $fn = $conf['mediadir'].'/'.utf8_encodeFN($id); }else{ $ext = mimetype($id); - $name = substr($id,0, -1*strlen($ext[0])); + $name = substr($id,0, -1*strlen($ext[0])-1); $fn = $conf['mediaolddir'].'/'.utf8_encodeFN($name .'.'.( (int) $rev ).'.'.$ext[0]); } return $fn; diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css new file mode 100644 index 000000000..2001bc5f9 --- /dev/null +++ b/lib/tpl/default/mediamanager.css @@ -0,0 +1,155 @@ +.float-image { + float: left; + margin-right: 10px; + margin-bottom: 10px; + width: 100px; + height: 180px; + background-color: #DEE7EC; + padding: 10px; + text-align: center; +} + +.float-image:hover { + background-color: #dadada; +} + +/* --- Tree formatting --- */ + +#media-menu img { + float: left; + padding: 0.5em 0.3em 0 0; +} + +#media-menu ul { + list-style-type: none; + list-style-image: none; + margin-left: 1.5em; +} + +#media-menu li { + clear: left; + list-style-type: none; + list-style-image: none; +} + +/* -------------- */ + +.mediamanager { + width: 100%; + overflow-y: auto; +} + +.mediamanager .mediamanager-slider { + width: auto; +} + +.mediamanager .mediamanager-slider .layout { + float: left; + margin-left: 5px; + margin-right: 5px; +} + +.mediamanager .scroll-container { + /*height: 0px;*/ + overflow-y: auto; + overflow-x: hidden; + padding: 0; + margin: 0; +} + +.background-container { + background-color: #DEE7EC; + margin-bottom: 10px; + padding: 10px; + text-align: left; +} + +.mediamanager-link-thumbnails { + background: url('icon-thumb.png') 0 -4px no-repeat; + padding-left: 30px; + display: block; + float: left; + /*width: 0;*/ + /*overflow: hidden;*/ +} + +.mediamanager-link-list { + background: url('icon-list.png') 0 -4px no-repeat; + padding-left: 30px; + display: block; + float: left; + /*width: 0;*/ + /*overflow: hidden;*/ +} + +.mediamanager-block-sort { + background: url('icon-sort.png') 0 -4px no-repeat; + padding-left: 30px; + display: block; + float: right; +} + +.mediamanager-link-thumbnails:hover, +.mediamanager-link-list:hover { + width: auto; + margin-right: 10px; +} + +.mediamanager-clear { + clear: both; + line-height: 0; + font-size: 0; +} + +.mediamanager-link-upload { + background: url('icon-upload.png') 0 -4px no-repeat; + padding-left: 30px; +} + +.mediamanager-link-search { + background: url('icon-search.png') 0 -4px no-repeat; + padding-left: 30px; +} + +.mediamanager-tabs a { + font-weight: bold; + display: block; + float: left; + padding: 10px; + padding-bottom: 5px; + padding-top: 5px; + + margin-right: 2px; + + -moz-border-radius-topright: 10px; + -webkit-border-top-right-radius: 10px; + -moz-border-radius-topleft: 10px; + -webkit-border-top-left-radius: 10px; + border-top-right-radius: 10px; + border-top-left-radius: 10px; +} + +.mediamanager-tabs .selected { + background-color: #DEE7EC; +} + +.mediamanager-tabs a:hover { + background-color: #DEE7EC; + opacity: 0.5; +} + +.mediamanager-table td { + padding: 5px; +} + +.mediamanager-table tr:nth-child(2n+1){ + background-color: #f5f5f5; +} + +.mediamanager-table { + background: expression(this.rowIndex % 2 == 0 ? "#ffffff" : "#f5f5f5"); +} + +.mediamanager-table tr:hover { + background-color: #DEE7EC; +} \ No newline at end of file -- GitLab