commit 9d6e63ac6965aae9938551f95aed7d00bb5a4e48
parent ac6501cb74afe8db11f852c98cf59ad054ec3aeb
Author: Jan Dankert <devnull@localhost>
Date: Tue, 23 Oct 2012 23:39:43 +0200
Fix: Kopieren, Verschieben und Verknüpfen im Ordner.
Diffstat:
3 files changed, 83 insertions(+), 34 deletions(-)
diff --git a/action/FolderAction.class.php b/action/FolderAction.class.php
@@ -437,13 +437,7 @@ class FolderAction extends ObjectAction
}
- /**
- * Verschieben/Kopieren/Loeschen/Verknuepfen von mehreren Dateien in diesem Ordner.
- *
- * Es werden alle ausgew�hlten Dateien nochmal angezeigt.
- * Abh�ngig von der ausgew�hlten Aktion wird eine weitere Auswahl ben�tigt.
- */
- public function editPost()
+ private function OLD__________editPost()
{
$type = $this->getRequestVar('type'); // Typ der Aktion, z.B "copy" oder "move"
@@ -526,12 +520,68 @@ class FolderAction extends ObjectAction
/**
* Verschieben/Kopieren/Loeschen/Verknuepfen von mehreren Dateien in diesem Ordner
*/
- function multiple()
+ public function editPost()
{
$type = $this->getRequestVar('type');
$ids = explode(',',$this->getRequestVar('ids'));
$targetObjectId = $this->getRequestVar('targetobjectid');
+ // Prüfen, ob Schreibrechte im Zielordner bestehen.
+ switch( $type )
+ {
+ case 'move':
+ case 'copy':
+ case 'link':
+ $f = new Folder( $targetObjectId );
+
+ // Beim Verkn�pfen muss im Zielordner die Berechtigung zum Erstellen
+ // von Verkn�pfungen vorhanden sein.
+ //
+ // Beim Verschieben und Kopieren muss im Zielordner die Berechtigung
+ // zum Erstellen von Ordner, Dateien oder Seiten vorhanden sein.
+ if ( ( $type=='link' && $f->hasRight( ACL_CREATE_LINK ) ) ||
+ ( ( $type=='move' || $type == 'copy' ) &&
+ ( $f->hasRight(ACL_CREATE_FOLDER) || $f->hasRight(ACL_CREATE_FILE) || $f->hasRight(ACL_CREATE_PAGE) ) ) )
+ {
+ // OK
+ }
+ else
+ {
+ $this->addValidationError('targetobjectid','no_rights');
+ return;
+ }
+
+ break;
+ default:
+ }
+
+
+ $ids = $this->folder->getObjectIds();
+ $objectList = array();
+
+ foreach( $ids as $id )
+ {
+ // Nur, wenn Objekt ausgewaehlt wurde
+ if ( !$this->hasRequestVar('obj'.$id) )
+ continue;
+
+ $o = new Object( $id );
+ $o->load();
+
+ // Fuer die gewuenschte Aktion muessen pro Objekt die entsprechenden Rechte
+ // vorhanden sein.
+ if ( $type == 'copy' && $o->hasRight( ACL_READ ) ||
+ $type == 'move' && $o->hasRight( ACL_WRITE ) ||
+ $type == 'link' && $o->hasRight( ACL_READ ) ||
+ $type == 'archive' && $o->hasRight( ACL_READ ) ||
+ $type == 'delete' && $o->hasRight( ACL_DELETE ) )
+ $objectList[ $id ] = $o->getProperties();
+ else
+ $this->addNotice($o->getType(),$o->name,'no_rights',OR_NOTICE_WARN);
+ }
+
+ $ids = array_keys($objectList);
+
if ( $type == 'archive' )
{
require_once('serviceClasses/ArchiveTar.class.php');
@@ -636,6 +686,7 @@ class FolderAction extends ObjectAction
$f->parentid = $targetObjectId;
$f->add();
$f->copyValueFromFile( $id );
+
$this->addNotice($o->getType(),$o->name,'COPIED','ok');
break;
@@ -688,7 +739,7 @@ class FolderAction extends ObjectAction
case 'delete':
- if ( $this->hasRequestVar('commit') )
+ if ( $this->hasRequestVar('confirm') )
{
switch( $o->getType() )
{
@@ -733,14 +784,13 @@ class FolderAction extends ObjectAction
}
$this->folder->setTimestamp();
-
- // Ordner anzeigen
- $this->callSubAction('show');
}
- // Reihenfolge von Objekten aendern
- function reorderPost()
+ /**
+ * Reihenfolge von Objekten aendern.
+ */
+ public function reorderPost()
{
$type = $this->getRequestVar('type');
diff --git a/themes/default/js/openrat.js b/themes/default/js/openrat.js
@@ -427,6 +427,11 @@ function registerViewEvents( viewEl )
$(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn).click();
} } );
+ // Alle Checkboxen setzen oder nicht setzen.
+ $(viewEl).find('tr.headline > td > input.checkbox').click( function() {
+ $(this).closest('table').find('tr.data > td > input.checkbox').attr('checked',Boolean( $(this).attr('checked') ) );
+ });
+
}
diff --git a/themes/default/templates/folder/edit.tpl.src.xml b/themes/default/templates/folder/edit.tpl.src.xml
@@ -8,7 +8,7 @@
<!--
<text key="SELECT"></text>
-->
- <text raw="_" />
+ <checkbox name="checkall" class="checkall" />
</column>
<column class="help">
<text key="GLOBAL_TYPE"></text>
@@ -91,24 +91,6 @@
</row>
<row>
<column colspan="2">
- <image fileext="tree_none_end.gif" align="left"></image>
- <text raw="_"></text>
- <link var1="markall" value1="1" action="var:actionName"
- subaction="select">
- <text key="FOLDER_MARK_ALL"></text>
- </link>
- <text raw="_|_"></text>
- <link url=":javascript:unmark();">
- <text key="FOLDER_UNMARK_ALL"></text>
- </link>
- <text raw="_|_"></text>
- <link url=":javascript:flip();">
- <text key="FOLDER_FLIP_MARK"></text>
- </link>
- </column>
- </row>
- <row>
- <column colspan="2">
<group title="message:options">
<set var="type" value="var:defaulttype"></set>
<list list="actionlist" value="actiontype">
@@ -124,12 +106,24 @@
</part>
</part>
</list>
+ <part class="line">
+ <part class="label">
+ </part>
+ <part class="input">
+ <text raw="____" />
+ <checkbox name="confirm" />
+ <label for="confirm">
+ <text key="CONFIRM_DELETE"></text>
+ </label>
+ </part>
+ </part>
+
<part class="line">
<part class="label">
<text key="FOLDER_SELECT_TARGET_FOLDER" />
</part>
<part class="input">
- <selector types="folder,link" name="var:rootfoldername"
+ <selector types="folder" param="targetobjectid" name="var:rootfoldername"
id="var:rootfolderid" folderid="var:rootfolderid" />
</part>
</part>