1 <?php
2
3 4 5 6 7 8
9
10 class DeleteOldAssociatedFoldersTask extends BuildTask {
11
12 protected $title = 'Clear Bad Folders';
13
14 protected $description = "Óäŕë˙ĺň ďóńňűĺ ďŕďęč, íĺ ďđčâ˙çŕííűĺ ę ńňđŕíčöŕě";
15
16 function init() {
17 if (!(Director::isDev() || Director::is_cli() || Permission::check("ADMIN")))
18 return Security::permissionFailure($this);
19
20 parent::init();
21 }
22
23 function run($request) {
24
25 if (class_exists('LogItem')) {
26 LogItem::enable(false);
27 }
28
29 foreach (DataObject::get('Folder', "ParentID=1 and Filename RLIKE 'assets/page-files/[0-9]+/'", 'Name', '', 9000) as $h) {
30 $this->process_one($h);
31 if (!$h->hasChildren())
32 $h->delete();
33 }
34 }
35
36 function process_one($h) {
37 $extensionClasses = self::get_decorated_by('AssociatedFolderDecorator');
38 foreach ($h->Children() as $f) {
39 if (!$f->is_a('Folder')) {
40 continue;
41 }
42
43 $p = DataObject::get_by_id('Page', intval($f->Name));
44 if (count($extensionClasses)) {
45 foreach($extensionClasses as $extensionClass) {
46 if ($p && $p->AssociatedFolderID != $f->ID) {
47 $p = DataObject::get_one($extensionClass, "AssociatedFolderID = {$f->ID}");
48 }
49 }
50 }
51
52 if ($p && $p->AssociatedFolderID == $f->ID) {
53 }
54 else {
55 echo "2del: {$f->ID} {$f->Filename} {$f->LastEdited}\n";
56
57 }
58 $f = null;
59 }
60 }
61
62 static function get_decorated_by($extension){
63 $classes = array();
64 foreach(ClassInfo::subClassesFor('Object') as $className) {
65 if (Object::has_extension($className, $extension)){
66 $classes[] = $className;
67 }
68 }
69 return $classes;
70 }
71 }
72
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-