1 var REST = library.REST.REST();
  2 
  3 /**
  4  * Deletes the file or folder defined in theJSON
  5  *
  6  * @param theJSON - {"id": 123456} or {"path": "Folder/To/Delete/"}
  7  */
  8 function fileOrFolderDelete(theJSON) {
  9   if (!!theJSON.path) {
 10     var aFolder;
 11     try {
 12       aFolder = new ManagedFolder(REST.getFullPath(theJSON.path));
 13     } catch (err) {
 14       REST.pushError(
 15         REST.errors.e404,
 16         "The directory does not exist: " + theJSON.path
 17       );
 18       return;
 19     }
 20     try {
 21       REST.push(aFolder);
 22       fileManager.folderDelete(aFolder);
 23     } catch (anE) {
 24       REST.pop();
 25       throw anE;
 26     }
 27   } else if (!!theJSON.id) {
 28     var aFile = fileManager.getFileObjectById(theJSON.id);
 29     if (!aFile || searchManager.filterByACL([theJSON.id]).length == 0) {
 30       REST.pushError(
 31         REST.errors.e404,
 32         "The file does not exist: " + theJSON.id
 33       );
 34     } else {
 35       try {
 36         var aTriggeredAdd = {};
 37         var aStub = REST.triggerAssetBasedWorkflows(
 38           REST.AssetTriggers.Removed,
 39           aFile
 40         );
 41         if (aStub) {
 42           aTriggeredAdd.triggerAssetRemoved = aStub.ok;
 43         }
 44         REST.push(aFile, aTriggeredAdd);
 45         fileManager.fileDelete(aFile);
 46       } catch (anE) {
 47         REST.pop();
 48         throw anE;
 49       }
 50     }
 51   } else {
 52     REST.pushError(
 53       REST.errors.e400,
 54       "Failed to process: " + JSON.stringify(theJSON)
 55     );
 56   }
 57 }
 58 
 59 /**
 60  * @name Delete
 61  * @class Deletes Directories and Files
 62  * @description For every object in "data", this endpoint deletes the defined file or directory
 63  *
 64  * @param data An array of object that define the assets to decompress and where to place contents
 65  * [{"id": 123456}, {"path": "Folder/To/Delete/"}, ...]
 66  * @param [verbose=false] Setting this to true will collect a variety of default values for each asset.
 67  * @param [fields] An array of field id's to collect the values for each asset
 68  * @param [triggerAssetBasedWorkflow=true] set to false to avoid triggering other asset removed workflows
 69  * @returns [{theRemovedFileInfo},{theRemovedFolderInfo, ... ]
 70  *
 71  * @example /wf/restapi/v2/delete
 72  *
 73  * Parameters:
 74  * data=[{"id":201629304},{"path":"Folder/To/Delete/"}]
 75  * verbose=true
 76  *
 77  Response:
 78  [
 79 	 {
 80 	   "id": 201629304,
 81 	   "name": "test.txt",
 82 	   "path": "Folder/test.txt",
 83 	   "height": 0,
 84 	   "width": 0,
 85 	   "bytes": 0,
 86 	   "lastModified": 1507837323000,
 87 	   "mimeType": "text/plain",
 88 	   "previews": {
 89 		 "thumbnail": "../servlet/jb.view?table=thumbnails&col=thumbnails&id=pe_323031363239333034",
 90 		 "viewex": "../servlet/jb.view?table=viewex&col=viewex&id=pe_323031363239333034",
 91 		 "downloadUrl": "../servlet/dload?id=pe_323031363239333034"
 92 	   }
 93 	 },
 94 	 {
 95 	   "path": "Folder/To/Delete/",
 96 	   "name": "Delete",
 97 	   "resolver": "directory://254"
 98 	 }
 99  ]
100 
101  */
102 function main() {
103   if (!context.getUser().isPermissionEnabled("deleteAccess")) {
104     REST.pushError(REST.errors.e403, "deleteAccess permission is not enabled");
105     return REST.execute();
106   }
107   REST.setCallback(fileOrFolderDelete);
108   return REST.execute("data");
109 }
110 main();
111