Completed
Push — master ( ba86ee...bb7952 )
by
unknown
34:18 queued 14s
created
apps/files_trashbin/tests/Sabre/TrashbinPluginTest.php 2 patches
Indentation   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -19,49 +19,49 @@
 block discarded – undo
19 19
 use Test\TestCase;
20 20
 
21 21
 class TrashbinPluginTest extends TestCase {
22
-	private Server $server;
22
+    private Server $server;
23 23
 
24
-	protected function setUp(): void {
25
-		parent::setUp();
24
+    protected function setUp(): void {
25
+        parent::setUp();
26 26
 
27
-		$tree = $this->createMock(Tree::class);
28
-		$this->server = new Server($tree);
29
-	}
27
+        $tree = $this->createMock(Tree::class);
28
+        $this->server = new Server($tree);
29
+    }
30 30
 
31
-	/**
32
-	 * @dataProvider quotaProvider
33
-	 */
34
-	public function testQuota(int $quota, int $fileSize, bool $expectedResult): void {
35
-		$fileInfo = $this->createMock(ITrashItem::class);
36
-		$fileInfo->method('getSize')->willReturn($fileSize);
31
+    /**
32
+     * @dataProvider quotaProvider
33
+     */
34
+    public function testQuota(int $quota, int $fileSize, bool $expectedResult): void {
35
+        $fileInfo = $this->createMock(ITrashItem::class);
36
+        $fileInfo->method('getSize')->willReturn($fileSize);
37 37
 
38
-		$trashNode = $this->createMock(ITrash::class);
39
-		$trashNode->method('getFileInfo')->willReturn($fileInfo);
38
+        $trashNode = $this->createMock(ITrash::class);
39
+        $trashNode->method('getFileInfo')->willReturn($fileInfo);
40 40
 
41
-		$restoreNode = $this->createMock(RestoreFolder::class);
41
+        $restoreNode = $this->createMock(RestoreFolder::class);
42 42
 
43
-		$this->server->tree->method('getNodeForPath')->willReturn($trashNode, $restoreNode);
43
+        $this->server->tree->method('getNodeForPath')->willReturn($trashNode, $restoreNode);
44 44
 
45
-		$previewManager = $this->createMock(IPreview::class);
45
+        $previewManager = $this->createMock(IPreview::class);
46 46
 
47
-		$view = $this->createMock(View::class);
48
-		$view->method('free_space')->willReturn($quota);
47
+        $view = $this->createMock(View::class);
48
+        $view->method('free_space')->willReturn($quota);
49 49
 
50
-		$plugin = new TrashbinPlugin($previewManager, $view);
51
-		$plugin->initialize($this->server);
50
+        $plugin = new TrashbinPlugin($previewManager, $view);
51
+        $plugin->initialize($this->server);
52 52
 
53
-		$sourcePath = 'trashbin/test/trash/file1';
54
-		$destinationPath = 'trashbin/test/restore/file1';
55
-		$this->assertEquals($expectedResult, $plugin->beforeMove($sourcePath, $destinationPath));
56
-	}
53
+        $sourcePath = 'trashbin/test/trash/file1';
54
+        $destinationPath = 'trashbin/test/restore/file1';
55
+        $this->assertEquals($expectedResult, $plugin->beforeMove($sourcePath, $destinationPath));
56
+    }
57 57
 
58
-	public function quotaProvider(): array {
59
-		return [
60
-			[ 1024, 512, true ],
61
-			[ 512, 513, false ],
62
-			[ FileInfo::SPACE_NOT_COMPUTED, 1024, true ],
63
-			[ FileInfo::SPACE_UNKNOWN, 1024, true ],
64
-			[ FileInfo::SPACE_UNLIMITED, 1024, true ]
65
-		];
66
-	}
58
+    public function quotaProvider(): array {
59
+        return [
60
+            [ 1024, 512, true ],
61
+            [ 512, 513, false ],
62
+            [ FileInfo::SPACE_NOT_COMPUTED, 1024, true ],
63
+            [ FileInfo::SPACE_UNKNOWN, 1024, true ],
64
+            [ FileInfo::SPACE_UNLIMITED, 1024, true ]
65
+        ];
66
+    }
67 67
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -57,11 +57,11 @@
 block discarded – undo
57 57
 
58 58
 	public function quotaProvider(): array {
59 59
 		return [
60
-			[ 1024, 512, true ],
61
-			[ 512, 513, false ],
62
-			[ FileInfo::SPACE_NOT_COMPUTED, 1024, true ],
63
-			[ FileInfo::SPACE_UNKNOWN, 1024, true ],
64
-			[ FileInfo::SPACE_UNLIMITED, 1024, true ]
60
+			[1024, 512, true],
61
+			[512, 513, false],
62
+			[FileInfo::SPACE_NOT_COMPUTED, 1024, true],
63
+			[FileInfo::SPACE_UNKNOWN, 1024, true],
64
+			[FileInfo::SPACE_UNLIMITED, 1024, true]
65 65
 		];
66 66
 	}
67 67
 }
