openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
action/FolderAction.class.php | 78++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
themes/default/js/openrat.js | 5+++++
themes/default/templates/folder/edit.tpl.src.xml | 34++++++++++++++--------------------
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>