commit 53b7d387a0886e93b5095ca895cbed54ef03e5fe
parent 1b7502ac60ace95c79781bf3a3cfda213c7c517d
Author: Jan Dankert <develop@jandankert.de>
Date: Sun, 15 Nov 2020 21:41:39 +0100
Fix: Reordering of folder content.
Diffstat:
6 files changed, 80 insertions(+), 103 deletions(-)
diff --git a/modules/cms/action/FolderAction.class.php b/modules/cms/action/FolderAction.class.php
@@ -1097,39 +1097,24 @@ class FolderAction extends ObjectAction
public function orderView()
{
$list = array();
- $last_objectid = 0;
// Schleife ueber alle Objekte in diesem Ordner
foreach( $this->folder->getObjects() as $o )
{
/* @var $o BaseObject */
$id = $o->objectid;
+ $name = $o->getDefaultName();
if ( $o->hasRight(Acl::ACL_READ) )
{
$list[$id]['id' ] = $id;
- $list[$id]['name'] = \util\Text::maxLength( $o->name ,30);
- $list[$id]['filename'] = \util\Text::maxLength( $o->filename ,20);
- $list[$id]['desc'] = \util\Text::maxLength( $o->desc ,30);
- if ( $list[$id]['desc'] == '' )
- $list[$id]['desc'] = \cms\base\Language::lang('NO_DESCRIPTION_AVAILABLE');
- $list[$id]['desc'] = 'ID '.$id.' - '.$list[$id]['desc'];
-
- $list[$id]['type'] = $o->getType();
-
- $list[$id]['icon'] = $o->getType();
-
- if ( $o->getType() == 'file' )
- {
- $file = new File( $id );
- $file->load();
- $list[$id]['desc'] .= ' - '.intval($file->size/1000).'kB';
+ $list[$id]['name'] = $name->name;
+ $list[$id]['filename'] = $o->filename;
+ $list[$id]['desc'] = 'ID '.$id.' - '.$name->description;
- if ( $file->isImage() )
- $list[$id]['icon'] = 'image';
- }
+ $list[$id]['type'] = $o->getType();
+ $list[$id]['icon'] = $o->getType();
- $list[$id]['url' ] = Html::url($o->getType(),'',$id);
$list[$id]['date'] = $o->lastchangeDate;
$list[$id]['user'] = $o->lastchangeUser;
diff --git a/modules/cms/ui/themes/default/html/views/folder/order.php b/modules/cms/ui/themes/default/html/views/folder/order.php
@@ -15,10 +15,6 @@
<table width="<?php echo O::escapeHtml('100%') ?>" class="<?php echo O::escapeHtml('or-table or-table--sortable') ?>"><?php echo O::escapeHtml('') ?>
<tr class="<?php echo O::escapeHtml('or-headline') ?>"><?php echo O::escapeHtml('') ?>
<td class="<?php echo O::escapeHtml('or-help') ?>"><?php echo O::escapeHtml('') ?>
- <span><?php echo O::escapeHtml(''.@O::lang('FOLDER_ORDER').'') ?>
- </span>
- </td>
- <td class="<?php echo O::escapeHtml('or-help') ?>"><?php echo O::escapeHtml('') ?>
<span><?php echo O::escapeHtml(''.@O::lang('TYPE').'') ?>
</span>
</td>
@@ -38,14 +34,10 @@
<?php foreach((array)$object as $list_key=>$list_value) { extract($list_value); ?>
<tr data-id="<?php echo O::escapeHtml(''.@$id.'') ?>" class="<?php echo O::escapeHtml('or-data') ?>"><?php echo O::escapeHtml('') ?>
<td><?php echo O::escapeHtml('') ?>
- <span><?php echo O::escapeHtml(' ') ?>
- </span>
- </td>
- <td><?php echo O::escapeHtml('') ?>
- <span class="<?php echo O::escapeHtml('or-sort-value') ?>"><?php echo O::escapeHtml(''.@$icon.'') ?>
- </span>
<i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--action-'.@$icon.'') ?>"><?php echo O::escapeHtml('') ?>
</i>
+ <span class="<?php echo O::escapeHtml('or-sort-value') ?>"><?php echo O::escapeHtml(''.@O::lang(''.@$icon.'').'') ?>
+ </span>
</td>
<td><?php echo O::escapeHtml('') ?>
<span><?php echo O::escapeHtml(''.@$name.'') ?>
diff --git a/modules/cms/ui/themes/default/html/views/folder/order.tpl.src.xml b/modules/cms/ui/themes/default/html/views/folder/order.tpl.src.xml
@@ -1,44 +1,46 @@
-<output xmlns="http://www.openrat.de/template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openrat.de/template ../../../../../../../template_engine/components/template.xsd">
- <form>
- <table class="table--sortable">
- <row class="headline">
- <column class="help">
- <text value="${message:FOLDER_ORDER}"/>
- </column>
- <column class="help">
- <text value="${message:TYPE}"/>
- </column>
- <column class="help">
- <text value="${message:NAME}"/>
- </column>
- <column class="help">
- <text value="${message:FILENAME}"/>
- </column>
- <column class="help">
- <text value="${message:LASTCHANGE}"/>
- </column>
- </row>
- <list list="${object}" extract="true">
- <row class="data" id="${id}">
- <column>
- <text value=" "/>
- </column>
- <column>
- <text class="sort-value" value="${icon}"/>
- <image action="${icon}"/>
- </column>
- <column>
- <text value="${name}"/>
- </column>
- <column>
- <text value="${filename}"/>
- </column>
- <column>
- <date date="${date}"/>
- </column>
- </row>
- </list>
- </table>
- <hidden name="order" default=""/>
- </form>
+<output xmlns="http://www.openrat.de/template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.openrat.de/template ../../../../../../../template_engine/components/template.xsd">
+ <form>
+ <table class="table--sortable">
+ <row class="headline">
+ <!--
+ <column class="help">
+ <text value="${message:FOLDER_ORDER}"/>
+ </column>-->
+ <column class="help">
+ <text value="${message:TYPE}"/>
+ </column>
+ <column class="help">
+ <text value="${message:NAME}"/>
+ </column>
+ <column class="help">
+ <text value="${message:FILENAME}"/>
+ </column>
+ <column class="help">
+ <text value="${message:LASTCHANGE}"/>
+ </column>
+ </row>
+ <list list="${object}" extract="true">
+ <row class="data" id="${id}">
+ <!--<column>
+ <text value=" "/>
+ </column>-->
+ <column>
+ <image action="${icon}"/>
+ <text class="sort-value" value="${message:${icon}}"/>
+ </column>
+ <column>
+ <text value="${name}"/>
+ </column>
+ <column>
+ <text value="${filename}"/>
+ </column>
+ <column>
+ <date date="${date}"/>
+ </column>
+ </row>
+ </list>
+ </table>
+ <hidden name="order" default=""/>
+ </form>
</output>
diff --git a/modules/cms/ui/themes/default/script/openrat.js b/modules/cms/ui/themes/default/script/openrat.js
@@ -3382,25 +3382,24 @@ Openrat.Workbench.afterViewLoadedHandler.add( function(element ) {
Openrat.Workbench.afterViewLoadedHandler.add( function(element ) {
- // Manuelles Sortieren von Tabellen per Drag and drop.
- $(element).find('.or-table--sortable > tbody').sortable();
-
+ let calculateOrderList = function() {
- $(element).find('.or-table--sortable > tbody').closest('form').submit( function() {
+ // Analyse the order of the objects in this folder.
+ let order = new Array();
- // Analyse the order of the objects in this folder.
- var order = new Array();
+ $(element).find('.or-table--sortable').find('tbody > tr.or-data').each(function () {
+ let objectid = $(this).data('id');
+ order.push(objectid);
+ });
- $(this).find('.or-table--sortable').find('tbody > tr.data').each(function () {
- let objectid = $(this).data('id');
- order.push(objectid);
- });
+ // Set the comma-separated list of objects into a input field.
+ $(element).find('input[name=order]').val(order.join(','));
+ };
- // Set the comma-separated list of objects into a input field.
- $(this).find('input[name=order]').val(order.join(','));
- }
- );
+ calculateOrderList();
+ // Manuelles Sortieren von Tabellen per Drag and drop.
+ $(element).find('.or-table--sortable > tbody').sortable( { update: calculateOrderList } );
// Alle Checkboxen setzen oder nicht setzen.
$(element).find('tr.headline > td > input.checkbox').click( function() {
diff --git a/modules/cms/ui/themes/default/script/openrat.min.js b/modules/cms/ui/themes/default/script/openrat.min.js
@@ -1191,5 +1191,5 @@ else if(Notification.permission!=='denied'){Notification.requestPermission(funct
;
;Openrat.Workbench.afterViewLoadedHandler.add(function(a){$(a).find('.or-act-clickable').orLinkify()});
;Openrat.Workbench.afterViewLoadedHandler.add(function(e){$(e).find('.or-qrcode').mouseover(function(){let e=this;if($(e).children().length>0)return;let wrapper=$('<div class="or-info-popup"></div>');$(e).append(wrapper);let qrcodetext=$(e).attr('data-qrcode');$(wrapper).qrcode({render:'div',text:qrcodetext,fill:'currentColor'});wrapper.attr('title','')});$(e).find('.or-info').click(function(){$(this).toggleClass('info--open')})});
-;Openrat.Workbench.afterViewLoadedHandler.add(function(t){$(t).find('.or-table--sortable > tbody').sortable();$(t).find('.or-table--sortable > tbody').closest('form').submit(function(){var t=[];$(this).find('.or-table--sortable').find('tbody > tr.data').each(function(){let objectid=$(this).data('id');t.push(objectid)});$(this).find('input[name=order]').val(t.join(','))});$(t).find('tr.headline > td > input.checkbox').click(function(){$(this).closest('table').find('tr.or-data > td > input.or-checkbox').attr('checked',Boolean($(this).attr('checked')))});$(t).find('.or-table-filter > input').keyup(function(){let filterExpression=$(this).val().toLowerCase();let table=$(this).parents('.or-table-wrapper').find('table');table.addClass('loader');setTimeout(()=>{table.find('tr:not(.headline)').filter(function(){$(this).toggle($(this).text().toLowerCase().indexOf(filterExpression)>-1)});table.removeClass('loader')},50)});$(t).find('table > tbody > tr.headline > td, table > tbody > tr > th').click(function(){let column=$(this);let table=column.parents('table');table.addClass('loader');let isAscending=!column.hasClass('sort-asc');table.find('tr.headline > td, tr > th').removeClass('sort-asc').removeClass('sort-desc');if(isAscending)column.addClass('sort-asc');else column.addClass('sort-desc');setTimeout(function(){let rows=table.find('tr:gt(0)').toArray().sort(a(column.index()));if(!isAscending){rows=rows.reverse()};for(var t=0;t<rows.length;t++){table.append(rows[t])};table.removeClass('loader')},50)});function a(t){return function(a,l){let valA=e(a,t),valB=e(l,t);return $.isNumeric(valA)&&$.isNumeric(valB)?valA-valB:valA.toString().localeCompare(valB)}};function e(t,e){return $(t).children('td').eq(e).text()}});
+;Openrat.Workbench.afterViewLoadedHandler.add(function(t){let calculateOrderList=function(){let order=[];$(t).find('.or-table--sortable').find('tbody > tr.or-data').each(function(){let objectid=$(this).data('id');order.push(objectid)});$(t).find('input[name=order]').val(order.join(','))};calculateOrderList();$(t).find('.or-table--sortable > tbody').sortable({update:calculateOrderList});$(t).find('tr.headline > td > input.checkbox').click(function(){$(this).closest('table').find('tr.or-data > td > input.or-checkbox').attr('checked',Boolean($(this).attr('checked')))});$(t).find('.or-table-filter > input').keyup(function(){let filterExpression=$(this).val().toLowerCase();let table=$(this).parents('.or-table-wrapper').find('table');table.addClass('loader');setTimeout(()=>{table.find('tr:not(.headline)').filter(function(){$(this).toggle($(this).text().toLowerCase().indexOf(filterExpression)>-1)});table.removeClass('loader')},50)});$(t).find('table > tbody > tr.headline > td, table > tbody > tr > th').click(function(){let column=$(this);let table=column.parents('table');table.addClass('loader');let isAscending=!column.hasClass('sort-asc');table.find('tr.headline > td, tr > th').removeClass('sort-asc').removeClass('sort-desc');if(isAscending)column.addClass('sort-asc');else column.addClass('sort-desc');setTimeout(function(){let rows=table.find('tr:gt(0)').toArray().sort(a(column.index()));if(!isAscending){rows=rows.reverse()};for(var t=0;t<rows.length;t++){table.append(rows[t])};table.removeClass('loader')},50)});function a(t){return function(a,r){let valA=e(a,t),valB=e(r,t);return $.isNumeric(valA)&&$.isNumeric(valB)?valA-valB:valA.toString().localeCompare(valB)}};function e(t,e){return $(t).children('td').eq(e).text()}});
;Openrat.Workbench.afterViewLoadedHandler.add(function(e){var o=$(e).find('form'),r=$(e).find('div.or-dropzone-upload > div.input');r.on('dragenter',function(e){e.stopPropagation();e.preventDefault();$(this).css('border','1px dotted gray')});r.on('dragover',function(e){e.stopPropagation();e.preventDefault()});r.on('drop',function(e){$(this).css('border','1px dotted red');e.preventDefault();var r=e.originalEvent.dataTransfer.files;Openrat.Workbench.handleFileUpload(o,r)});$(e).find('input[type=file]').change(function(){var e=$(this).prop('files');Openrat.Workbench.handleFileUpload(o,e)})});Openrat.Workbench.handleFileUpload=function(e,o){for(let i=0,f;f=o[i];i++){let form_data=new FormData();form_data.append('file',f);form_data.append('action','folder');form_data.append('subaction',$(e).data('method'));form_data.append('output','json');form_data.append('token',$(e).find('input[name=token]').val());form_data.append('id',$(e).find('input[name=id]').val());var r=$('<div class="notice info"><div class="text loader"></div></div>');$('#noticebar').prepend(r);$(r).show();$.ajax({'type':'POST',url:'./api/',cache:!1,contentType:!1,processData:!1,data:form_data,success:function(o,a,n){$(r).remove();let oform=new Openrat.Form();oform.doResponse(o,a,e)},error:function(o,a,n){$(e).closest('div.content').removeClass('loader');$(r).remove();let msg;try{let error=jQuery.parseJSON(o.responseText);msg=error.error+'/'+error.description+': '+error.reason}catch(t){msg=o.responseText};Openrat.Workbench.notify('Upload error',0,msg)}})}};
diff --git a/modules/template_engine/components/html/component_table/table.js b/modules/template_engine/components/html/component_table/table.js
@@ -1,25 +1,24 @@
Openrat.Workbench.afterViewLoadedHandler.add( function(element ) {
- // Manuelles Sortieren von Tabellen per Drag and drop.
- $(element).find('.or-table--sortable > tbody').sortable();
-
+ let calculateOrderList = function() {
- $(element).find('.or-table--sortable > tbody').closest('form').submit( function() {
+ // Analyse the order of the objects in this folder.
+ let order = new Array();
- // Analyse the order of the objects in this folder.
- var order = new Array();
+ $(element).find('.or-table--sortable').find('tbody > tr.or-data').each(function () {
+ let objectid = $(this).data('id');
+ order.push(objectid);
+ });
- $(this).find('.or-table--sortable').find('tbody > tr.data').each(function () {
- let objectid = $(this).data('id');
- order.push(objectid);
- });
+ // Set the comma-separated list of objects into a input field.
+ $(element).find('input[name=order]').val(order.join(','));
+ };
- // Set the comma-separated list of objects into a input field.
- $(this).find('input[name=order]').val(order.join(','));
- }
- );
+ calculateOrderList();
+ // Manuelles Sortieren von Tabellen per Drag and drop.
+ $(element).find('.or-table--sortable > tbody').sortable( { update: calculateOrderList } );
// Alle Checkboxen setzen oder nicht setzen.
$(element).find('tr.headline > td > input.checkbox').click( function() {