You need to sign in before continuing.

Commit 51a456b8bf568aaca1398f5977dae67a2515e9e6

Authored by Brad Shuttleworth
1 parent 75594cb5

fix for KTS-1320: copy or move needs cancel buttons that work.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@5975 c91229c3-7414-0410-bfa2-8a42b809f60b
browse.php
... ... @@ -439,7 +439,8 @@ class BrowseDispatcher extends KTStandardDispatcher {
439 439 array('label' => _kt('Target Folder'),
440 440 'description' => _kt('Use the folder collection and path below to browse to the folder you wish to move the documents into.'),
441 441 'required' => true,
442   - 'name' => 'browse',
  442 + 'name' => 'fFolderId',
  443 + 'broken_name' => true,
443 444 'folder_id' => $oFolder->getId(),
444 445 'collection' => $collection));
445 446  
... ... @@ -544,7 +545,8 @@ class BrowseDispatcher extends KTStandardDispatcher {
544 545 'folder' => $target_folder,
545 546 'move_code' => $move_code,
546 547 'folders' => $folderStr,
547   - 'documents' => $documentStr,
  548 + 'documents' => $documentStr,
  549 +
548 550 );
549 551 return $oTemplate->render($aTemplateData);
550 552 }
... ...
plugins/ktcore/KTDocumentActions.php
... ... @@ -795,7 +795,7 @@ class KTDocumentMoveAction extends KTDocumentAction {
795 795 return $res;
796 796 }
797 797 if ($this->oDocument->getIsCheckedOut()) {
798   - $_SESSION["KTErrorMessage"][]= _kt("This document can't be deleted because it is checked out");
  798 + $_SESSION["KTErrorMessage"][]= _kt("This document can't be moved because it is checked out");
799 799 controllerRedirect('viewDocument', 'fDocumentId=' . $this->oDocument->getId());
800 800 exit(0);
801 801 }
... ... @@ -807,179 +807,163 @@ class KTDocumentMoveAction extends KTDocumentAction {
807 807 }
808 808  
809 809 function do_main() {
810   - $this->oPage->setBreadcrumbDetails(_kt("move"));
811   - $oTemplate =& $this->oValidator->validateTemplate('ktcore/action/move');
812   - $move_fields = array();
813   - $aNames = $this->oDocumentFolder->getPathArray();
814   - $aNames[] = $this->oDocument->getName();
815   - $sDocumentName = join(" » ", $aNames);
816   - $move_fields[] = new KTStaticTextWidget(_kt('Document to move'), '', 'fDocumentId', $sDocumentName, $this->oPage, false);
817   -
818   - $collection = new AdvancedCollection();
819   - $oCR =& KTColumnRegistry::getSingleton();
820   - $col = $oCR->getColumn('ktcore.columns.title');
821   - $col->setOptions(array('qs_params'=>array('fMoveCode'=>$sMoveCode,
822   - 'fFolderId'=>$oFolder->getId(),
823   - 'action'=>'startMove')));
824   - $collection->addColumn($col);
825   -
826   - $qObj = new FolderBrowseQuery($this->oFolder->getId());
827   - $collection->setQueryObject($qObj);
828   -
829   - $aOptions = $collection->getEnvironOptions();
830   - $collection->setOptions($aOptions);
831   -
832   - $oWF =& KTWidgetFactory::getSingleton();
833   - $oWidget = $oWF->get('ktcore.widgets.collection',
834   - array('label' => _kt('Target Folder'),
835   - 'description' => _kt('Use the folder collection and path below to browse to the folder you wish to move the documents into.'),
836   - 'required' => true,
837   - 'name' => 'browse',
838   - 'folder_id' => $oFolder->getId(),
839   - 'collection' => $collection));
840   - $move_fields[] = $oWidget;
841   -
842   - $oTemplate->setData(array(
843   - 'context' => &$this,
844   - 'move_fields' => $move_fields,
845   - //'collection' => $collection,
846   - //'collection_breadcrumbs' => $aBreadcrumbs,
847   - ));
848   - return $oTemplate->render();
  810 + $oForm = $this->form_move();
  811 + return $oForm->renderPage();
849 812 }
850 813  
851 814 function form_move() {
852 815 $oForm = new KTForm;
853 816 $oForm->setOptions(array(
854   - 'label' => _kt("Move Document"),
855   - 'action' => 'move_final',
856   - 'fail_action' => 'move',
  817 + 'label' => sprintf(_kt("Move Document \"%s\""), $this->oDocument->getName()),
  818 + 'submit_label' => _kt("Move"),
  819 + 'identifier' => 'ktcore.actions.movedoc',
  820 + 'action' => 'move',
857 821 'cancel_url' => KTBrowseUtil::getUrlForDocument($this->oDocument),
858   - 'submit_label' => _kt("Move Document"),
859   - 'context' => &$this,
860   - ));
  822 + 'fail_action' => 'main',
  823 + 'context' => $this,
  824 + ));
  825 +
  826 + /*
  827 + * This is somewhat more complex than most forms, since the "filename"
  828 + * and title shouldn't appear unless there's a clash.
  829 + *
  830 + * This is still not the most elegant solution.
  831 + */
  832 +
