Index: admin_templates/incs/footer.tpl =================================================================== --- admin_templates/incs/footer.tpl (revision 13557) +++ admin_templates/incs/footer.tpl (working copy) @@ -12,9 +12,6 @@ addLoadEvent( function() { Form.Init('scroll_container'); - - // moving uploaders after form resize (needed only, when transparency is used)! - IterateUploaders('moveOutside'); } ); } @@ -28,11 +25,7 @@ addLoadEvent( function() { - IterateUploaders('moveOutside'); - - if (typeof UploadsManager != 'undefined') { - UploadsManager.setScrollEvents(); - } + IterateUploaders('renderBrowseButton'); } ); Index: admin_templates/incs/form_blocks.tpl =================================================================== --- admin_templates/incs/form_blocks.tpl (revision 13606) +++ admin_templates/incs/form_blocks.tpl (working copy) @@ -260,45 +260,13 @@ -
-
0%
-
-
-
- - - - - - - - - - - - - - - - -
Uploading:
Progress:
Time elapsed:
Time remaining:
Cancel
+
+  
- - - - - -
-   - - -
+
-
-
- -
+ @@ -313,6 +281,7 @@ multiple : '', prefix : '', field : '', + thumb_format: '', urls : '', names : '', sizes : '', Index: admin_templates/incs/style_template.css =================================================================== --- admin_templates/incs/style_template.css (revision 13635) +++ admin_templates/incs/style_template.css (working copy) @@ -512,45 +512,49 @@ border-collapse: separate } - /* Uploader */ - -.uploader-main { - position: absolute; - display: none; - z-index: 10; - border: 1px solid #777; - padding: 10px; - width: 350px; - height: 120px; - overflow: hidden; - background-color: #fff; +.uploader-queue div.file { + font-size: 11px; + border: 1px solid #7F99C5; + padding: 3px; + background-color: #DEE7F6; + margin-bottom: 2px; } -.uploader-percent { - width: 100%; - padding-top: 3px; - text-align: center; - position: relative; - z-index: 20; +.uploader-queue .left { float: left; - font-weight: bold; + vertical-align: top; } -.uploader-left { - width: 100%; +.uploader-queue .file-label { + margin-left: 5px; +} + +.uploader-queue .preview .delete-checkbox { + margin-top: -3px; +} + +.uploader-queue .progress-container { + margin: 2px 5px 0px 5px; +} + +.uploader-queue .progress-empty { + width: 150px; + height: 9px; border: 1px solid black; - height: 20px; - background: #fff url('@@base_url@@/core/admin_templates/img/progress_left.gif'); + background: url('@@base_url@@/core/admin_templates/img/progress_left.gif') repeat-x; } -.uploader-done { - width: 0%; - background-color: green; - height: 20px; - background: #4A92CE url('@@base_url@@/core/admin_templates/img/progress_done.gif'); +.uploader-queue .progress-full { + height: 9px; + background: url('@@base_url@@/core/admin_templates/img/progress_done.gif'); } +.uploader-queue .thumbnail { + /*margin-bottom: 2px;*/ + border: 1px solid black; + background-color: grey; +} /* To be sorted */ span#category_path, span#category_path a { Index: admin_templates/js/forms.js =================================================================== --- admin_templates/js/forms.js (revision 13557) +++ admin_templates/js/forms.js (working copy) @@ -291,8 +291,6 @@ // alert('h is: '+h+' min height is '+this.MinHeight+' MinControlsHeight is '+this.MinControlsHeight+' -> '+split+' to split between '+count); // print_pre(this.Controls) - - IterateUploaders('syncBrowseButton'); } Form.ResetHeights = function() Index: admin_templates/js/script.js =================================================================== --- admin_templates/js/script.js (revision 13557) +++ admin_templates/js/script.js (working copy) @@ -161,11 +161,11 @@ var $form = document.getElementById($form_name); - if (typeof $form.onsubmit == 'function') { + if ($.isFunction($form.onsubmit)) { $form.onsubmit(); } - $form.submit(); + $($form).submit(); $form.target = ''; set_hidden_field('t', t); Index: admin_templates/js/uploader/upload_manager.js =================================================================== --- admin_templates/js/uploader/upload_manager.js (revision 13557) +++ admin_templates/js/uploader/upload_manager.js (working copy) @@ -1,5 +1,6 @@ function UploadsManager() { - addLoadEvent( + + $(document).ready( function() { UploadsManager._initAll(); } @@ -14,49 +15,13 @@ UploadsManager._debugMode = false; UploadsManager._Uploaders = {}; -UploadsManager._singleUpload = true; -/* ==== Public Attributes ==== */ -UploadsManager.useToolbar = true; -UploadsManager.formContainerId = ''; -UploadsManager.useTransparency = true; -UploadsManager.uploadCancelled = false; - /* ==== Private methods ==== */ -UploadsManager.setScrollEvents = function() { - var $scroll_container = this._getScrollContainer(); - - addEvent( - $scroll_container, - 'scroll', - function(ev) { - UploadsManager.iterate('syncBrowseButton'); - } - ) -} - UploadsManager._nextFlashId = function() { this._nextId++; return 'uploaderflash' + this._nextId; } -UploadsManager._getFormContainer = function() { - if (UploadsManager.formContainerId) { - return document.getElementById(UploadsManager.formContainerId); - } - - return Form.Div; -} - - -UploadsManager._getScrollContainer = function() { - if (UploadsManager.formContainerId) { - return document.body; - } - - return document.getElementById(Form.Div.id + '_container'); -} - UploadsManager._initAll = function() { this._createHooks(); @@ -120,36 +85,19 @@ } UploadsManager._createHooks = function () { - if (typeof Application != 'undefined') { - Application.setHook( - 'm:OnAfterFormInit', - function () { - UploadsManager.setScrollEvents(); - } - ); - } + var $me = this; - // hooking to standard toolbar select button to peform auto-upload when Save is clicked - if (!UploadsManager.useToolbar || !isset(a_toolbar)) { - return ; - } + $('#' + $form_name).submit( + function ($e) { + if ($me._hasQueue()) { + submitted = false; + alert('File upload is in progress. Please cancel the upload or wait until it\'s completed.'); - if (a_toolbar.ButtonExists('select')) { - var old_onclick = a_toolbar.Buttons['select'].onClick; - a_toolbar.Buttons['select'].onClick = function() { - UploadsManager.UploadAll( - function() { - if (UploadsManager._debugMode) { - if (!confirm('Proceed with form submitting?')) { - return ; - } - } - - old_onclick(); - } - ); + return false; + } } - } + + ); } /* ==== Public methods ==== */ @@ -160,12 +108,11 @@ UploadsManager.RemoveUploader = function(id) { this._Uploaders[id].remove(); delete this._Uploaders[id]; - this.iterate('syncBrowseButton'); } UploadsManager.DeleteFile = function(uploader_id, fname, confirmed) { - if (!confirmed && !confirm('Are you sure you want to delete this file?')) { - return; + if (!confirmed && !confirm('Are you sure you want to delete "' + fname + '" file?')) { + return false; } var $uploader = this._Uploaders[uploader_id]; @@ -176,7 +123,7 @@ function(req, fname, $uploader) { $uploader.removeFile({id:fname}) $uploader.deleted.push(fname); - $uploader.updateInfo(); + $uploader.updateInfo(undefined, true); }, function(req, fname, $uploader) { @@ -184,10 +131,11 @@ }, fname, $uploader ); + + return true; } UploadsManager.StartUpload = function(id) { - UploadsManager._singleUpload = true; this._Uploaders[id].startUpload(); } @@ -195,55 +143,8 @@ this._Uploaders[id].callFlash('CancelUpload', [file_id]); } -UploadsManager.UploadAll = function(onAllUploaded) { - if (!this._hasQueue()) { - onAllUploaded(); - return ; - } - - UploadsManager._singleUpload = false; - for (var i in this._Uploaders) { - // could raise problems, when simultanious uploads from diffrent uploaders are made - this._Uploaders[i].startUpload(); - } - - this.OnAllUploaded = onAllUploaded; -} - UploadsManager.UploadQueueComplete = function($uploader) { - var $all_uploaded = true; // all queued files were uploaded - var $all_processed = true; // all queued files were processed (uploaded OR cancelled) - for (var i in this._Uploaders) { - var $queue_owner = this._Uploaders[i].id == $uploader.id; - if (UploadsManager._singleUpload && !$queue_owner) { - // count only current uploader when single upload is made - continue; - } - - if ($queue_owner) { - this._Uploaders[i].finalizeUpload(); - } - - var $empty_queue = !this._Uploaders[i].hasQueue(); - - $all_uploaded = $all_uploaded && $empty_queue; - $all_processed = $all_processed && ($empty_queue || this._Uploaders[i].uploadCancelled); - } - - if ($all_processed) { - // enable all browse button, when upload is totally completed or cancelled - UploadsManager.iterate('disableBrowse', false); - } - - if (UploadsManager.useTransparency && $all_processed) { - // remove transparency, when all uploaders are done - Request.setOpacity(100, UploadsManager._getFormContainer()); - } - - if ($all_uploaded && isset(this.OnAllUploaded) && !this.uploadCancelled) { - this.OnAllUploaded(); - } } UploadsManager.CancelUpload = function(id) { @@ -313,22 +214,26 @@ // delete file added this.files_count++; this.files.push(file); - this.total += file.size; + if (this.files[0].uploaded) { UploadsManager.DeleteFile(UploadsManager._getUploader(file).id, this.files[0].name, true); } else { this.callFlash('CancelUpload', [this.files[0].id]); } + + this.startUpload(); } } else { // new file will not exceed allowed file number this.files_count++; this.files.push(file); - this.total += file.size; + + this.startUpload(); } - this.updateInfo(); + + this.updateInfo(this.files.length - 1); } ) } Index: admin_templates/js/uploader/uploader.js =================================================================== --- admin_templates/js/uploader/uploader.js (revision 13557) +++ admin_templates/js/uploader/uploader.js (working copy) @@ -4,7 +4,6 @@ function Uploader(id, params) { this.id = id; - this._moved = false; // flash was moved outside scroll container // normalize params if (isNaN(parseInt(params.multiple))) { @@ -23,12 +22,10 @@ this.files_count = 0; this.files = new Array(); - this.deleted = new Array() + this.deleted = new Array(); this.uploadURL = params.uploadURL; this.deleteURL = params.deleteURL; - - this._resetCounters(); } /* ==== Private methods ==== */ @@ -45,6 +42,7 @@ allowedFiletypesDescription : 'All Files', allowedFilesize : 0, // Default zero means "unlimited" multiple : 0, + thumb_format: '', fileQueueLimit : 0, buttonImageURL : '', buttonWidth : 1, @@ -81,6 +79,7 @@ Uploader.prototype._prepareFiles = function() { var ids = ''; var names = ''; + for (var f = 0; f < this.files.length; f++) { if (isset(this.files[f].uploaded) && !isset(this.files[f].temp)) { continue; @@ -92,38 +91,24 @@ ids = ids.replace(/\|$/, '', ids); names = names.replace(/\|$/, '', names); + document.getElementById(this.id+'[tmp_ids]').value = ids; document.getElementById(this.id+'[tmp_names]').value = names; document.getElementById(this.id+'[tmp_deleted]').value = this.deleted.join('|'); } -Uploader.prototype._getMicroTime = function() { - var $now = new Date(); - return Math.round($now.getTime() / 1000); // because miliseconds are returned too -} +Uploader.prototype._formatSize = function (bytes) { + var kb = Math.round(bytes / 1024); -Uploader.prototype._getEstimatedTime = function() { - return Math.ceil((100 - this.ProgressPercent) * this.ProgressTime / this.ProgressPercent); -} + if (kb < 1024) { + return kb + ' KB'; + } -Uploader.prototype._formatTime = function ($seconds) { - $seconds = parseInt($seconds); + var mb = Math.round(kb / 1024 * 100) / 100; - var $minutes = Math.floor($seconds / 60); - if ($minutes < 10) $minutes = '0' + $minutes; - $seconds = $seconds % 60; - if ($seconds < 10) $seconds = '0' + $seconds; - - return $minutes + ':' + $seconds; + return mb + ' MB'; } -Uploader.prototype._formatSize = function (bytes) { - var kb = Math.round(bytes / 1024); - if (kb < 1024) return kb+'Kb'; - var mb = Math.round(kb / 1024 * 100)/100; - return mb+'Mb'; -} - Uploader.prototype._executeNextEvent = function () { var f = this._eventQueue ? this._eventQueue.shift() : null; if (typeof(f) === 'function') { @@ -133,34 +118,8 @@ /* ==== Public methods ==== */ Uploader.prototype.init = function() { - if (this.params.buttonPlaceholderId !== false) { - // use given container - var holder = document.getElementById(this.params.buttonPlaceholderId); - } - else { - // create container on the fly - var holder = document.createElement('DIV'); - document.body.appendChild(holder); - } - - if (UploadsManager.useTransparency) { - document.getElementById($form_name).style.display = 'block'; - } - - // moving out progress div to overcome loosing of flash object after setting opacity - this.div = document.getElementById(this.id+'_progress'); - var clone = this.div.cloneNode(true); - this.div.parentNode.removeChild(this.div) - this.div = document.body.appendChild(clone); this.IconPath = this.params.IconPath ? this.params.IconPath : '../admin_templates/img/browser/icons'; - this.filename = document.getElementById(this.id+'_progress_filename'); - this.progress = document.getElementById(this.id+'_progress_progress'); - this.elapsed = document.getElementById(this.id+'_progress_elapsed'); - this.remaining = document.getElementById(this.id+'_progress_remaining'); - this.percent = document.getElementById(this.id+'_percent'); - this.done = document.getElementById(this.id+'_done'); - // initialize flash object this.flash_id = UploadsManager._nextFlashId(); @@ -184,7 +143,7 @@ this.swf.addParam('wmode', escape(this.params.wmode)); this.swf.addVariable('movieName', escape(this.flash_id)); - this.swf.addVariable('fileUploadLimit', escape(this.params.multiple)); + this.swf.addVariable('fileUploadLimit', 0); this.swf.addVariable('fileQueueLimit', escape(this.params.fileQueueLimit)); this.swf.addVariable('fileSizeLimit', escape(this.params.allowedFilesize)); // in kilobytes this.swf.addVariable('fileTypes', escape(this.params.allowedFiletypes)); @@ -207,62 +166,50 @@ this.swf.addVariable('debugEnabled', escape('true')); // flash var } - if (this.params.buttonPlaceholderId === false || !UploadsManager.useTransparency) { - // only write flash, when button placeholder is not used - this.swf.write(holder); - this.flash = document.getElementById(this.flash_id); - } + var $me = this; + Application.setHook( + 'm:OnAfterFormInit', + function () { + $me.renderBrowseButton(); + } + ) + if (this.params.urls != '') { var urls = this.params.urls.split('|'); var names = this.params.names.split('|'); var sizes = this.params.sizes.split('|'); + for (var i = 0; i < urls.length; i++) { var a_file = { id : names[i], name : names[i], url : urls[i], size: sizes[i], - uploaded : 1 - } - this.files.push(a_file) + uploaded : 1, + progress: 100 + }; + + this.files.push(a_file); this.files_count++; } + this.updateInfo(); } } -Uploader.prototype.moveOutside = function() { - // move flash outside scroll_container, but keeps it's position on screen - if (!UploadsManager.useTransparency || this._moved) { - // moving only needed when transparency us used (e.g. in admin) - return ; - } +Uploader.prototype.renderBrowseButton = function() { + var holder = document.getElementById(this.params.buttonPlaceholderId); + this.swf.write(holder); - var $new_container = document.createElement('DIV'); - $new_container.id = this.params.buttonPlaceholderId + '_outside'; - $new_container.style.position = 'absolute'; - - var $old_container = document.getElementById(this.params.buttonPlaceholderId); - $new_container.style.top = getRealTop($old_container) + 'px'; - $new_container.style.left = getRealLeft($old_container) + 'px'; - - var $holder_dimensions = getDimensions($old_container); - $new_container.style.width = $holder_dimensions.innerWidth + 'px'; - $new_container.style.height = $holder_dimensions.innerHeight + 'px'; - - document.body.appendChild($new_container); - - this.swf.write($new_container); // write flash outside scroll_container - this.flash = document.getElementById(this.flash_id); // fix reference to flash object - - this._moved = true; + this.flash = document.getElementById(this.flash_id); } Uploader.prototype.remove = function() { - var id = this._moved ? this.params.buttonPlaceholderId + '_outside' : this.params.buttonPlaceholderId; + var id = this.params.buttonPlaceholderId; var obj = document.getElementById(id); + if (obj/* && obj.nodeName == "OBJECT"*/) { var u = navigator.userAgent.toLowerCase(); var p = navigator.platform.toLowerCase(); @@ -298,98 +245,167 @@ } } -Uploader.prototype.syncBrowseButton = function() { - // when flash is moved outside scroll_container, keeps it's position on screen during scroll operations - if (!this._moved) { - return ; - } +Uploader.prototype.isImage = function($filename) { + $filename.match(/\.([^.]*)$/); + var $ext = RegExp.$1.toLowerCase(); - var $scroll_container = UploadsManager._getScrollContainer(); - var $scroll_container_top = getRealTop($scroll_container); - var $scroll_container_left = getRealLeft($scroll_container); + return $ext.match(/^(bmp|gif|jpg|jpeg|png)$/); +} - var $scroll_top = $scroll_container.scrollTop; - var $scroll_left = $scroll_container.scrollLeft; +Uploader.prototype.getFileIcon = function($filename) { + $filename.match(/\.([^.]*)$/); + var ext = RegExp.$1.toLowerCase(); - var $old_container = document.getElementById(this.params.buttonPlaceholderId); - var $new_container = document.getElementById(this.params.buttonPlaceholderId + '_outside'); + $icon = ext.match(/^(ai|avi|bmp|cs|dll|doc|dot|exe|fla|gif|htm|html|jpg|js|mdb|mp3|pdf|ppt|rdp|swf|swt|txt|vsd|xls|xml|zip)$/) ? ext : 'default.icon'; + return this.IconPath + '/' + $icon + '.gif'; +} - var $old_container_top = getRealTop($old_container); - var $old_container_left = getRealLeft($old_container); +Uploader.prototype.getQueueElement = function($file) { + var $ret = ''; + var $icon_image = this.getFileIcon($file.name); + var $file_label = $file.name + ' (' + this._formatSize($file.size) + ')'; + var $need_preview = false; - if ($scroll_container_top <= $old_container_top - $scroll_top) { - // prevents moving outside $scroll_container - $new_container.style.top = ($old_container_top - $scroll_top) + 'px'; + if (isset($file.uploaded)) { + // add deletion checkbox + $need_preview = (this.params.thumb_format.length > 0) && this.isImage($file.name); + $ret += '
'; + + // add icon based on file type + $ret += '
'; + + if ($need_preview) { + $ret += ''; + } + else { + $ret += ''; + } + + $ret += '
' + + // add filename + preview link + $ret += ''; } else { - // move browse button outside visible area - $new_container.style.top = -this.params.buttonHeight + 'px'; + // add icon based on file type + $ret += '
'; + + // add filename + $ret += '
' + $file_label + '
'; + + // add empty progress bar + $ret += '
'; + + // add cancel upload link + $ret += ''; } - if ($scroll_container_left <= $old_container_left - $scroll_left) { - // prevents moving outside $scroll_container - $new_container.style.left = ($old_container_left - $scroll_left) + 'px'; + $ret += '
'; + $ret = $('
' + $ret + '
'); + + // set click events + var $me = this; + + $('.delete-file-btn', $ret).click( + function ($e) { + $(this).attr('checked', UploadsManager.DeleteFile($me.id, $file.name) ? '' : 'checked'); + } + ); + + $('.cancel-upload-btn', $ret).click( + function ($e) { + UploadsManager.CancelFile(UploadsManager._getUploader($file).id, $file.id); + return false; + } + ); + + // prepare auto-loading preview + var $image = $('img.thumbnail-image', $ret); + + if ($image.length > 0) { + var $tmp_image = new Image(); + $tmp_image.src = $image.attr('large_src'); + + $($tmp_image).load ( + function ($e) { + $image.attr('src', $tmp_image.src).addClass('thumbnail'); + } + ); } - else { - // move browse button outside visible area - $new_container.style.left = -this.params.buttonWidth + 'px'; - } + + return $ret; } -Uploader.prototype.updateInfo = function() { - var $o = ''; - var $icon = ''; - var $filename = ''; - var $delete_code = ''; +Uploader.prototype.updateQueueFile = function($file_index, $delete_file) { + $queue_container = $( jq('#' + this.id + '_queueinfo') ); - for (var f = 0; f < this.files.length; f++) { - this.files[f].name.match(/\.([^.]*)$/); - var ext = RegExp.$1.toLowerCase(); - $icon = ext.match(/^(ai|avi|bmp|cs|dll|doc|dot|exe|fla|gif|htm|html|jpg|js|mdb|mp3|pdf|ppt|rdp|swf|swt|txt|vsd|xls|xml|zip)$/) ? ext : 'default.icon'; - $icon = ' '; + if ($delete_file !== undefined && $delete_file) { + $( jq('#' + this.files[$file_index].id + '_queue_row') ).remove(); - if (isset(this.files[f].uploaded)) { - $filename = '' + this.files[f].name + ' (' + this._formatSize(this.files[f].size) + ')'; - $delete_code = 'UploadsManager.DeleteFile(\'' + this.id + '\', \'' + this.files[f].name + '\')'; + if (this.files.length == 1) { + $queue_container.css('margin-top', '0px'); } + return ; + } + + $ret = this.getQueueElement( this.files[$file_index] ); + var $row = $( jq('#' + this.files[$file_index].id + '_queue_row') ); + + if ($row.length > 0) { + // file round -> replace + $row.replaceWith($ret); + } + else { + // file not found - add + $( jq('#' + this.id + '_queueinfo') ).append($ret); + $queue_container.css('margin-top', '8px'); + } +} + +Uploader.prototype.updateInfo = function($file_index, $prepare_only) { + if ($prepare_only === undefined || !$prepare_only) { + if ($file_index === undefined) { + for (var f = 0; f < this.files.length; f++) { + this.updateQueueFile(f); + } + } else { - $filename = this.files[f].name + ' (' + this._formatSize(this.files[f].size) + ')'; - $delete_code = 'UploadsManager.CancelFile(\'' + UploadsManager._getUploader(this.files[f]).id + '\', \'' + this.files[f].id + '\')'; + this.updateQueueFile($file_index); } - - $o += '' + $icon + '' + $filename + ' [Delete]'; } - document.getElementById(this.id+'_queueinfo').innerHTML = '' + $o + '
'; this._prepareFiles(); +} - // sync position of all uploaders below current, because file queue height change will not affect their positions - UploadsManager.iterate('syncBrowseButton', 'timeout:0'); +Uploader.prototype.updateProgressOnly = function ($file_index) { + var $progress_code = '
'; + + $('#' + this.files[$file_index].id + '_progress').html($progress_code); } Uploader.prototype.removeFile = function (file) { - var n_files = new Array(); var count = 0; - var $new_total = 0; + var n_files = new Array(); + var $to_delete = []; + for (var f = 0; f < this.files.length; f++) { if (this.files[f].id != file.id && this.files[f].name != file.id) { n_files.push(this.files[f]); - if (!isset(this.files[f].uploaded)) { - $new_total += file.size; - } count++; } + else { + $to_delete.push(f); + } } - if (this.StartTime == 0) { - // don't update total during upload, because that breaks progress bar - this.total = $new_total; + for (var $i = 0; $i < $to_delete.length; $i++) { + this.updateQueueFile($to_delete[$i], true); } this.files = n_files; this.files_count = count; - this.updateInfo(); + this.updateInfo(undefined, true); } Uploader.prototype.hasQueue = function() { @@ -405,121 +421,78 @@ } Uploader.prototype.startUpload = function() { - UploadsManager.uploadCancelled = this.uploadCancelled = false; + this.uploadCancelled = false; if (!this.hasQueue()) { return; } - if (UploadsManager.useTransparency) { - Request.setOpacity(30, UploadsManager._getFormContainer()); - } - - if (!document.all) { - var $winW = window.innerWidth; - var $winH = window.innerHeight; - } - else { - var $winW = window.document.body.offsetWidth; - var $winH = window.document.body.offsetHeight; - } - - var left = Math.round(($winW - 350)/2)+'px'; - var top = Math.round(($winH - 110)/2)+'px'; - - this.div.style.top = top; - this.div.style.left = left; - this.div.style.display = 'block'; - - if (UploadsManager.useTransparency) { - Request.setOpacity(100, this.div); - } - - this.StartTime = this._getMicroTime(); - this.ProgressPercent = 0; // progress percent - this.ProgressTime = new Array(); - - this.uploaded = 0; - this.total = 0; - for (var f = 0; f < this.files.length; f++) { - if (isset(this.files[f].uploaded)) { - // get total bytes of non-uploaded files - continue; - } - this.total += this.files[f].size; - } - this.callFlash('StartUpload'); } Uploader.prototype.cancelUpload = function() { this.callFlash('StopUpload'); - var $stats = this.callFlash('GetStats'); + while ($stats.files_queued > 0) { this.callFlash('CancelUpload'); - $stats = this.callFlash('GetStats'); } - UploadsManager.uploadCancelled = this.uploadCancelled = true; + this.uploadCancelled = true; } Uploader.prototype.UploadFileStart = function(file) { - this.filename.innerHTML = file.name; + var $file_index = this.getFileIndex(file); + this.files[$file_index].progress = 0; + this.updateProgressOnly($file_index); this.callFlash('AddFileParam', [file.id, 'field', this.params.field]); this.callFlash('AddFileParam', [file.id, 'id', file.id]); this.callFlash('AddFileParam', [file.id, 'flashsid', this.params.flashsid]); - UploadsManager.iterate('disableBrowse', true); // disable all "Browse" buttons (not just for current uploader)! - // we can prevent user from adding any files here :) this.callFlash('ReturnUploadStart', [true]); } Uploader.prototype.UploadProgress = function(file, bytesLoaded, bytesTotal) { - this.cur_file_uploaded = bytesLoaded; - var uploaded = this.uploaded + this.cur_file_uploaded; - this.ProgressTime = this._getMicroTime() - this.StartTime; + var $file_index = this.getFileIndex(file); + this.files[$file_index].progress = Math.round(bytesLoaded / bytesTotal * 100); + this.updateProgressOnly($file_index); +} - var speed = 0; - if (this.ProgressTime > 0) { - speed = Math.round(uploaded / this.ProgressTime * 100) / 100; +Uploader.prototype.UploadFileComplete = function(file) { + var $file_index = this.getFileIndex(file); + + if ($file_index !== false) { + // in case if file upload was cancelled, then no info here + this.files[$file_index].uploaded = 1; + this.files[$file_index].progress = 100; + this.files[$file_index].temp = 1; + this.files[$file_index].url = this.params.tmp_url.replace('#ID#', file.id).replace('#FILE#', file.name).replace('#FIELD#', this.params.field); } - this.progress.innerHTML = this._formatSize(uploaded) + ' / ' + this._formatSize(this.total) + ' (' + this._formatSize(speed) + '/s)'; - this.ProgressPercent = Math.round(uploaded / this.total * 100); - this.done.style.width = this.ProgressPercent + '%'; - this.percent.innerHTML = this.ProgressPercent + '%'; + this.updateInfo($file_index); - this.elapsed.innerHTML = this._formatTime(this.ProgressTime ); - this.remaining.innerHTML = this._formatTime( this._getEstimatedTime() ); + // upload next file in queue + var $stats = this.callFlash('GetStats'); + + if ($stats.files_queued > 0) { + this.callFlash('StartUpload'); + } + else { + UploadsManager.UploadQueueComplete(this); + } } -Uploader.prototype.UploadFileComplete = function(file) { - this.uploaded += this.cur_file_uploaded; +Uploader.prototype.getFileIndex = function(file) { for (var f = 0; f < this.files.length; f++) { if (this.files[f].id == file.id) { - this.files[f].uploaded = 1; - this.files[f].temp = 1; - this.files[f].url = this.params.tmp_url.replace('#ID#', file.id).replace('#FILE#', file.name).replace('#FIELD#', this.params.field); + return f; } } - this.updateInfo(); - // upload next file in queue - var $stats = this.callFlash('GetStats'); - if ($stats.files_queued > 0 && !UploadsManager.uploadCancelled) { - this.callFlash('StartUpload'); - } else { - // all files in queue are uploaded OR upload was cancelled globally - if (UploadsManager.uploadCancelled) { - // when upload was cancelled globally -> cancel it for any other uploader - this.cancelUpload(); - } - UploadsManager.UploadQueueComplete(this); - } + return false; } Uploader.prototype.queueEvent = function (function_body) { @@ -598,32 +571,17 @@ }; Uploader.prototype.onFlashReady = function() { - this.disableBrowse(false); - UploadsManager.iterate('syncBrowseButton'); -} + var $me = this; -Uploader.prototype.disableBrowse = function($disabled) { - if ($disabled === undefined) { - $disabled = true; - } - this.queueEvent( function() { - this.callFlash('SetButtonDisabled', [$disabled]); + setTimeout( + function () { + // enable upload button, when flash is fully loaded + $me.callFlash('SetButtonDisabled', [false]); + }, 0 + ) + } ); } - -Uploader.prototype._resetCounters = function() { - this.StartTime = 0; // time, when upload was started - this.ProgressPercent = 0; // upload progress in percents - this.ProgressTime = 0; // flash upload process callback times - this.total = 0; // total bytes to upload (from all queued files) - this.uploaded = 0; // total uploaded bytes (from all queued files) -} - -Uploader.prototype.finalizeUpload = function() { - // hide progress bar only of uploader, that completed it's queue - this.div.style.display = 'none'; - this._resetCounters(); -} \ No newline at end of file Index: admin_templates/swfupload.swf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: install/install_data.sql =================================================================== --- install/install_data.sql (revision 13635) +++ install/install_data.sql (working copy) @@ -673,7 +673,7 @@ INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:skins.edit', 11, 1, 1, 0); INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:skins.delete', 11, 1, 1, 0); -INSERT INTO Skins VALUES(DEFAULT, 'Default', '/* General elements */\r\n\r\nhtml {\r\n height: 100%;\r\n}\r\n\r\nbody {\r\n font-family: verdana,arial,helvetica,sans-serif;\r\n color: #000000;\r\n overflow-x: auto; overflow-y: auto;\r\n margin: 0px 0px 0px 0px;\r\n text-decoration: none;\r\n}\r\n\r\nbody, td {\r\n /* fix for Firefox, when font-size was not inherited in table cells */\r\n font-size: 9pt;\r\n}\r\n\r\na {\r\n color: #006699;\r\n text-decoration: none;\r\n}\r\n\r\na:hover {\r\n color: #009ff0;\r\n text-decoration: none;\r\n}\r\n\r\nform {\r\n display: inline;\r\n}\r\n\r\nimg { border: 0px; }\r\n\r\nbody.height-100 {\r\n height: 100%;\r\n}\r\n\r\nbody.regular-body {\r\n margin: 0px 10px 5px 10px;\r\n color: #000000;\r\n background-color: @@SectionBgColor@@;\r\n}\r\n\r\nbody.edit-popup {\r\n margin: 0px 0px 0px 0px;\r\n}\r\n\r\ntable.collapsed {\r\n border-collapse: collapse;\r\n}\r\n\r\n.bordered, table.bordered, .bordered-no-bottom {\r\n border: 1px solid #000000;\r\n border-collapse: collapse;\r\n}\r\n\r\n.bordered-no-bottom {\r\n border-bottom: none;\r\n}\r\n\r\n.login-table td {\r\n padding: 1px;\r\n}\r\n\r\n.disabled {\r\n background-color: #ebebeb;\r\n}\r\n\r\n/* Head frame */\r\ntable.head-table {\r\n background: url(''@@base_url@@/core/admin_templates/img/top_frame/right_background.png'') top right @@HeadBgColor@@ no-repeat;\r\n}\r\n\r\n.head-table tr td, .head-table tr td a {\r\n color: @@HeadColor@@\r\n}\r\n\r\ndiv#extra_toolbar td.button-active {\r\n background: url(''@@base_url@@/core/admin_templates/img/top_frame/toolbar_button_background.gif'') bottom left repeat-x;\r\n height: 22px;\r\n}\r\n\r\ndiv#extra_toolbar td.button-active a {\r\n color: black;\r\n text-decoration: none;\r\n}\r\n\r\ntd.kx-block-header, .head-table tr td.kx-block-header{\r\n color: @@HeadBarColor@@;\r\n background: url(''@@base_url@@/core/admin_templates/img/top_frame/toolbar_background.gif'') repeat-x top left;\r\n /*background-color: @@HeadBarBgColor@@;*/\r\n padding-left: 7px;\r\n padding-right: 7px;\r\n}\r\n\r\na.kx-header-link {\r\n text-decoration: underline;\r\n font-weight: bold;\r\n color: #0080C8;\r\n}\r\n\r\na.kx-header-link:hover {\r\n color: #FFCB05;\r\n text-decoration: none;\r\n}\r\n\r\n.kx-secondary-foreground {\r\n color: #FFFFFF;\r\n /*background-color: @@HeadBarBgColor@@;*/\r\n}\r\n\r\n.kx-login-button {\r\n background-color: #2D79D6;\r\n color: #FFFFFF;\r\n}\r\n\r\n/* General form button (yellow) */\r\n.button {\r\n font-size: 12px;\r\n font-weight: normal;\r\n color: #000000;\r\n background: url(''@@base_url@@/core/admin_templates/img/button_back.gif'') #f9eeae repeat-x;\r\n text-decoration: none;\r\n}\r\n\r\n/* Disabled (grayed-out) form button */\r\n.button-disabled {\r\n font-size: 12px;\r\n font-weight: normal;\r\n color: #676767;\r\n background: url(''@@base_url@@/core/admin_templates/img/button_back_disabled.gif'') #f9eeae repeat-x;\r\n text-decoration: none;\r\n}\r\n\r\n/* Tabs bar */\r\n\r\n.tab, .tab-active {\r\n background-color: #F0F1EB;\r\n padding: 3px 7px 2px 7px;\r\n border-top: 1px solid black;\r\n border-left: 1px solid black;\r\n border-right: 1px solid black;\r\n margin-left: 3px !important;\r\n white-space: nowrap;\r\n}\r\n\r\n.tab-active {\r\n background-color: #4487D9;\r\n}\r\n\r\n.tab a {\r\n color: #4487D9;\r\n font-weight: bold;\r\n}\r\n\r\n.tab-active a {\r\n color: #FFFFFF;\r\n font-weight: bold;\r\n}\r\n\r\na.scroll-left, a.scroll-right {\r\n cursor: pointer;\r\n display: block;\r\n float: left;\r\n height: 18px;\r\n margin: 0px 1px;\r\n width: 18px;\r\n}\r\n\r\na.scroll-left {\r\n background: transparent url(''@@base_url@@/core/admin_templates/img/tabs/left.png'') no-repeat scroll 0 0;\r\n}\r\n\r\na.scroll-right {\r\n background: transparent url(''@@base_url@@/core/admin_templates/img/tabs/right.png'') no-repeat scroll 0 0;\r\n}\r\n\r\na.disabled {\r\n visibility: hidden !important;\r\n}\r\n\r\na.scroll-left:hover, a.scroll-right:hover {\r\n background-position: 0 -18px;\r\n}\r\n\r\ntd.scroll-right-container {\r\n width: 20px;\r\n}\r\n\r\ntd.scroll-right-container.disabled, td.scroll-right-container.disabled * {\r\n width: 0px;\r\n margin: 0px;\r\n}\r\n\r\ntd.scroll-right-container.disabled br {\r\n display: none;\r\n}\r\n\r\n/* Toolbar */\r\n\r\n.toolbar {\r\n font-size: 8pt;\r\n border: 1px solid #000000;\r\n border-width: 0px 1px 1px 1px;\r\n background-color: @@ToolbarBgColor@@;\r\n border-collapse: collapse;\r\n}\r\n\r\n.toolbar td {\r\n height: 100%;\r\n}\r\n\r\n.toolbar-button, .toolbar-button-disabled, .toolbar-button-over {\r\n float: left;\r\n text-align: center;\r\n font-size: 8pt;\r\n padding: 5px 5px 5px 5px;\r\n vertical-align: middle;\r\n color: #006F99;\r\n}\r\n\r\n.toolbar-button-over {\r\n color: #000;\r\n}\r\n\r\n.toolbar-button-disabled {\r\n color: #444;\r\n}\r\n\r\n/* Scrollable Grids */\r\n\r\n\r\n.layout-only-table td {\r\n border: none !important;\r\n}\r\n\r\n/* Main Grid class */\r\n.grid-scrollable {\r\n padding: 0px;\r\n border: 1px solid black !important;\r\n border-top: none !important;\r\n}\r\n\r\n/* Div generated by js, which contains all the scrollable grid elements, affects the style of scrollable area without data (if there are too few rows) */\r\n.grid-container {\r\n background-color: #fff;\r\n}\r\n\r\n.grid-container table {\r\n border-collapse: collapse;\r\n}\r\n\r\n/* Inner div generated in each data-cell */\r\n.grid-cell-div {\r\n overflow: hidden;\r\n height: auto;\r\n}\r\n\r\n/* Main row definition */\r\n.grid-data-row td, .grid-data-row-selected td, .grid-data-row-even-selected td, .grid-data-row-mouseover td, .table-color1, .table-color2 {\r\n font-weight: normal;\r\n color: @@OddColor@@;\r\n background-color: @@OddBgColor@@;\r\n padding: 3px 5px 3px 5px;\r\n overflow: hidden;\r\n border-right: 1px solid #c9c9c9;\r\n}\r\n.grid-data-row-even td, .table-color2 {\r\n background-color: @@EvenBgColor@@;\r\n color: @@EvenColor@@;\r\n}\r\n.grid-data-row td a, .grid-data-row-selected td a, .grid-data-row-mouseover td a {\r\n text-decoration: underline;\r\n}\r\n\r\n/* mouse-over rows */\r\n.grid-data-row-mouseover td, table tr.grid-data-row[_row_highlighted] td {\r\n background: #FFFDF4;\r\n}\r\n\r\n/* Selected row, applies to both checkbox and data areas */\r\n.grid-data-row-selected td, table tr.grid-data-row[_row_selected] td {\r\n background: #FEF2D6;\r\n}\r\n\r\n.grid-data-row-even-selected td, .grid-data-row-even[_row_selected] td {\r\n background: #FFF7E0;\r\n}\r\n\r\n/* General header cell definition */\r\n.grid-header-row td {\r\n font-weight: bold;\r\n background-color: @@ColumnTitlesBgColor@@;\r\n text-decoration: none;\r\n padding: 3px 5px 3px 5px;\r\n color: @@ColumnTitlesColor@@;\r\n border-right: none;\r\n text-align: left;\r\n vertical-align: middle !important;\r\n white-space: nowrap;\r\n border-right: 1px solid #777;\r\n}\r\n\r\n/* Filters row */\r\ntr.grid-header-row-1 td {\r\n background-color: @@FiltersBgColor@@;\r\n border-bottom: 1px solid black;\r\n}\r\n\r\n/* Grid Filters */\r\ntable.range-filter {\r\n width: 100%;\r\n}\r\n\r\n.range-filter td {\r\n padding: 0px 0px 2px 2px !important;\r\n border: none !important;\r\n font-size: 8pt !important;\r\n font-weight: normal !important;\r\n text-align: left;\r\n color: #000000 !important;\r\n}\r\n\r\ninput.filter, select.filter, input.filter-active, select.filter-active {\r\n margin-bottom: 0px;\r\n border: 1px solid #aaa;\r\n}\r\n\r\ninput.filter-active {\r\n background-color: #FFFF00;\r\n}\r\n\r\nselect.filter-active {\r\n background-color: #FFFF00;\r\n}\r\n\r\n/* Column titles row */\r\ntr.grid-header-row-0 td {\r\n height: 25px;\r\n font-weight: bold;\r\n background-color: @@ColumnTitlesBgColor@@;\r\n color: @@ColumnTitlesColor@@;\r\n border-bottom: 1px solid black;\r\n}\r\n\r\ntr.grid-header-row-0 td a {\r\n color: @@ColumnTitlesColor@@;\r\n}\r\n\r\ntr.grid-header-row-0 td a:hover {\r\n color: #FFCC00;\r\n}\r\n\r\n\r\n.grid-footer-row td {\r\n background-color: #D7D7D7;\r\n font-weight: bold;\r\n border-right: 1px solid #C9C9C9;\r\n padding: 3px 5px 3px 5px;\r\n}\r\n\r\ntd.grid-header-last-cell, td.grid-data-last-cell, td.grid-footer-last-cell {\r\n border-right: none !important;\r\n}\r\n\r\ntd.grid-data-col-0, td.grid-data-col-0 div {\r\n text-align: center;\r\n vertical-align: middle !important;\r\n}\r\n\r\ntr.grid-header-row-1 td.grid-header-col-1 {\r\n text-align: center;\r\n vertical-align: middle !important;\r\n}\r\n\r\ntr.grid-header-row-1 td.grid-header-col-1 div {\r\n display: table-cell;\r\n vertical-align: middle;\r\n}\r\n\r\n.grid-status-bar {\r\n border: 1px solid black;\r\n border-top: none;\r\n padding: 0px;\r\n width: 100%;\r\n border-collapse: collapse;\r\n height: 30px;\r\n}\r\n\r\n.grid-status-bar td {\r\n background-color: @@TitleBarBgColor@@;\r\n color: @@TitleBarColor@@;\r\n font-size: 11pt;\r\n font-weight: normal;\r\n padding: 2px 8px 2px 8px;\r\n}\r\n\r\n/* /Scrollable Grids */\r\n\r\n\r\n/* Forms */\r\ntable.edit-form {\r\n border: none;\r\n border-top-width: 0px;\r\n border-collapse: collapse;\r\n width: 100%;\r\n}\r\n\r\n.edit-form-odd, .edit-form-even {\r\n padding: 0px;\r\n}\r\n\r\n.subsectiontitle {\r\n font-size: 10pt;\r\n font-weight: bold;\r\n background-color: #4A92CE;\r\n color: #fff;\r\n height: 25px;\r\n border-top: 1px solid black;\r\n vertical-align: middle;\r\n}\r\n\r\n.subsectiontitle td {\r\n vertical-align: middle;\r\n /*padding: 3px 5px 3px 5px;*/\r\n padding: 1px 5px;\r\n}\r\n\r\n.label-cell {\r\n background: #DEE7F6 url(''@@base_url@@/core/admin_templates/img/bgr_input_name_line.gif'') no-repeat right bottom;\r\n font: 12px arial, sans-serif;\r\n padding: 4px 20px;\r\n width: 160px;\r\n}\r\n\r\n.control-mid {\r\n width: 13px;\r\n border-left: 1px solid #7A95C2;\r\n background: #fff url(''@@base_url@@/core/admin_templates/img/bgr_mid.gif'') repeat-x left bottom;\r\n}\r\n\r\n.control-cell {\r\n font: 11px arial, sans-serif;\r\n padding: 4px 10px 5px 5px;\r\n background: #fff url(''@@base_url@@/core/admin_templates/img/bgr_input_line.gif'') no-repeat left bottom;\r\n width: auto;\r\n vertical-align: middle;\r\n}\r\n\r\n.label-cell-filler {\r\n background: #DEE7F6 none;\r\n}\r\n.control-mid-filler {\r\n background: #fff none;\r\n border-left: 1px solid #7A95C2;\r\n}\r\n.control-cell-filler {\r\n background: #fff none;\r\n}\r\n\r\n.error {\r\n color: red;\r\n}\r\n.error-cell {\r\n color: red;\r\n}\r\n\r\n.field-required {\r\n color: red;\r\n}\r\n\r\n.warning-table {\r\n background-color: #F0F1EB;\r\n border: 1px solid #000000;\r\n border-collapse: collapse;\r\n border-top-width: 0px;\r\n}\r\n\r\n.form-warning {\r\n color: red;\r\n font-size: 11px;\r\n}\r\n\r\n.priority {\r\n color: red;\r\n padding-left: 1px;\r\n padding-right: 1px;\r\n font-size: 11px;\r\n}\r\n\r\n.small-statistics {\r\n font-size: 11px;\r\n color: #707070;\r\n}\r\n\r\n.req-note {\r\n font-style: italic;\r\n color: #333;\r\n}\r\n\r\n#scroll_container table.tableborder {\r\n border-collapse: separate\r\n}\r\n\r\n\r\n/* Uploader */\r\n\r\n.uploader-main {\r\n position: absolute;\r\n display: none;\r\n z-index: 10;\r\n border: 1px solid #777;\r\n padding: 10px;\r\n width: 350px;\r\n height: 120px;\r\n overflow: hidden;\r\n background-color: #fff;\r\n}\r\n\r\n.uploader-percent {\r\n width: 100%;\r\n padding-top: 3px;\r\n text-align: center;\r\n position: relative;\r\n z-index: 20;\r\n float: left;\r\n font-weight: bold;\r\n}\r\n\r\n.uploader-left {\r\n width: 100%;\r\n border: 1px solid black;\r\n height: 20px;\r\n background: #fff url(''@@base_url@@/core/admin_templates/img/progress_left.gif'');\r\n}\r\n\r\n.uploader-done {\r\n width: 0%;\r\n background-color: green;\r\n height: 20px;\r\n background: #4A92CE url(''@@base_url@@/core/admin_templates/img/progress_done.gif'');\r\n}\r\n\r\n\r\n/* To be sorted */\r\nspan#category_path, span#category_path a {\r\n color: #FFFFFF;\r\n}\r\n\r\nspan#category_path a {\r\n text-decoration: underline;\r\n}\r\n\r\n/* Section title, right to the big icon */\r\n.admintitle {\r\n font-size: 16pt;\r\n font-weight: bold;\r\n color: @@SectionColor@@;\r\n text-decoration: none;\r\n}\r\n\r\n/* Left side of bluebar */\r\n.header_left_bg {\r\n background-color: @@TitleBarBgColor@@;\r\n background-image: none;\r\n padding-left: 5px;\r\n}\r\n\r\n/* Right side of bluebar */\r\n.tablenav, tablenav a {\r\n font-size: 11pt;\r\n font-weight: bold;\r\n color: @@TitleBarColor@@;\r\n\r\n text-decoration: none;\r\n background-color: @@TitleBarBgColor@@;\r\n background-image: none;\r\n}\r\n\r\n/* Section title in the bluebar * -- why ''link''? :S */\r\n.tablenav_link {\r\n font-size: 11pt;\r\n font-weight: bold;\r\n color: @@TitleBarColor@@;\r\n text-decoration: none;\r\n}\r\n\r\n/* Active page in top and bottom bluebars pagination */\r\n.current_page {\r\n font-size: 10pt;\r\n font-weight: bold;\r\n background-color: #fff;\r\n color: #2D79D6;\r\n padding: 3px 2px 3px 3px;\r\n}\r\n\r\n/* Other pages and arrows in pagination on blue */\r\n.nav_url {\r\n font-size: 10pt;\r\n font-weight: bold;\r\n color: #fff;\r\n padding: 3px 2px 3px 3px;\r\n}\r\n\r\n/* Tree */\r\n.tree-body {\r\n background-color: @@TreeBgColor@@;\r\n height: 100%\r\n}\r\n\r\n.tree_head.td, .tree_head, .tree_head:hover {\r\n font-weight: bold;\r\n font-size: 10px;\r\n color: #FFFFFF;\r\n font-family: Verdana, Arial;\r\n text-decoration: none;\r\n}\r\n\r\n.tree {\r\n padding: 0px;\r\n border: none;\r\n border-collapse: collapse;\r\n}\r\n\r\n.tree tr td {\r\n padding: 0px;\r\n margin: 0px;\r\n font-family: helvetica, arial, verdana,;\r\n font-size: 11px;\r\n white-space: nowrap;\r\n}\r\n\r\n.tree tr td a {\r\n font-size: 11px;\r\n color: @@TreeColor@@;\r\n font-family: Helvetica, Arial, Verdana;\r\n text-decoration: none;\r\n padding: 2px;\r\n}\r\n\r\n.tree tr td a:hover, .tree tr td a.debug-only-item:hover {\r\n color: @@TreeHoverColor@@;\r\n}\r\n\r\n.tree tr.highlighted td a, .tree tr.highlighted td a.debug-only-item {\r\n color: @@TreeHighColor@@;\r\n background-color: @@TreeHighBgColor@@;\r\n}\r\n\r\n.tree tr.highlighted td a:hover {\r\n color: @@TreeHighHoverColor@@;\r\n}\r\n\r\n.tree tr td a.debug-only-item {\r\n color: grey;\r\n}\r\n\r\n/* Ajax Dropdown */\r\n.suggest-box {\r\n border: 1px solid #999;\r\n background-color: #fff;\r\n}\r\n\r\n.suggest-item, .suggest-item-over {\r\n padding: 1px 2px 0px 2px;\r\n font-family: arial,verdana;\r\n font-size: 12px;\r\n}\r\n\r\n.suggest-item-over {\r\n background-color: #3366CC;\r\n color: #fff;\r\n}', 'in-portal_logo_img.jpg', 'in-portal_logo_img2.jpg', 'in-portal_logo_login.gif', 'a:22:{s:11:"HeadBgColor";a:2:{s:11:"Description";s:27:"Head frame background color";s:5:"Value";s:7:"#007BF4";}s:9:"HeadColor";a:2:{s:11:"Description";s:21:"Head frame text color";s:5:"Value";s:7:"#FFFFFF";}s:14:"SectionBgColor";a:2:{s:11:"Description";s:28:"Section bar background color";s:5:"Value";s:7:"#FFFFFF";}s:12:"SectionColor";a:2:{s:11:"Description";s:22:"Section bar text color";s:5:"Value";s:7:"#2D79D6";}s:12:"HeadBarColor";a:1:{s:5:"Value";s:7:"#000000";}s:14:"HeadBarBgColor";a:1:{s:5:"Value";s:7:"#1961B8";}s:13:"TitleBarColor";a:1:{s:5:"Value";s:7:"#FFFFFF";}s:15:"TitleBarBgColor";a:1:{s:5:"Value";s:7:"#2D79D6";}s:14:"ToolbarBgColor";a:1:{s:5:"Value";s:7:"#F0F1EB";}s:14:"FiltersBgColor";a:1:{s:5:"Value";s:7:"#D7D7D7";}s:17:"ColumnTitlesColor";a:1:{s:5:"Value";s:7:"#FFFFFF";}s:19:"ColumnTitlesBgColor";a:1:{s:5:"Value";s:7:"#999999";}s:8:"OddColor";a:1:{s:5:"Value";s:7:"#000000";}s:10:"OddBgColor";a:1:{s:5:"Value";s:7:"#F6F6F6";}s:9:"EvenColor";a:1:{s:5:"Value";s:7:"#000000";}s:11:"EvenBgColor";a:1:{s:5:"Value";s:7:"#EBEBEB";}s:9:"TreeColor";a:1:{s:5:"Value";s:7:"#000000";}s:14:"TreeHoverColor";a:1:{s:5:"Value";s:7:"#009FF0";}s:13:"TreeHighColor";a:1:{s:5:"Value";s:7:"#FFFFFF";}s:18:"TreeHighHoverColor";a:1:{s:5:"Value";s:7:"#FFFFFF";}s:15:"TreeHighBgColor";a:1:{s:5:"Value";s:7:"#4A92CE";}s:11:"TreeBgColor";a:1:{s:5:"Value";s:7:"#DCECF6";}}', 1273946818, 1); +INSERT INTO Skins VALUES(DEFAULT, 'Default', '/* General elements */\r\n\r\nhtml {\r\n height: 100%;\r\n}\r\n\r\nbody {\r\n font-family: verdana,arial,helvetica,sans-serif;\r\n color: #000000;\r\n overflow-x: auto; overflow-y: auto;\r\n margin: 0px 0px 0px 0px;\r\n text-decoration: none;\r\n}\r\n\r\nbody, td {\r\n /* fix for Firefox, when font-size was not inherited in table cells */\r\n font-size: 9pt;\r\n}\r\n\r\na {\r\n color: #006699;\r\n text-decoration: none;\r\n}\r\n\r\na:hover {\r\n color: #009ff0;\r\n text-decoration: none;\r\n}\r\n\r\nform {\r\n display: inline;\r\n}\r\n\r\nimg { border: 0px; }\r\n\r\nbody.height-100 {\r\n height: 100%;\r\n}\r\n\r\nbody.regular-body {\r\n margin: 0px 10px 5px 10px;\r\n color: #000000;\r\n background-color: @@SectionBgColor@@;\r\n}\r\n\r\nbody.edit-popup {\r\n margin: 0px 0px 0px 0px;\r\n}\r\n\r\ntable.collapsed {\r\n border-collapse: collapse;\r\n}\r\n\r\n.bordered, table.bordered, .bordered-no-bottom {\r\n border: 1px solid #000000;\r\n border-collapse: collapse;\r\n}\r\n\r\n.bordered-no-bottom {\r\n border-bottom: none;\r\n}\r\n\r\n.login-table td {\r\n padding: 1px;\r\n}\r\n\r\n.disabled {\r\n background-color: #ebebeb;\r\n}\r\n\r\n/* Head frame */\r\ntable.head-table {\r\n background: url(''@@base_url@@/core/admin_templates/img/top_frame/right_background.png'') top right @@HeadBgColor@@ no-repeat;\r\n}\r\n\r\n.head-table tr td, .head-table tr td a {\r\n color: @@HeadColor@@\r\n}\r\n\r\ndiv#extra_toolbar td.button-active {\r\n background: url(''@@base_url@@/core/admin_templates/img/top_frame/toolbar_button_background.gif'') bottom left repeat-x;\r\n height: 22px;\r\n}\r\n\r\ndiv#extra_toolbar td.button-active a {\r\n color: black;\r\n text-decoration: none;\r\n}\r\n\r\ntd.kx-block-header, .head-table tr td.kx-block-header{\r\n color: @@HeadBarColor@@;\r\n background: url(''@@base_url@@/core/admin_templates/img/top_frame/toolbar_background.gif'') repeat-x top left;\r\n /*background-color: @@HeadBarBgColor@@;*/\r\n padding-left: 7px;\r\n padding-right: 7px;\r\n}\r\n\r\na.kx-header-link {\r\n text-decoration: underline;\r\n font-weight: bold;\r\n color: #0080C8;\r\n}\r\n\r\na.kx-header-link:hover {\r\n color: #FFCB05;\r\n text-decoration: none;\r\n}\r\n\r\n.kx-secondary-foreground {\r\n color: #FFFFFF;\r\n /*background-color: @@HeadBarBgColor@@;*/\r\n}\r\n\r\n.kx-login-button {\r\n background-color: #2D79D6;\r\n color: #FFFFFF;\r\n}\r\n\r\n/* General form button (yellow) */\r\n.button {\r\n font-size: 12px;\r\n font-weight: normal;\r\n color: #000000;\r\n background: url(''@@base_url@@/core/admin_templates/img/button_back.gif'') #f9eeae repeat-x;\r\n text-decoration: none;\r\n}\r\n\r\n/* Disabled (grayed-out) form button */\r\n.button-disabled {\r\n font-size: 12px;\r\n font-weight: normal;\r\n color: #676767;\r\n background: url(''@@base_url@@/core/admin_templates/img/button_back_disabled.gif'') #f9eeae repeat-x;\r\n text-decoration: none;\r\n}\r\n\r\n/* Tabs bar */\r\n\r\n.tab, .tab-active {\r\n background-color: #F0F1EB;\r\n padding: 3px 7px 2px 7px;\r\n border-top: 1px solid black;\r\n border-left: 1px solid black;\r\n border-right: 1px solid black;\r\n margin-left: 3px !important;\r\n white-space: nowrap;\r\n}\r\n\r\n.tab-active {\r\n background-color: #4487D9;\r\n}\r\n\r\n.tab a {\r\n color: #4487D9;\r\n font-weight: bold;\r\n}\r\n\r\n.tab-active a {\r\n color: #FFFFFF;\r\n font-weight: bold;\r\n}\r\n\r\na.scroll-left, a.scroll-right {\r\n cursor: pointer;\r\n display: block;\r\n float: left;\r\n height: 18px;\r\n margin: 0px 1px;\r\n width: 18px;\r\n}\r\n\r\na.scroll-left {\r\n background: transparent url(''@@base_url@@/core/admin_templates/img/tabs/left.png'') no-repeat scroll 0 0;\r\n}\r\n\r\na.scroll-right {\r\n background: transparent url(''@@base_url@@/core/admin_templates/img/tabs/right.png'') no-repeat scroll 0 0;\r\n}\r\n\r\na.disabled {\r\n visibility: hidden !important;\r\n}\r\n\r\na.scroll-left:hover, a.scroll-right:hover {\r\n background-position: 0 -18px;\r\n}\r\n\r\ntd.scroll-right-container {\r\n width: 20px;\r\n}\r\n\r\ntd.scroll-right-container.disabled, td.scroll-right-container.disabled * {\r\n width: 0px;\r\n margin: 0px;\r\n}\r\n\r\ntd.scroll-right-container.disabled br {\r\n display: none;\r\n}\r\n\r\n/* Toolbar */\r\n\r\n.toolbar {\r\n font-size: 8pt;\r\n border: 1px solid #000000;\r\n border-width: 0px 1px 1px 1px;\r\n background-color: @@ToolbarBgColor@@;\r\n border-collapse: collapse;\r\n}\r\n\r\n.toolbar td {\r\n height: 100%;\r\n}\r\n\r\n.toolbar-button, .toolbar-button-disabled, .toolbar-button-over {\r\n float: left;\r\n text-align: center;\r\n font-size: 8pt;\r\n padding: 5px 5px 5px 5px;\r\n vertical-align: middle;\r\n color: #006F99;\r\n}\r\n\r\n.toolbar-button-over {\r\n color: #000;\r\n}\r\n\r\n.toolbar-button-disabled {\r\n color: #444;\r\n}\r\n\r\n/* Scrollable Grids */\r\n\r\n\r\n.layout-only-table td {\r\n border: none !important;\r\n}\r\n\r\n/* Main Grid class */\r\n.grid-scrollable {\r\n padding: 0px;\r\n border: 1px solid black !important;\r\n border-top: none !important;\r\n}\r\n\r\n/* Div generated by js, which contains all the scrollable grid elements, affects the style of scrollable area without data (if there are too few rows) */\r\n.grid-container {\r\n background-color: #fff;\r\n}\r\n\r\n.grid-container table {\r\n border-collapse: collapse;\r\n}\r\n\r\n/* Inner div generated in each data-cell */\r\n.grid-cell-div {\r\n overflow: hidden;\r\n height: auto;\r\n}\r\n\r\n/* Main row definition */\r\n.grid-data-row td, .grid-data-row-selected td, .grid-data-row-even-selected td, .grid-data-row-mouseover td, .table-color1, .table-color2 {\r\n font-weight: normal;\r\n color: @@OddColor@@;\r\n background-color: @@OddBgColor@@;\r\n padding: 3px 5px 3px 5px;\r\n overflow: hidden;\r\n border-right: 1px solid #c9c9c9;\r\n}\r\n.grid-data-row-even td, .table-color2 {\r\n background-color: @@EvenBgColor@@;\r\n color: @@EvenColor@@;\r\n}\r\n.grid-data-row td a, .grid-data-row-selected td a, .grid-data-row-mouseover td a {\r\n text-decoration: underline;\r\n}\r\n\r\n/* mouse-over rows */\r\n.grid-data-row-mouseover td, table tr.grid-data-row[_row_highlighted] td {\r\n background: #FFFDF4;\r\n}\r\n\r\n/* Selected row, applies to both checkbox and data areas */\r\n.grid-data-row-selected td, table tr.grid-data-row[_row_selected] td {\r\n background: #FEF2D6;\r\n}\r\n\r\n.grid-data-row-even-selected td, .grid-data-row-even[_row_selected] td {\r\n background: #FFF7E0;\r\n}\r\n\r\n/* General header cell definition */\r\n.grid-header-row td {\r\n font-weight: bold;\r\n background-color: @@ColumnTitlesBgColor@@;\r\n text-decoration: none;\r\n padding: 3px 5px 3px 5px;\r\n color: @@ColumnTitlesColor@@;\r\n border-right: none;\r\n text-align: left;\r\n vertical-align: middle !important;\r\n white-space: nowrap;\r\n border-right: 1px solid #777;\r\n}\r\n\r\n/* Filters row */\r\ntr.grid-header-row-1 td {\r\n background-color: @@FiltersBgColor@@;\r\n border-bottom: 1px solid black;\r\n}\r\n\r\n/* Grid Filters */\r\ntable.range-filter {\r\n width: 100%;\r\n}\r\n\r\n.range-filter td {\r\n padding: 0px 0px 2px 2px !important;\r\n border: none !important;\r\n font-size: 8pt !important;\r\n font-weight: normal !important;\r\n text-align: left;\r\n color: #000000 !important;\r\n}\r\n\r\ninput.filter, select.filter, input.filter-active, select.filter-active {\r\n margin-bottom: 0px;\r\n border: 1px solid #aaa;\r\n}\r\n\r\ninput.filter-active {\r\n background-color: #FFFF00;\r\n}\r\n\r\nselect.filter-active {\r\n background-color: #FFFF00;\r\n}\r\n\r\n/* Column titles row */\r\ntr.grid-header-row-0 td {\r\n height: 25px;\r\n font-weight: bold;\r\n background-color: @@ColumnTitlesBgColor@@;\r\n color: @@ColumnTitlesColor@@;\r\n border-bottom: 1px solid black;\r\n}\r\n\r\ntr.grid-header-row-0 td a {\r\n color: @@ColumnTitlesColor@@;\r\n}\r\n\r\ntr.grid-header-row-0 td a:hover {\r\n color: #FFCC00;\r\n}\r\n\r\n\r\n.grid-footer-row td {\r\n background-color: #D7D7D7;\r\n font-weight: bold;\r\n border-right: 1px solid #C9C9C9;\r\n padding: 3px 5px 3px 5px;\r\n}\r\n\r\ntd.grid-header-last-cell, td.grid-data-last-cell, td.grid-footer-last-cell {\r\n border-right: none !important;\r\n}\r\n\r\ntd.grid-data-col-0, td.grid-data-col-0 div {\r\n text-align: center;\r\n vertical-align: middle !important;\r\n}\r\n\r\ntr.grid-header-row-1 td.grid-header-col-1 {\r\n text-align: center;\r\n vertical-align: middle !important;\r\n}\r\n\r\ntr.grid-header-row-1 td.grid-header-col-1 div {\r\n display: table-cell;\r\n vertical-align: middle;\r\n}\r\n\r\n.grid-status-bar {\r\n border: 1px solid black;\r\n border-top: none;\r\n padding: 0px;\r\n width: 100%;\r\n border-collapse: collapse;\r\n height: 30px;\r\n}\r\n\r\n.grid-status-bar td {\r\n background-color: @@TitleBarBgColor@@;\r\n color: @@TitleBarColor@@;\r\n font-size: 11pt;\r\n font-weight: normal;\r\n padding: 2px 8px 2px 8px;\r\n}\r\n\r\n/* /Scrollable Grids */\r\n\r\n\r\n/* Forms */\r\ntable.edit-form {\r\n border: none;\r\n border-top-width: 0px;\r\n border-collapse: collapse;\r\n width: 100%;\r\n}\r\n\r\n.edit-form-odd, .edit-form-even {\r\n padding: 0px;\r\n}\r\n\r\n.subsectiontitle {\r\n font-size: 10pt;\r\n font-weight: bold;\r\n background-color: #4A92CE;\r\n color: #fff;\r\n height: 25px;\r\n border-top: 1px solid black;\r\n vertical-align: middle;\r\n}\r\n\r\n.subsectiontitle td {\r\n vertical-align: middle;\r\n /*padding: 3px 5px 3px 5px;*/\r\n padding: 1px 5px;\r\n}\r\n\r\n.label-cell {\r\n background: #DEE7F6 url(''@@base_url@@/core/admin_templates/img/bgr_input_name_line.gif'') no-repeat right bottom;\r\n font: 12px arial, sans-serif;\r\n padding: 4px 20px;\r\n width: 160px;\r\n}\r\n\r\n.control-mid {\r\n width: 13px;\r\n border-left: 1px solid #7A95C2;\r\n background: #fff url(''@@base_url@@/core/admin_templates/img/bgr_mid.gif'') repeat-x left bottom;\r\n}\r\n\r\n.control-cell {\r\n font: 11px arial, sans-serif;\r\n padding: 4px 10px 5px 5px;\r\n background: #fff url(''@@base_url@@/core/admin_templates/img/bgr_input_line.gif'') no-repeat left bottom;\r\n width: auto;\r\n vertical-align: middle;\r\n}\r\n\r\n.label-cell-filler {\r\n background: #DEE7F6 none;\r\n}\r\n.control-mid-filler {\r\n background: #fff none;\r\n border-left: 1px solid #7A95C2;\r\n}\r\n.control-cell-filler {\r\n background: #fff none;\r\n}\r\n\r\n.error {\r\n color: red;\r\n}\r\n.error-cell {\r\n color: red;\r\n}\r\n\r\n.field-required {\r\n color: red;\r\n}\r\n\r\n.warning-table {\r\n background-color: #F0F1EB;\r\n border: 1px solid #000000;\r\n border-collapse: collapse;\r\n border-top-width: 0px;\r\n}\r\n\r\n.form-warning {\r\n color: red;\r\n font-size: 11px;\r\n}\r\n\r\n.priority {\r\n color: red;\r\n padding-left: 1px;\r\n padding-right: 1px;\r\n font-size: 11px;\r\n}\r\n\r\n.small-statistics {\r\n font-size: 11px;\r\n color: #707070;\r\n}\r\n\r\n.req-note {\r\n font-style: italic;\r\n color: #333;\r\n}\r\n\r\n#scroll_container table.tableborder {\r\n border-collapse: separate\r\n}\r\n\r\n/* Uploader */\r\n.uploader-queue div.file {\r\n font-size: 11px;\r\n border: 1px solid #7F99C5;\r\n padding: 3px;\r\n background-color: #DEE7F6;\r\n margin-bottom: 2px;\r\n}\r\n\r\n.uploader-queue .left {\r\n float: left;\r\n vertical-align: top;\r\n}\r\n\r\n.uploader-queue .file-label {\r\n margin-left: 5px;\r\n}\r\n\r\n.uploader-queue .preview .delete-checkbox {\r\n margin-top: -3px;\r\n}\r\n\r\n.uploader-queue .progress-container {\r\n margin: 2px 5px 0px 5px;\r\n}\r\n\r\n.uploader-queue .progress-empty {\r\n width: 150px;\r\n height: 9px;\r\n border: 1px solid black;\r\n background: url(''@@base_url@@/core/admin_templates/img/progress_left.gif'') repeat-x;\r\n}\r\n\r\n.uploader-queue .progress-full {\r\n height: 9px;\r\n background: url(''@@base_url@@/core/admin_templates/img/progress_done.gif'');\r\n}\r\n\r\n.uploader-queue .thumbnail {\r\n /*margin-bottom: 2px;*/\r\n border: 1px solid black;\r\n background-color: grey;\r\n}\r\n\r\n/* To be sorted */\r\nspan#category_path, span#category_path a {\r\n color: #FFFFFF;\r\n}\r\n\r\nspan#category_path a {\r\n text-decoration: underline;\r\n}\r\n\r\n/* Section title, right to the big icon */\r\n.admintitle {\r\n font-size: 16pt;\r\n font-weight: bold;\r\n color: @@SectionColor@@;\r\n text-decoration: none;\r\n}\r\n\r\n/* Left side of bluebar */\r\n.header_left_bg {\r\n background-color: @@TitleBarBgColor@@;\r\n background-image: none;\r\n padding-left: 5px;\r\n}\r\n\r\n/* Right side of bluebar */\r\n.tablenav, tablenav a {\r\n font-size: 11pt;\r\n font-weight: bold;\r\n color: @@TitleBarColor@@;\r\n\r\n text-decoration: none;\r\n background-color: @@TitleBarBgColor@@;\r\n background-image: none;\r\n}\r\n\r\n/* Section title in the bluebar * -- why ''link''? :S */\r\n.tablenav_link {\r\n font-size: 11pt;\r\n font-weight: bold;\r\n color: @@TitleBarColor@@;\r\n text-decoration: none;\r\n}\r\n\r\n/* Active page in top and bottom bluebars pagination */\r\n.current_page {\r\n font-size: 10pt;\r\n font-weight: bold;\r\n background-color: #fff;\r\n color: #2D79D6;\r\n padding: 3px 2px 3px 3px;\r\n}\r\n\r\n/* Other pages and arrows in pagination on blue */\r\n.nav_url {\r\n font-size: 10pt;\r\n font-weight: bold;\r\n color: #fff;\r\n padding: 3px 2px 3px 3px;\r\n}\r\n\r\n/* Tree */\r\n.tree-body {\r\n background-color: @@TreeBgColor@@;\r\n height: 100%\r\n}\r\n\r\n.tree_head.td, .tree_head, .tree_head:hover {\r\n font-weight: bold;\r\n font-size: 10px;\r\n color: #FFFFFF;\r\n font-family: Verdana, Arial;\r\n text-decoration: none;\r\n}\r\n\r\n.tree {\r\n padding: 0px;\r\n border: none;\r\n border-collapse: collapse;\r\n}\r\n\r\n.tree tr td {\r\n padding: 0px;\r\n margin: 0px;\r\n font-family: helvetica, arial, verdana,;\r\n font-size: 11px;\r\n white-space: nowrap;\r\n}\r\n\r\n.tree tr td a {\r\n font-size: 11px;\r\n color: @@TreeColor@@;\r\n font-family: Helvetica, Arial, Verdana;\r\n text-decoration: none;\r\n padding: 2px;\r\n}\r\n\r\n.tree tr td a:hover, .tree tr td a.debug-only-item:hover {\r\n color: @@TreeHoverColor@@;\r\n}\r\n\r\n.tree tr.highlighted td a, .tree tr.highlighted td a.debug-only-item {\r\n color: @@TreeHighColor@@;\r\n background-color: @@TreeHighBgColor@@;\r\n}\r\n\r\n.tree tr.highlighted td a:hover {\r\n color: @@TreeHighHoverColor@@;\r\n}\r\n\r\n.tree tr td a.debug-only-item {\r\n color: grey;\r\n}\r\n\r\n/* Ajax Dropdown */\r\n.suggest-box {\r\n border: 1px solid #999;\r\n background-color: #fff;\r\n}\r\n\r\n.suggest-item, .suggest-item-over {\r\n padding: 1px 2px 0px 2px;\r\n font-family: arial,verdana;\r\n font-size: 12px;\r\n}\r\n\r\n.suggest-item-over {\r\n background-color: #3366CC;\r\n color: #fff;\r\n}', 'in-portal_logo_img.jpg', 'in-portal_logo_img2.jpg', 'in-portal_logo_login.gif', 'a:22:{s:11:"HeadBgColor";a:2:{s:11:"Description";s:27:"Head frame background color";s:5:"Value";s:7:"#007BF4";}s:9:"HeadColor";a:2:{s:11:"Description";s:21:"Head frame text color";s:5:"Value";s:7:"#FFFFFF";}s:14:"SectionBgColor";a:2:{s:11:"Description";s:28:"Section bar background color";s:5:"Value";s:7:"#FFFFFF";}s:12:"SectionColor";a:2:{s:11:"Description";s:22:"Section bar text color";s:5:"Value";s:7:"#2D79D6";}s:12:"HeadBarColor";a:1:{s:5:"Value";s:7:"#000000";}s:14:"HeadBarBgColor";a:1:{s:5:"Value";s:7:"#1961B8";}s:13:"TitleBarColor";a:1:{s:5:"Value";s:7:"#FFFFFF";}s:15:"TitleBarBgColor";a:1:{s:5:"Value";s:7:"#2D79D6";}s:14:"ToolbarBgColor";a:1:{s:5:"Value";s:7:"#F0F1EB";}s:14:"FiltersBgColor";a:1:{s:5:"Value";s:7:"#D7D7D7";}s:17:"ColumnTitlesColor";a:1:{s:5:"Value";s:7:"#FFFFFF";}s:19:"ColumnTitlesBgColor";a:1:{s:5:"Value";s:7:"#999999";}s:8:"OddColor";a:1:{s:5:"Value";s:7:"#000000";}s:10:"OddBgColor";a:1:{s:5:"Value";s:7:"#F6F6F6";}s:9:"EvenColor";a:1:{s:5:"Value";s:7:"#000000";}s:11:"EvenBgColor";a:1:{s:5:"Value";s:7:"#EBEBEB";}s:9:"TreeColor";a:1:{s:5:"Value";s:7:"#000000";}s:14:"TreeHoverColor";a:1:{s:5:"Value";s:7:"#009FF0";}s:13:"TreeHighColor";a:1:{s:5:"Value";s:7:"#FFFFFF";}s:18:"TreeHighHoverColor";a:1:{s:5:"Value";s:7:"#FFFFFF";}s:15:"TreeHighBgColor";a:1:{s:5:"Value";s:7:"#4A92CE";}s:11:"TreeBgColor";a:1:{s:5:"Value";s:7:"#DCECF6";}}', 1275134539, 1); INSERT INTO LocalesList VALUES (1, '0x0436', 'Afrikaans (South Africa)', 'af-ZA', 'Latn', '1252'), Index: kernel/db/db_event_handler.php =================================================================== --- kernel/db/db_event_handler.php (revision 13581) +++ kernel/db/db_event_handler.php (working copy) @@ -2700,14 +2700,24 @@ return ; } + $object =& $event->getObject( Array ('skip_autoload' => true)); + /* @var $object kDBItem */ + + $field = $this->Application->GetVar('field'); + $options = $object->GetFieldOptions($field); + if ($this->Application->GetVar('tmp')) { - $path = WRITEABLE . '/tmp/' . $this->Application->GetVar('id') . '_' . $this->Application->GetVar('file'); + $path = WRITEABLE . '/tmp/' . $this->Application->GetVar('id') . '_' . $file; } else { - $object =& $event->getObject(array('skip_autoload'=>true)); - $options = $object->GetFieldOptions($this->Application->GetVar('field')); + $upload_dir = $options['upload_dir']; - $path = FULL_PATH.$options['upload_dir'].$file; + if (array_key_exists('include_path', $options) && $options['include_path']) { + // relative path is already included in field + $upload_dir = ''; + } + + $path = FULL_PATH . $upload_dir . $file; } $path = str_replace('/', DIRECTORY_SEPARATOR, $path); @@ -2716,10 +2726,21 @@ exit; } + if ($this->Application->GetVar('thumb')) { + $image_helper =& $this->Application->recallObject('ImageHelper'); + /* @var $image_helper ImageHelper */ + + $path = $image_helper->ResizeImage($path, $options['thumb_format']); + + $base_url = rtrim($this->Application->BaseURL(), '/'); + $path = preg_replace('/^' . preg_quote($base_url, '/') . '(.*)/', FULL_PATH . '\\1', $path); + $path = str_replace('/', DIRECTORY_SEPARATOR, $path); + } + $type = mime_content_type($path); - header('Content-Length: '.filesize($path)); - header('Content-Type: '.$type); + header('Content-Length: ' . filesize($path)); + header('Content-Type: ' . $type); safeDefine('DBG_SKIP_REPORTING',1); Index: units/skins/skins_config.php =================================================================== --- units/skins/skins_config.php (revision 13557) +++ units/skins/skins_config.php (working copy) @@ -117,7 +117,7 @@ 'max_size'=>MAX_UPLOAD_SIZE, // in Bytes ! 'file_types'=>'*.jpg;*.gif;*.png', 'files_description'=>'!la_hint_ImageFiles!', 'upload_dir' => WRITEBALE_BASE . '/user_files/', // relative to project's home - 'as_image'=>true, 'thumb_width'=>100, 'thumb_height'=>100, + 'thumb_format' => 'resize:100x100', 'multiple'=>false, // false or max number of files - will be stored as serialized array of paths 'direct_links'=>false, // use direct file urls or send files through wrapper (requires mod_mime_magic) 'default' => null, @@ -127,7 +127,7 @@ 'max_size'=>MAX_UPLOAD_SIZE, // in Bytes ! 'file_types'=>'*.jpg;*.gif;*.png', 'files_description'=>'!la_hint_ImageFiles!', 'upload_dir' => WRITEBALE_BASE . '/user_files/', // relative to project's home - 'as_image'=>true, 'thumb_width'=>100, 'thumb_height'=>100, + 'thumb_format' => 'resize:100x100', 'multiple'=>false, // false or max number of files - will be stored as serialized array of paths 'direct_links'=>false, // use direct file urls or send files through wrapper (requires mod_mime_magic) 'not_null' => 1, 'default' => '', @@ -137,7 +137,7 @@ 'max_size'=>MAX_UPLOAD_SIZE, // in Bytes ! 'file_types'=>'*.jpg;*.gif;*.png', 'files_description'=>'!la_hint_ImageFiles!', 'upload_dir' => WRITEBALE_BASE . '/user_files/', // relative to project's home - 'as_image'=>true, 'thumb_width'=>100, 'thumb_height'=>100, + 'thumb_format' => 'resize:100x100', 'multiple'=>false, // false or max number of files - will be stored as serialized array of paths 'direct_links'=>false, // use direct file urls or send files through wrapper (requires mod_mime_magic) 'not_null' => 1, 'default' => '',