Please login to merge, or discard this patch.
apps/files_trashbin/lib/Sabre/TrashbinPlugin.php 2 patches
Indentation   +155 added lines, -155 removed lines patch added patch discarded remove patch
@@ -22,159 +22,159 @@
 block discarded – undo
22 22
 use Sabre\HTTP\ResponseInterface;
23 23
 
24 24
 class TrashbinPlugin extends ServerPlugin {
25
-	public const TRASHBIN_FILENAME = '{http://nextcloud.org/ns}trashbin-filename';
26
-	public const TRASHBIN_ORIGINAL_LOCATION = '{http://nextcloud.org/ns}trashbin-original-location';
27
-	public const TRASHBIN_DELETION_TIME = '{http://nextcloud.org/ns}trashbin-deletion-time';
28
-	public const TRASHBIN_TITLE = '{http://nextcloud.org/ns}trashbin-title';
29
-	public const TRASHBIN_DELETED_BY_ID = '{http://nextcloud.org/ns}trashbin-deleted-by-id';
30
-	public const TRASHBIN_DELETED_BY_DISPLAY_NAME = '{http://nextcloud.org/ns}trashbin-deleted-by-display-name';
31
-	public const TRASHBIN_BACKEND = '{http://nextcloud.org/ns}trashbin-backend';
32
-
33
-	/** @var Server */
34
-	private $server;
35
-
36
-	public function __construct(
37
-		private IPreview $previewManager,
38
-		private View $view,
39
-	) {
40
-	}
41
-
42
-	public function initialize(Server $server) {
43
-		$this->server = $server;
44
-
45
-		$this->server->on('propFind', [$this, 'propFind']);
46
-		$this->server->on('afterMethod:GET', [$this,'httpGet']);
47
-		$this->server->on('beforeMove', [$this, 'beforeMove']);
48
-	}
49
-
50
-
51
-	public function propFind(PropFind $propFind, INode $node) {
52
-		if (!($node instanceof ITrash)) {
53
-			return;
54
-		}
55
-
56
-		$propFind->handle(self::TRASHBIN_FILENAME, function () use ($node) {
57
-			return $node->getFilename();
58
-		});
59
-
60
-		$propFind->handle(self::TRASHBIN_ORIGINAL_LOCATION, function () use ($node) {
61
-			return $node->getOriginalLocation();
62
-		});
63
-
64
-		$propFind->handle(self::TRASHBIN_TITLE, function () use ($node) {
65
-			return $node->getTitle();
66
-		});
67
-
68
-		$propFind->handle(self::TRASHBIN_DELETION_TIME, function () use ($node) {
69
-			return $node->getDeletionTime();
70
-		});
71
-
72
-		$propFind->handle(self::TRASHBIN_DELETED_BY_ID, function () use ($node) {
73
-			return $node->getDeletedBy()?->getUID();
74
-		});
75
-
76
-		$propFind->handle(self::TRASHBIN_DELETED_BY_DISPLAY_NAME, function () use ($node) {
77
-			return $node->getDeletedBy()?->getDisplayName();
78
-		});
79
-
80
-		// Pass the real filename as the DAV display name
81
-		$propFind->handle(FilesPlugin::DISPLAYNAME_PROPERTYNAME, function () use ($node) {
82
-			return $node->getFilename();
83
-		});
84
-
85
-		$propFind->handle(FilesPlugin::SIZE_PROPERTYNAME, function () use ($node) {
86
-			return $node->getSize();
87
-		});
88
-
89
-		$propFind->handle(FilesPlugin::FILEID_PROPERTYNAME, function () use ($node) {
90
-			return $node->getFileId();
91
-		});
92
-
93
-		$propFind->handle(FilesPlugin::PERMISSIONS_PROPERTYNAME, function () {
94
-			return 'GD'; // read + delete
95
-		});
96
-
97
-		$propFind->handle(FilesPlugin::GETETAG_PROPERTYNAME, function () use ($node) {
98
-			// add fake etag, it is only needed to identify the preview image
99
-			return $node->getLastModified();
100
-		});
101
-
102
-		$propFind->handle(FilesPlugin::INTERNAL_FILEID_PROPERTYNAME, function () use ($node) {
103
-			// add fake etag, it is only needed to identify the preview image
104
-			return $node->getFileId();
105
-		});
106
-
107
-		$propFind->handle(FilesPlugin::HAS_PREVIEW_PROPERTYNAME, function () use ($node) {
108
-			return $this->previewManager->isAvailable($node->getFileInfo());
109
-		});
110
-
111
-		$propFind->handle(FilesPlugin::MOUNT_TYPE_PROPERTYNAME, function () {
112
-			return '';
113
-		});
114
-
115
-		$propFind->handle(self::TRASHBIN_BACKEND, function () use ($node) {
116
-			$fileInfo = $node->getFileInfo();
117
-			if (!($fileInfo instanceof ITrashItem)) {
118
-				return '';
119
-			}
120
-			return $fileInfo->getTrashBackend()::class;
121
-		});
122
-	}
123
-
124
-	/**
125
-	 * Set real filename on trashbin download
126
-	 *
127
-	 * @param RequestInterface $request
128
-	 * @param ResponseInterface $response
129
-	 */
130
-	public function httpGet(RequestInterface $request, ResponseInterface $response): void {
131
-		$path = $request->getPath();
132
-		$node = $this->server->tree->getNodeForPath($path);
133
-		if ($node instanceof ITrash) {
134
-			$response->addHeader('Content-Disposition', 'attachment; filename="' . $node->getFilename() . '"');
135
-		}
136
-	}
137
-
138
-	/**
139
-	 * Check if a user has available space before attempting to
140
-	 * restore from trashbin unless they have unlimited quota.
141
-	 *
142
-	 * @param string $sourcePath
143
-	 * @param string $destinationPath
144
-	 * @return bool
145
-	 */
146
-	public function beforeMove(string $sourcePath, string $destinationPath): bool {
147
-		try {
148
-			$node = $this->server->tree->getNodeForPath($sourcePath);
149
-			$destinationNodeParent = $this->server->tree->getNodeForPath(dirname($destinationPath));
150
-		} catch (\Sabre\DAV\Exception $e) {
151
-			\OCP\Server::get(LoggerInterface::class)
152
-				->error($e->getMessage(), ['app' => 'files_trashbin', 'exception' => $e]);
153
-			return true;
154
-		}
155
-
156
-		// Check if a file is being restored before proceeding
157
-		if (!$node instanceof ITrash || !$destinationNodeParent instanceof RestoreFolder) {
158
-			return true;
159
-		}
160
-
161
-		$fileInfo = $node->getFileInfo();
162
-		if (!$fileInfo instanceof ITrashItem) {
163
-			return true;
164
-		}
165
-		$restoreFolder = dirname($fileInfo->getOriginalLocation());
166
-		$freeSpace = $this->view->free_space($restoreFolder);
167
-		if ($freeSpace === FileInfo::SPACE_NOT_COMPUTED ||
168
-			$freeSpace === FileInfo::SPACE_UNKNOWN ||
169
-			$freeSpace === FileInfo::SPACE_UNLIMITED) {
170
-			return true;
171
-		}
172
-		$filesize = $fileInfo->getSize();
173
-		if ($freeSpace < $filesize) {
174
-			$this->server->httpResponse->setStatus(507);
175
-			return false;
176
-		}
177
-
178
-		return true;
179
-	}
25
+    public const TRASHBIN_FILENAME = '{http://nextcloud.org/ns}trashbin-filename';
26
+    public const TRASHBIN_ORIGINAL_LOCATION = '{http://nextcloud.org/ns}trashbin-original-location';
27
+    public const TRASHBIN_DELETION_TIME = '{http://nextcloud.org/ns}trashbin-deletion-time';
28
+    public const TRASHBIN_TITLE = '{http://nextcloud.org/ns}trashbin-title';
29
+    public const TRASHBIN_DELETED_BY_ID = '{http://nextcloud.org/ns}trashbin-deleted-by-id';
30
+    public const TRASHBIN_DELETED_BY_DISPLAY_NAME = '{http://nextcloud.org/ns}trashbin-deleted-by-display-name';
31
+    public const TRASHBIN_BACKEND = '{http://nextcloud.org/ns}trashbin-backend';
32
+
33
+    /** @var Server */
34
+    private $server;
35
+
36
+    public function __construct(
37
+        private IPreview $previewManager,
38
+        private View $view,
39
+    ) {
40
+    }
41
+
42
+    public function initialize(Server $server) {
43
+        $this->server = $server;
44
+
45
+        $this->server->on('propFind', [$this, 'propFind']);
46
+        $this->server->on('afterMethod:GET', [$this,'httpGet']);
47
+        $this->server->on('beforeMove', [$this, 'beforeMove']);
48
+    }
49
+
50
+
51
+    public function propFind(PropFind $propFind, INode $node) {
52
+        if (!($node instanceof ITrash)) {
53
+            return;
54
+        }
55
+
56
+        $propFind->handle(self::TRASHBIN_FILENAME, function () use ($node) {
57
+            return $node->getFilename();
58
+        });
59
+
60
+        $propFind->handle(self::TRASHBIN_ORIGINAL_LOCATION, function () use ($node) {
61
+            return $node->getOriginalLocation();
62
+        });
63
+
64
+        $propFind->handle(self::TRASHBIN_TITLE, function () use ($node) {
65
+            return $node->getTitle();
66
+        });
67
+
68
+        $propFind->handle(self::TRASHBIN_DELETION_TIME, function () use ($node) {
69
+            return $node->getDeletionTime();
70
+        });
71
+
72
+        $propFind->handle(self::TRASHBIN_DELETED_BY_ID, function () use ($node) {
73
+            return $node->getDeletedBy()?->getUID();
74
+        });
75
+
76
+        $propFind->handle(self::TRASHBIN_DELETED_BY_DISPLAY_NAME, function () use ($node) {
77
+            return $node->getDeletedBy()?->getDisplayName();
78
+        });
79
+
80
+        // Pass the real filename as the DAV display name
81
+        $propFind->handle(FilesPlugin::DISPLAYNAME_PROPERTYNAME, function () use ($node) {
82
+            return $node->getFilename();
83
+        });
84
+
85
+        $propFind->handle(FilesPlugin::SIZE_PROPERTYNAME, function () use ($node) {
86
+            return $node->getSize();
87
+        });
88
+
89
+        $propFind->handle(FilesPlugin::FILEID_PROPERTYNAME, function () use ($node) {
90
+            return $node->getFileId();
91
+        });
92
+
93
+        $propFind->handle(FilesPlugin::PERMISSIONS_PROPERTYNAME, function () {
94
+            return 'GD'; // read + delete
95
+        });
96
+
97
+        $propFind->handle(FilesPlugin::GETETAG_PROPERTYNAME, function () use ($node) {
98
+            // add fake etag, it is only needed to identify the preview image
99
+            return $node->getLastModified();
100
+        });
101
+
102
+        $propFind->handle(FilesPlugin::INTERNAL_FILEID_PROPERTYNAME, function () use ($node) {
103
+            // add fake etag, it is only needed to identify the preview image
104
+            return $node->getFileId();
105
+        });
106
+
107
+        $propFind->handle(FilesPlugin::HAS_PREVIEW_PROPERTYNAME, function () use ($node) {
108
+            return $this->previewManager->isAvailable($node->getFileInfo());
109
+        });
110
+
111
+        $propFind->handle(FilesPlugin::MOUNT_TYPE_PROPERTYNAME, function () {
112
+            return '';
113
+        });
114
+
115
+        $propFind->handle(self::TRASHBIN_BACKEND, function () use ($node) {
116
+            $fileInfo = $node->getFileInfo();
117
+            if (!($fileInfo instanceof ITrashItem)) {
118
+                return '';
119
+            }
120
+            return $fileInfo->getTrashBackend()::class;
121
+        });
122
+    }
123
+
124
+    /**
125
+     * Set real filename on trashbin download
126
+     *
127
+     * @param RequestInterface $request
128
+     * @param ResponseInterface $response
129
+     */
130
+    public function httpGet(RequestInterface $request, ResponseInterface $response): void {
131
+        $path = $request->getPath();
132
+        $node = $this->server->tree->getNodeForPath($path);
133
+        if ($node instanceof ITrash) {
134
+            $response->addHeader('Content-Disposition', 'attachment; filename="' . $node->getFilename() . '"');
135
+        }
136
+    }
137
+
138
+    /**
139
+     * Check if a user has available space before attempting to
140
+     * restore from trashbin unless they have unlimited quota.
141
+     *
142
+     * @param string $sourcePath
143
+     * @param string $destinationPath
144
+     * @return bool
145
+     */
146
+    public function beforeMove(string $sourcePath, string $destinationPath): bool {
147
+        try {
148
+            $node = $this->server->tree->getNodeForPath($sourcePath);
149
+            $destinationNodeParent = $this->server->tree->getNodeForPath(dirname($destinationPath));
150
+        } catch (\Sabre\DAV\Exception $e) {
151
+            \OCP\Server::get(LoggerInterface::class)
152
+                ->error($e->getMessage(), ['app' => 'files_trashbin', 'exception' => $e]);
153
+            return true;
154
+        }
155
+
156
+        // Check if a file is being restored before proceeding
157
+        if (!$node instanceof ITrash || !$destinationNodeParent instanceof RestoreFolder) {
158
+            return true;
159
+        }
160
+
161
+        $fileInfo = $node->getFileInfo();
162
+        if (!$fileInfo instanceof ITrashItem) {
163
+            return true;
164
+        }
165
+        $restoreFolder = dirname($fileInfo->getOriginalLocation());
166
+        $freeSpace = $this->view->free_space($restoreFolder);
167
+        if ($freeSpace === FileInfo::SPACE_NOT_COMPUTED ||
168
+            $freeSpace === FileInfo::SPACE_UNKNOWN ||
169
+            $freeSpace === FileInfo::SPACE_UNLIMITED) {
170
+            return true;
171
+        }
172
+        $filesize = $fileInfo->getSize();
173
+        if ($freeSpace < $filesize) {
174
+            $this->server->httpResponse->setStatus(507);
175
+            return false;
176
+        }
177
+
178
+        return true;
179
+    }
180 180
 }
