diff --git a/code/FolderUnusedAssetsField.php b/code/FolderUnusedAssetsField.php
new file mode 100644
index 00000000..0d2b430a
--- /dev/null
+++ b/code/FolderUnusedAssetsField.php
@@ -0,0 +1,61 @@
+folder = $folder;
+ parent::__construct(new FieldSet());
+ }
+
+ public function getChildren() {
+ if($this->children->Count() == 0) {
+ $inlineFormAction = new InlineFormAction("delete_unused_thumbnails", _t('Folder.DELETEUNUSEDTHUMBNAILS', 'Delete unused thumbnails'));
+ $inlineFormAction->includeDefaultJS(false) ;
+
+ $this->children = new FieldSet(
+ new LiteralField( "UnusedAssets", "
"._t('Folder.UNUSEDFILESTITLE', 'Unused files')."
" ),
+ $this->getAssetList(),
+ new FieldGroup(
+ new LiteralField( "UnusedThumbnails", ""._t('Folder.UNUSEDTHUMBNAILSTITLE', 'Unused thumbnails')."
"),
+ $inlineFormAction
+ )
+ );
+ $this->children->setForm($this->form);
+ }
+ return $this->children;
+ }
+
+ public function FieldHolder() {
+ $output = "";
+ foreach($this->getChildren() as $child) {
+ $output .= $child->FieldHolder();
+ }
+ return $output;
+ }
+
+
+ /**
+ * Creates table for displaying unused files.
+ *
+ * @returns AssetTableField
+ */
+ protected function getAssetList() {
+ $where = $this->folder->getUnusedFilesListFilter();
+ $assetList = new AssetTableField(
+ $this->folder,
+ "AssetList",
+ "File",
+ array("Title" => _t('Folder.TITLE', "Title"), "LinkedURL" => _t('Folder.FILENAME', "Filename")),
+ "",
+ $where
+ );
+ $assetList->setPopupCaption(_t('Folder.VIEWASSET', "View Asset"));
+ $assetList->setPermissions(array("show","delete"));
+ $assetList->Markable = false;
+ return $assetList;
+ }
+}
\ No newline at end of file
diff --git a/code/SiteTreeFolderDecorator.php b/code/SiteTreeFolderDecorator.php
new file mode 100644
index 00000000..d7a64c54
--- /dev/null
+++ b/code/SiteTreeFolderDecorator.php
@@ -0,0 +1,55 @@
+push(new Tab("UnusedFiles", _t('Folder.UNUSEDFILESTAB', "Unused files"),
+ // new Folder_UnusedAssetsField($this)
+ // ));
+ }
+
+ /**
+ * Looks for files used in system and create where clause which contains all ID's of files.
+ *
+ * @returns String where clause which will work as filter.
+ */
+ public function getUnusedFilesListFilter() {
+ $result = DB::query("SELECT DISTINCT \"FileID\" FROM \"SiteTree_ImageTracking\"");
+ $usedFiles = array();
+ $where = '';
+ $classes = ClassInfo::subclassesFor('SiteTree');
+
+ if($result->numRecords() > 0) {
+ while($nextResult = $result->next()) {
+ $where .= $nextResult['FileID'] . ',';
+ }
+ }
+
+ foreach($classes as $className) {
+ $query = singleton($className)->extendedSQL();
+ $ids = $query->execute()->column();
+ if(!count($ids)) continue;
+
+ foreach(singleton($className)->has_one() as $relName => $joinClass) {
+ if($joinClass == 'Image' || $joinClass == 'File') {
+ $fieldName = $relName .'ID';
+ $query = singleton($className)->extendedSQL("$fieldName > 0");
+ $query->distinct = true;
+ $query->select = array($fieldName);
+ $usedFiles = array_merge($usedFiles, $query->execute()->column());
+
+ } elseif($joinClass == 'Folder') {
+ // @todo
+ }
+ }
+ }
+
+ if($usedFiles) {
+ return "\"File\".\"ID\" NOT IN (" . implode(', ', $usedFiles) . ") AND (\"ClassName\" = 'File' OR \"ClassName\" = 'Image')";
+
+ } else {
+ return "(\"ClassName\" = 'File' OR \"ClassName\" = 'Image')";
+ }
+ return $where;
+ }
+}
\ No newline at end of file