861 833 $oForm->setWidgets(array(
  834 + array('ktcore.widgets.foldercollection', array(
  835 + 'label' => _kt('Target Folder'),
  836 + 'description' => _kt('Use the folder collection and path below select the folder into which you wish to move the document.'),
  837 + 'required' => true,
  838 + 'name' => 'browse',
  839 + 'folder_id' => $this->oDocument->getFolderID(),
  840 + )),
862 841 array('ktcore.widgets.reason', array(
863 842 'label' => _kt("Reason"),
864   - 'description' => _kt("Please specify why you are moving this document. Please bear in mind that you can use a maximum of <strong>250</strong> characters."),
  843 + 'description' => _kt("Please specify why you are moving this document. Bear in mind that you can use a maximum of <strong>250</strong> characters."),
865 844 'name' => 'reason',
866 845 )),
867 846 ));
  847 +
  848 +
868 849 $oForm->setValidators(array(
869 850 array('ktcore.validators.string', array(
870 851 'test' => 'reason',
871 852 'max_length' => 250,
872 853 'output' => 'reason',
873 854 )),
874   - ));
  855 + array('ktcore.validators.entity', array(
  856 + 'class' => 'Folder',
  857 + 'test' => 'browse',
  858 + 'output' => 'browse',
  859 + )),
  860 + ));
  861 +
  862 + // here's the ugly bit.