Please login to merge, or discard this patch.
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
 		$this->server = $server;
44 44
 
45 45
 		$this->server->on('propFind', [$this, 'propFind']);
46
-		$this->server->on('afterMethod:GET', [$this,'httpGet']);
46
+		$this->server->on('afterMethod:GET', [$this, 'httpGet']);
47 47
 		$this->server->on('beforeMove', [$this, 'beforeMove']);
48 48
 	}
49 49
 
@@ -53,66 +53,66 @@  discard block
 block discarded – undo
53 53
 			return;
54 54
 		}
55 55
 
56
-		$propFind->handle(self::TRASHBIN_FILENAME, function () use ($node) {
56
+		$propFind->handle(self::TRASHBIN_FILENAME, function() use ($node) {
57 57
 			return $node->getFilename();
58 58
 		});
59 59
 
60
-		$propFind->handle(self::TRASHBIN_ORIGINAL_LOCATION, function () use ($node) {
60
+		$propFind->handle(self::TRASHBIN_ORIGINAL_LOCATION, function() use ($node) {
61 61
 			return $node->getOriginalLocation();
62 62
 		});
63 63
 
64
-		$propFind->handle(self::TRASHBIN_TITLE, function () use ($node) {
64
+		$propFind->handle(self::TRASHBIN_TITLE, function() use ($node) {
65 65
 			return $node->getTitle();
66 66
 		});
67 67
 
68
-		$propFind->handle(self::TRASHBIN_DELETION_TIME, function () use ($node) {
68
+		$propFind->handle(self::TRASHBIN_DELETION_TIME, function() use ($node) {
69 69
 			return $node->getDeletionTime();
70 70
 		});
71 71
 
72
-		$propFind->handle(self::TRASHBIN_DELETED_BY_ID, function () use ($node) {
72
+		$propFind->handle(self::TRASHBIN_DELETED_BY_ID, function() use ($node) {
73 73
 			return $node->getDeletedBy()?->getUID();
74 74
 		});
75 75
 
76
-		$propFind->handle(self::TRASHBIN_DELETED_BY_DISPLAY_NAME, function () use ($node) {
76
+		$propFind->handle(self::TRASHBIN_DELETED_BY_DISPLAY_NAME, function() use ($node) {
77 77
 			return $node->getDeletedBy()?->getDisplayName();
78 78
 		});
79 79
 
80 80
 		// Pass the real filename as the DAV display name
81
-		$propFind->handle(FilesPlugin::DISPLAYNAME_PROPERTYNAME, function () use ($node) {
81
+		$propFind->handle(FilesPlugin::DISPLAYNAME_PROPERTYNAME, function() use ($node) {
82 82
 			return $node->getFilename();
83 83
 		});
84 84
 
85
-		$propFind->handle(FilesPlugin::SIZE_PROPERTYNAME, function () use ($node) {
85
+		$propFind->handle(FilesPlugin::SIZE_PROPERTYNAME, function() use ($node) {
86 86
 			return $node->getSize();
87 87
 		});
88 88
 
89
-		$propFind->handle(FilesPlugin::FILEID_PROPERTYNAME, function () use ($node) {
89
+		$propFind->handle(FilesPlugin::FILEID_PROPERTYNAME, function() use ($node) {
90 90
 			return $node->getFileId();
91 91
 		});
92 92
 
93
-		$propFind->handle(FilesPlugin::PERMISSIONS_PROPERTYNAME, function () {
93
+		$propFind->handle(FilesPlugin::PERMISSIONS_PROPERTYNAME, function() {
94 94
 			return 'GD'; // read + delete
95 95
 		});
96 96
 
97
-		$propFind->handle(FilesPlugin::GETETAG_PROPERTYNAME, function () use ($node) {
97
+		$propFind->handle(FilesPlugin::GETETAG_PROPERTYNAME, function() use ($node) {
98 98
 			// add fake etag, it is only needed to identify the preview image
99 99
 			return $node->getLastModified();
100 100
 		});
101 101
 
102
-		$propFind->handle(FilesPlugin::INTERNAL_FILEID_PROPERTYNAME, function () use ($node) {
102
+		$propFind->handle(FilesPlugin::INTERNAL_FILEID_PROPERTYNAME, function() use ($node) {
103 103
 			// add fake etag, it is only needed to identify the preview image
104 104
 			return $node->getFileId();
105 105
 		});
106 106
 
107
-		$propFind->handle(FilesPlugin::HAS_PREVIEW_PROPERTYNAME, function () use ($node) {
107
+		$propFind->handle(FilesPlugin::HAS_PREVIEW_PROPERTYNAME, function() use ($node) {
108 108
 			return $this->previewManager->isAvailable($node->getFileInfo());
109 109
 		});
110 110
 
111
-		$propFind->handle(FilesPlugin::MOUNT_TYPE_PROPERTYNAME, function () {
111
+		$propFind->handle(FilesPlugin::MOUNT_TYPE_PROPERTYNAME, function() {
112 112
 			return '';
113 113
 		});
114 114
 
115
-		$propFind->handle(self::TRASHBIN_BACKEND, function () use ($node) {
115
+		$propFind->handle(self::TRASHBIN_BACKEND, function() use ($node) {
116 116
 			$fileInfo = $node->getFileInfo();
117 117
 			if (!($fileInfo instanceof ITrashItem)) {
118 118
 				return '';
@@ -131,7 +131,7 @@  discard block
 block discarded – undo
131 131
 		$path = $request->getPath();
132 132
 		$node = $this->server->tree->getNodeForPath($path);
133 133
 		if ($node instanceof ITrash) {
134
-			$response->addHeader('Content-Disposition', 'attachment; filename="' . $node->getFilename() . '"');
134
+			$response->addHeader('Content-Disposition', 'attachment; filename="'.$node->getFilename().'"');
135 135
 		}
136 136
 	}
137 137
 
Please login to merge, or discard this patch.