summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/exe/ajax.php26
-rw-r--r--lib/exe/fetch.php10
-rw-r--r--lib/exe/mediamanager.php24
-rw-r--r--lib/images/icon-file.pngbin0 -> 3363 bytes
-rw-r--r--lib/images/icon-list.pngbin0 -> 3342 bytes
-rw-r--r--lib/images/icon-sort.pngbin0 -> 316 bytes
-rw-r--r--lib/images/icon-thumb.pngbin0 -> 969 bytes
-rw-r--r--lib/plugins/popularity/lang/uk/submitted.txt2
-rw-r--r--lib/scripts/media.js132
-rw-r--r--lib/tpl/default/design.css12
-rw-r--r--lib/tpl/default/detail.php41
-rw-r--r--lib/tpl/default/main.php1
-rw-r--r--lib/tpl/default/mediamanager.css247
-rw-r--r--lib/tpl/default/style.ini1
14 files changed, 456 insertions, 40 deletions
diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php
index 1056a05f8..59953ddc3 100644
--- a/lib/exe/ajax.php
+++ b/lib/exe/ajax.php
@@ -210,7 +210,31 @@ function ajax_medialist(){
global $NS;
$NS = $_POST['ns'];
- tpl_mediaContent(true);
+ if ($_POST['do'] == 'media') {
+ tpl_fileList();
+ } else {
+ tpl_mediaContent(true);
+ }
+}
+
+/**
+ * Return the content of the right column
+ * (image details) for the Mediamanager
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+function ajax_mediadetails(){
+ global $DEL, $NS, $IMG, $AUTH, $JUMPTO, $REV, $lang, $fullscreen;
+ $fullscreen = true;
+ require_once(DOKU_INC.'lib/exe/mediamanager.php');
+
+ if ($_REQUEST['image']) $image = cleanID($_REQUEST['image']);
+ if (isset($IMG)) $image = $IMG;
+ if (isset($JUMPTO)) $image = $JUMPTO;
+ if (isset($REV) && !$JUMPTO) $rev = $REV;
+
+ html_msgarea();
+ tpl_fileDetails($image, $rev);
}
/**
diff --git a/lib/exe/fetch.php b/lib/exe/fetch.php
index 3ad4f1937..143d40f22 100644
--- a/lib/exe/fetch.php
+++ b/lib/exe/fetch.php
@@ -20,6 +20,10 @@
$CACHE = calc_cache($_REQUEST['cache']);
$WIDTH = (int) $_REQUEST['w'];
$HEIGHT = (int) $_REQUEST['h'];
+ $REV = (int) @$_REQUEST['rev'];
+ //sanitize revision
+ $REV = preg_replace('/[^0-9]/','',$REV);
+
list($EXT,$MIME,$DL) = mimetype($MEDIA,false);
if($EXT === false){
$EXT = 'unknown';
@@ -28,7 +32,7 @@
}
// check for permissions, preconditions and cache external files
- list($STATUS, $STATUSMESSAGE) = checkFileStatus($MEDIA, $FILE);
+ list($STATUS, $STATUSMESSAGE) = checkFileStatus($MEDIA, $FILE, $REV);
// prepare data for plugin events
$data = array('media' => $MEDIA,
@@ -147,7 +151,7 @@ function sendFile($file,$mime,$dl,$cache){
* @param $file reference to the file variable
* @returns array(STATUS, STATUSMESSAGE)
*/
-function checkFileStatus(&$media, &$file) {
+function checkFileStatus(&$media, &$file, $rev='') {
global $MIME, $EXT, $CACHE;
//media to local file
@@ -172,7 +176,7 @@ function checkFileStatus(&$media, &$file) {
if(auth_quickaclcheck(getNS($media).':X') < AUTH_READ){
return array( 403, 'Forbidden' );
}
- $file = mediaFN($media);
+ $file = mediaFN($media, $rev);
}
//check file existance
diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php
index 02fde5a8d..939b5a053 100644
--- a/lib/exe/mediamanager.php
+++ b/lib/exe/mediamanager.php
@@ -35,7 +35,7 @@
$AUTH = auth_quickaclcheck("$NS:*");
// do not display the manager if user does not have read access
- if($AUTH < AUTH_READ) {
+ if($AUTH < AUTH_READ && !$fullscreen) {
header('HTTP/1.0 403 Forbidden');
die($lang['accessdenied']);
}
@@ -76,10 +76,20 @@
}
// handle meta saving
- if($IMG && $_REQUEST['do']['save']){
+ if($IMG && @array_key_exists('save', $_REQUEST['do'])){
$JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']);
}
+ if($IMG && ($_REQUEST['mediado'] == 'save' || @array_key_exists('save', $_REQUEST['mediado']))) {
+ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']);
+ }
+
+ if ($_REQUEST['rev']) $REV = (int) $_REQUEST['rev'];
+
+ if($_REQUEST['mediado'] == 'restore'){
+ $JUMPTO = media_restore($_REQUEST['image'], $REV, $AUTH);
+ }
+
// handle deletion
if($DEL) {
$res = 0;
@@ -88,7 +98,7 @@
}
if ($res & DOKU_MEDIA_DELETED) {
$msg = sprintf($lang['deletesucc'], noNS($DEL));
- if ($res & DOKU_MEDIA_EMPTY_NS) {
+ if ($res & DOKU_MEDIA_EMPTY_NS && !$fullscreen) {
// current namespace was removed. redirecting to root ns passing msg along
send_redirect(DOKU_URL.'lib/exe/mediamanager.php?msg1='.
rawurlencode($msg).'&edid='.$_REQUEST['edid']);
@@ -102,9 +112,11 @@
msg(sprintf($lang['deletefail'],noNS($DEL)),-1);
}
}
-
// finished - start output
- header('Content-Type: text/html; charset=utf-8');
- include(template('mediamanager.php'));
+
+ if (!$fullscreen) {
+ header('Content-Type: text/html; charset=utf-8');
+ include(template('mediamanager.php'));
+ }
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
diff --git a/lib/images/icon-file.png b/lib/images/icon-file.png
new file mode 100644
index 000000000..d350c8c31
--- /dev/null
+++ b/lib/images/icon-file.png
Binary files differ
diff --git a/lib/images/icon-list.png b/lib/images/icon-list.png
new file mode 100644
index 000000000..ecfeed92d
--- /dev/null
+++ b/lib/images/icon-list.png
Binary files differ
diff --git a/lib/images/icon-sort.png b/lib/images/icon-sort.png
new file mode 100644
index 000000000..c6403dd3c
--- /dev/null
+++ b/lib/images/icon-sort.png
Binary files differ
diff --git a/lib/images/icon-thumb.png b/lib/images/icon-thumb.png
new file mode 100644
index 000000000..ccc7a101d
--- /dev/null
+++ b/lib/images/icon-thumb.png
Binary files differ
diff --git a/lib/plugins/popularity/lang/uk/submitted.txt b/lib/plugins/popularity/lang/uk/submitted.txt
new file mode 100644
index 000000000..90213858d
--- /dev/null
+++ b/lib/plugins/popularity/lang/uk/submitted.txt
@@ -0,0 +1,2 @@
+====== Відгук популярності ======
+Дані були успішно відправлені. \ No newline at end of file
diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index f7e78c747..3f263f42a 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -60,6 +60,20 @@ var dw_mediamanager = {
DOKU_BASE + 'lib/images/plus.gif');
}});
$tree.delegate('a', 'click', dw_mediamanager.list);
+
+ jQuery('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', dw_mediamanager.list)
+ .delegate('#mediamanager__tabs_list a', 'click', dw_mediamanager.list_view)
+ .delegate('#mediamanager__file_list a', 'click', dw_mediamanager.details)
+ .delegate('#dw__mediasearch', 'submit', dw_mediamanager.list);
+
+ jQuery('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', dw_mediamanager.details)
+ .delegate('#mediamanager__btn_update', 'submit', dw_mediamanager.list)
+ .delegate('#page__revisions', 'submit', dw_mediamanager.details)
+ .delegate('#page__revisions a', 'click', dw_mediamanager.details)
+ .delegate('#mediamanager__save_meta', 'submit', dw_mediamanager.details)
+ .delegate('#mediamanager__btn_delete', 'submit', dw_mediamanager.details)
+ .delegate('#mediamanager__btn_restore', 'submit', dw_mediamanager.details);
+
},
/**
@@ -219,22 +233,128 @@ var dw_mediamanager = {
* @author Pierre Spring <pierre.spring@caillou.ch>
*/
list: function (event) {
- var $link, $content;
+ var $link, $content, params;
+ $link = jQuery(this);
event.preventDefault();
jQuery('div.success, div.info, div.error, div.notify').remove();
- $link = jQuery(this);
- $content = jQuery('#media__content');
- $content.html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
+ if (document.getElementById('media__content')) {
+ //popup
+ $content = jQuery('#media__content');
+ $content.html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
+
+ } else {
+ //fullscreen media manager
+ $content = jQuery('#mediamanager__layout_list');
+
+ if ($link.hasClass('idx_dir')) {
+ //changing namespace
+ jQuery('#mediamanager__layout_detail').empty();
+ jQuery('#media__tree .selected').each(function(){
+ $(this).removeClass('selected');
+ });
+ $link.addClass('selected');
+ }
+
+ jQuery('.scroll-container', $content).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
+ }
+
+ params = '';
+
+ if ($link[0].search) {
+ params = $link[0].search.substr(1)+'&call=medialist';
+ } else if ($link[0].action) {
+ params = dw_mediamanager.form_params($link)+'&call=medialist';
+ }
// fetch the subtree
+ dw_mediamanager.update_content($content, params);
+
+ };
+
+ /**
+ * Returns form parameters
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+ form_params: function ($form) {
+ var elements = $form.serialize();
+ var action = '';
+ var i = $form[0].action.indexOf('?');
+ if (i >= 0) action = $form[0].action.substr(i+1);
+ return elements+'&'+action;
+ },
+
+ /**
+ * Changes view of media files list
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+ list_view: function (event) {
+ var $link, $content;
+ $link = jQuery(this);
+
+ event.preventDefault();
+
+ $content = jQuery('#mediamanager__file_list');
+ if ($link.hasClass('mediamanager-link-thumbnails')) {
+ $content.removeClass('mediamanager-list');
+ $content.addClass('mediamanager-thumbs');
+ } else if ($link.hasClass('mediamanager-link-list')) {
+ $content.removeClass('mediamanager-thumbs');
+ $content.addClass('mediamanager-list');
+ }
+ },
+
+ /**
+ * Lists the content of the right column (image details) using AJAX
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+ details: function (event) {
+ var $link, $content, params, update_list;
+ $link = jQuery(this);
+
+ event.preventDefault();
+
+ jQuery('div.success, div.info, div.error, div.notify').remove();
+
+ if ($link[0].id == 'mediamanager__btn_delete' && !confirm(LANG['del_confirm'])) return false;
+ if ($link[0].id == 'mediamanager__btn_restore' && !confirm(LANG['restore_confirm'])) return false;
+
+ $content = $('#mediamanager__layout_detail');
+ jQuery('.scroll-container', $content).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
+
+ params = '';
+
+ if ($link[0].search) {
+ params = $link[0].search.substr(1)+'&call=mediadetails';
+ } else {
+ params = dw_mediamanager.form_params($link)+'&call=mediadetails';
+ }
+
+ dw_mediamanager.update_content($content, params);
+
+ update_list = ($link[0].id == 'mediamanager__btn_delete' || $link[0].id == 'mediamanager__btn_restore');
+ if (update_list) {
+ var $link1, $content1, params1;
+ $link1 = jQuery('a.files');
+ params1 = $link1[0].search.substr(1)+'&call=medialist';
+ $content1 = jQuery('#mediamanager__layout_list');
+ jQuery('.scroll-container', $content1).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
+
+ dw_mediamanager.update_content($content1, params1);
+ }
+ },
+
+ update_content: function ($content, params) {
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
- $link[0].search.substr(1)+'&call=medialist',
+ params,
function (data) {
- $content.html(data);
+ content.html(data);
dw_mediamanager.prepare_content($content);
dw_mediamanager.updatehide();
},
diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css
index 1fdf2bfac..1dee4dc69 100644
--- a/lib/tpl/default/design.css
+++ b/lib/tpl/default/design.css
@@ -246,6 +246,18 @@ div.dokuwiki div.pagenav-next {
width: 49%
}
+/* ----------- type of recent changes ------------- */
+
+div.dokuwiki div.changestypenav {
+ border-bottom: 1px solid __border__;
+ padding-bottom: 10px;
+ margin-bottom: 10px;
+}
+
+div.dokuwiki div.changestypenav label {
+ padding-right: 10px;
+}
+
/* --------------- Links ------------------ */
div.dokuwiki a:link,
diff --git a/lib/tpl/default/detail.php b/lib/tpl/default/detail.php
index 4f42b116e..f7bb37a25 100644
--- a/lib/tpl/default/detail.php
+++ b/lib/tpl/default/detail.php
@@ -52,30 +52,23 @@ if (!defined('DOKU_INC')) die();
<dl class="img_tags">
<?php
- $t = tpl_img_getTag('Date.EarliestTime');
- if($t) print '<dt>'.$lang['img_date'].':</dt><dd>'.dformat($t).'</dd>';
-
- $t = tpl_img_getTag('File.Name');
- if($t) print '<dt>'.$lang['img_fname'].':</dt><dd>'.hsc($t).'</dd>';
-
- $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'));
- if($t) print '<dt>'.$lang['img_artist'].':</dt><dd>'.hsc($t).'</dd>';
-
- $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'));
- if($t) print '<dt>'.$lang['img_copyr'].':</dt><dd>'.hsc($t).'</dd>';
-
- $t = tpl_img_getTag('File.Format');
- if($t) print '<dt>'.$lang['img_format'].':</dt><dd>'.hsc($t).'</dd>';
-
- $t = tpl_img_getTag('File.NiceSize');
- if($t) print '<dt>'.$lang['img_fsize'].':</dt><dd>'.hsc($t).'</dd>';
-
- $t = tpl_img_getTag('Simple.Camera');
- if($t) print '<dt>'.$lang['img_camera'].':</dt><dd>'.hsc($t).'</dd>';
-
- $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
- if($t) print '<dt>'.$lang['img_keywords'].':</dt><dd>'.hsc($t).'</dd>';
-
+ $config_files = getConfigFiles('mediameta');
+ foreach ($config_files as $config_file) {
+ if(@file_exists($config_file)) include($config_file);
+ }
+
+ foreach($fields as $key => $tag){
+ $t = array();
+ if (!empty($tag[0])) $t = array($tag[0]);
+ if(is_array($tag[3])) $t = array_merge($t,$tag[3]);
+ $value = tpl_img_getTag($t);
+ if ($value) {
+ echo '<dt>'.$lang[$tag[1]].':</dt><dd>';
+ if ($tag[2] == 'date') echo dformat($value);
+ else echo hsc($value);
+ echo '</dd>';
+ }
+ }
?>
</dl>
<?php //Comment in for Debug// dbg(tpl_img_getTag('Simple.Raw'));?>
diff --git a/lib/tpl/default/main.php b/lib/tpl/default/main.php
index 94c2322aa..698793ecd 100644
--- a/lib/tpl/default/main.php
+++ b/lib/tpl/default/main.php
@@ -117,6 +117,7 @@ if (!defined('DOKU_INC')) die();
</div>
<div class="bar-right" id="bar__bottomright">
<?php tpl_button('subscribe')?>
+ <?php tpl_button('media')?>
<?php tpl_button('admin')?>
<?php tpl_button('profile')?>
<?php tpl_button('login')?>
diff --git a/lib/tpl/default/mediamanager.css b/lib/tpl/default/mediamanager.css
new file mode 100644
index 000000000..eea62ea46
--- /dev/null
+++ b/lib/tpl/default/mediamanager.css
@@ -0,0 +1,247 @@
+.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;
+ text-align: left;
+}
+
+.background-container {
+ background-color: __background_alt__;
+ margin-bottom: 10px;
+ padding: 10px;
+ text-align: left;
+}
+
+.mediamanager-link-thumbnails {
+ background: url('../../images/icon-thumb.png') 0 -4px no-repeat;
+ padding-left: 30px;
+ display: block;
+ float: left;
+ width: 0;
+ overflow: hidden;
+}
+
+.mediamanager-link-list {
+ background: url('../../images/icon-list.png') 0 -4px no-repeat;
+ padding-left: 30px;
+ display: block;
+ float: left;
+ width: 0;
+ overflow: hidden;
+}
+
+.mediamanager-block-sort {
+ background: url('../../images/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-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: __background_alt__;
+}
+
+.mediamanager-tabs a:hover {
+ background-color: __background_alt__;
+ opacity: 0.5;
+}
+
+.mediamanager-table td {
+ padding: 5px;
+}
+
+.mediamanager-table tr:nth-child(2n+1){
+ background-color: __background_neu__;
+}
+
+.mediamanager-table {
+ background: expression(this.rowIndex % 2 == 0 ? "#ffffff" : "#f5f5f5");
+}
+
+.mediamanager-table tr:hover {
+ background-color: __background_alt__;
+}
+
+form.meta textarea.edit {
+ height: 8em;
+ width: 95%;
+ min-width: 95%;
+ max-width: 95%;
+}
+
+.mediamanager-file-list {
+ padding: 0;
+ margin: 0 !important;
+}
+
+.mediamanager-thumbs li {
+ width: 100px;
+ min-height: 130px;
+ display: inline-block;
+ margin: 0;
+ margin-right: 10px;
+ margin-bottom: 10px;
+ background-color: __background_alt__;
+ padding: 10px;
+ vertical-align: top;
+ display: -moz-inline-stack;
+ text-align: center;
+ zoom: 1;
+ position: relative;
+}
+* html .mediamanager-thumbs li {
+ display: inline;
+}
+*+html .mediamanager-thumbs li {
+ display: inline;
+ _height: 130px;
+}
+
+.mediamanager-thumbs li .image {
+ width: 100%;
+ height: 90px;
+ display: block;
+ overflow: hidden;
+}
+
+.mediamanager-thumbs li .name,
+.mediamanager-thumbs li .size,
+.mediamanager-thumbs li .filesize,
+.mediamanager-thumbs li .date {
+ display: block;
+ overflow: hidden;
+}
+
+.mediamanager-thumbs li input[type=checkbox] {
+ display: none;
+ float: left;
+ margin: 3px;
+}
+
+.mediamanager-thumbs li:hover input[type=checkbox],
+.mediamanager-thumbs li input[type=checkbox]:checked {
+ display: block;
+}
+
+.mediamanager-list li {
+ list-style: none;
+ display: block;
+ position: relative;
+ max-height: 50px;
+ margin: 0;
+ margin-bottom: 3px;
+}
+
+.mediamanager-list li:nth-child(2n+1) {
+ background-color: __background_neu__;
+}
+
+.mediamanager-list li .image {
+ width: 10%;
+ display: block;
+ overflow: hidden;
+ float: left;
+ height: 40px;
+}
+
+.mediamanager-list li .image img {
+ width: 100%;
+}
+
+.mediamanager-list li .name,
+.mediamanager-list li .size,
+.mediamanager-list li .filesize,
+.mediamanager-list li .date {
+ overflow: hidden;
+ float: left;
+ width: 19%;
+ margin-left: 1%;
+}
+
+.mediamanager-list li .date,
+.mediamanager-thumbs li .date {
+ font-style: italic;
+}
+
+.mediamanager-list li input[type=checkbox] {
+ display: none;
+ float: left;
+ margin: 3px;
+}
+
+.mediamanager-list li:hover input[type=checkbox],
+.mediamanager-list li input[type=checkbox]:checked {
+ display: block;
+}
+
+.mediamanager-file-list li:hover {
+ background-color: #dadada;
+}
+
+.mediamanager-table-50 {
+ padding: 0;
+ margin: 0 !important;
+}
+
+.mediamanager-table-50 li {
+ width: 48%;
+ display: inline-block;
+ margin: 0;
+ margin-bottom: 10px;
+ padding: 2px;
+ vertical-align: top;
+ zoom: 1;
+ color: black !important;
+}
+* html .mediamanager-table-50 li {
+ display: inline;
+}
+
+.mediamanager-preview {
+ margin-bottom: 5px;
+}
+
+.idx .selected {
+ color: red !important;
+} \ No newline at end of file
diff --git a/lib/tpl/default/style.ini b/lib/tpl/default/style.ini
index c5b2c31a5..bc28d1bbc 100644
--- a/lib/tpl/default/style.ini
+++ b/lib/tpl/default/style.ini
@@ -15,6 +15,7 @@ _mediaoptions.css = screen
_admin.css = screen
_linkwiz.css = screen
_subscription.css = screen
+mediamanager.css = screen
rtl.css = rtl
print.css = print