875 863  
876   - return $oForm;
877   - }
878   -
879   - function do_move() {
880   - $this->persistParams(array('fFolderId'));
881   -
882   - $this->oPage->setBreadcrumbDetails(_kt("Move"));
883   - $oTemplate =& $this->oValidator->validateTemplate('ktcore/action/move_final');
  864 + $err = $oForm->getErrors();
  865 + if (!empty($err['name']) || !empty($err['filename'])) {
  866 + $oForm->addWidget(
  867 + array('ktcore.widgets.string', array(
  868 + 'label' => _kt("Document Title"),
  869 + 'value' => $this->oDocument->getName(),
  870 + 'important_description' => _kt("Please indicate a new title to use to resolve any title conflicts."),
  871 + 'name' => 'name',
  872 + 'required' => true,
  873 + ))
  874 + );
  875 + $oForm->addValidator(
  876 + array('ktcore.validators.string', array(
  877 + 'output' => 'name',
  878 + 'test' => 'name'
  879 + ))
  880 + );
884 881  
885   - if($this->oDocument->getFolderId() === $this->oFolder->getId()) {
886   - $this->errorRedirectTo('main', _kt("The document was already in this folder"), sprintf("fDocumentId=%d&fFolderId=%d", $this->oDocument->getId(), $this->oFolder->getId()));
887   - exit(0);
  882 + $oForm->addWidget(
  883 + array('ktcore.widgets.string', array(
  884 + 'label' => _kt("Filename"),
  885 + 'value' => $this->oDocument->getFilename(),
  886 + 'important_description' => _kt("Please indicate a new filename to use to resolve any conflicts."),
  887 + 'name' => 'filename',
  888 + 'required' => true,
  889 + ))
  890 + );
  891 + $oForm->addValidator(
  892 + array('ktcore.validators.string', array(
  893 + 'output' => 'filename',
  894 + 'test' => 'filename'
  895 + ))
  896 + );
888 897 }
  898 + return $oForm;
  899 + }
889 900  
  901 + function do_move() {
890 902 $oForm = $this->form_move();
891   -
892   - //$sFolderPath = join(" &raquo; ", $this->oFolder->getPathArray());
893   - //$aNames = $this->oDocumentFolder->getPathArray();
894   - //$aNames[] = $this->oDocument->getName();
895   - //$sDocumentName = join(" &raquo; ", $aNames);
896   -
897   - $oTemplate->setData(array(
898   - 'context' => &$this,
899   - 'form' => $oForm,
900   - ));
901   - return $oTemplate->render();
902   - }
903   -
904   - function do_move_final() {
905   - $oForm = $this->form_move();
906 903 $res = $oForm->validate();
  904 + $errors = $res['errors'];
907 905 $data = $res['results'];
908   - if (!empty($res['errors'])) {
909   - return $oForm->handleError();
  906 + $extra_errors = array();
  907 +
  908 + if (!is_null($data['browse'])) {
  909 + if ($data['browse']->getId() == $this->oDocument->getFolderID()) {
  910 + $extra_errors['browse'] = _kt("You cannot move the document within the same folder.");
  911 + } else {
  912 + $bNameClash = KTDocumentUtil::nameExists($data['browse'], $this->oDocument->getName());
  913 + if ($bNameClash && isset($data['name'])) {
  914 + $name = $data['name'];
  915 + $bNameClash = KTDocumentUtil::nameExists($data['browse'], $name);
  916 + } else {
  917 + $name = $this->oDocument->getName();
  918 + }
  919 + if ($bNameClash) {
  920 + $extra_errors['name'] = _kt("A document with this title already exists in your chosen folder. Please choose a different folder, or specify a new title for the copied document.");
  921 + }
  922 +
  923 + $bFileClash = KTDocumentUtil::fileExists($this->oFolder, $this->oDocument->getFilename());
  924 + if ($bFileClash && isset($data['filename'])) {
  925 + $filename = $data['filename'];
  926 + $bFileClash = KTDocumentUtil::fileExists($this->oFolder, $filename);
  927 + } else {
  928 + $filename = $this->oDocument->getFilename();
  929 + }
  930 + if ($bFileClash) {
  931 + $extra_errors['filename'] = _kt("A document with this filename already exists in your chosen folder. Please choose a different folder, or specify a new filename for the copied document.");
  932 + }
  933 +
  934 + if (!Permission::userHasFolderWritePermission($data['browse'])) {
  935 + $extra_errors['browse'] = _kt("You do not have permission to create new documents in that folder.");
  936 + }
  937 + }
910 938 }
911 939  
912   - $sReason = $data['reason'];
913   -
914   - if (!Permission::userHasFolderWritePermission($this->oFolder)) {
915   - $this->errorRedirectToMain(_kt("You do not have permission to move a document to this location"));
916   - exit(0);
  940 + if (!empty($errors) || !empty($extra_errors)) {
  941 + return $oForm->handleError(null, $extra_errors);
917 942 }
918   -
  943 +
919 944 $this->startTransaction();
920   -
921   - $oOriginalFolder = Folder::get($this->oDocument->getFolderId());
922   - $iOriginalFolderPermissionObjectId = $oOriginalFolder->getPermissionObjectId();
923   - $iDocumentPermissionObjectId = $this->oDocument->getPermissionObjectId();
924   -
925   -
926   - if ($iDocumentPermissionObjectId === $iOriginalFolderPermissionObjectId) {
927   - $this->oDocument->setPermissionObjectId($this->oFolder->getPermissionObjectId());
  945 + // now try update it.
  946 +
  947 + $res = KTDocumentUtil::move($this->oDocument, $data['browse'], $this->oUser, $sReason);
  948 + if (PEAR::isError($oNewDoc)) {
  949 + $this->errorRedirectTo("main", _kt("Failed to move document: ") . $oNewDoc->getMessage());
  950 + exit(0);
928 951 }
929   -
930   - //put the document in the new folder
931   - $this->oDocument->setFolderID($this->oFolder->getId());
  952 +
  953 + $this->oDocument->setName($name); // if needed.
  954 + $this->oDocument->setFilename($filename); // if needed.
  955 +
932 956 $res = $this->oDocument->update();
933   - if (PEAR::isError($res) || ($res === false)) {
934   - $this->errorRedirectToMain(_kt("There was a problem updating the document's location in the database"));
935   - }
936   -
937   -
938   - //move the document on the file system
939   - $oStorage =& KTStorageManagerUtil::getSingleton();
940   - $res = $oStorage->moveDocument($this->oDocument, $this->oDocumentFolder, $this->oFolder);
941   - if (PEAR::isError($res) || ($res === false)) {
942   - $this->oDocument->setFolderID($oOriginalFolder->getId());
943   - $this->oDocument->update();
944   - $this->errorRedirectToMain(_kt("There was a problem updating the document's location in the repository storage"));
  957 + if (PEAR::isError($res)) {
  958 + return $this->errorRedirectTo("main", _kt("Failed to move document: ") . $res->getMessage());
945 959 }
946 960  
947   -
948   - $sMoveMessage = sprintf("Moved from %s/%s to %s/%s: %s",
949   - $this->oDocumentFolder->getFullPath(),
950   - $this->oDocumentFolder->getName(),
951   - $this->oFolder->getFullPath(),
952   - $this->oFolder->getName(),
953   - $sReason);
954   -
955   - // create the document transaction record
956   -
957   - $oDocumentTransaction = & new DocumentTransaction($this->oDocument, $sMoveMessage, 'ktcore.transactions.move');
958   - $oDocumentTransaction->create();
959   -
960 961 $this->commitTransaction();
961   -
962   - $oKTTriggerRegistry = KTTriggerRegistry::getSingleton();
963   - $aTriggers = $oKTTriggerRegistry->getTriggers('moveDocument', 'postValidate');
964   - foreach ($aTriggers as $aTrigger) {
965   - $sTrigger = $aTrigger[0];
966   - $oTrigger = new $sTrigger;
967   - $aInfo = array(
968   - "document" => $this->oDocument,
969   - "old_folder" => $this->oDocumentFolder,
970   - "new_folder" => $this->oFolder,
971   - );
972   - $oTrigger->setInfo($aInfo);
973   - $ret = $oTrigger->postValidate();
974   - if (PEAR::isError($ret)) {
975   - $this->oDocument->delete();
976   - return $ret;
977   - }
978   - }
979 962  
980   - redirect(KTBrowseUtil::getUrlForDocument($this->oDocument));
981   - exit(0);
  963 + controllerRedirect('viewDocument', 'fDocumentId=' . $this->oDocument->getId());
  964 + exit(0);
982 965 }
  966 +
983 967 }
984 968 // }}}
985 969  
... ... @@ -1053,7 +1037,7 @@ class KTDocumentCopyAction extends KTDocumentAction {
1053 1037 'description' => _kt('Use the folder collection and path below to browse to the folder you wish to copy the documents into.'),
1054 1038 'required' => true,
1055 1039 'name' => 'browse',
1056   - 'folder_id' => $this->oFolder->getId(),
  1040 + 'folder_id' => $this->oDocument->getFolderID(),
1057 1041 )),
1058 1042 array('ktcore.widgets.reason', array(
1059 1043 'label' => _kt("Reason"),
... ...
templates/ktcore/action/finalise_mass_move.smarty
... ... @@ -26,7 +26,7 @@
26 26  
27 27 <div class="form_actions">
28 28 <input type="submit" name="submit[move]" value="{i18n}Move{/i18n}" />
29   -<input type="submit" name="submit[cancel]" value="{i18n}Cancel{/i18n}" />
  29 +<a href="{addQS context=$context}action=main&fFolderId={$folder}{/addQS}" class="form_cancel">Cancel</a>
30 30 </div>
31 31 </fieldset>
32 32 </form>
... ...
templates/ktcore/action/mass_move.smarty
... ... @@ -17,7 +17,7 @@
17 17  
18 18 <div class="form_actions">
19 19 <input type="submit" name="submit[move]" value="{i18n}Move{/i18n}" />
20   -<input type="submit" name="submit[cancel]" value="{i18n}Cancel{/i18n}" />
  20 +<a href="{addQS context=$context}action=main&fFolderId={$folder->getId()}{/addQS}" class="form_cancel">Cancel</a>
21 21 </div>
22 22 </fieldset>
23 23 </form>
... ...