[BUG 4.9.8] function scanDirectory()

Alle bestätigten Fehler in CONTENIDO 4.9 (erledigte Fehler werden durch geschlossene Beiträge gekennzeichnet).
Gesperrt
beloved_behated
Beiträge: 55
Registriert: Mi 25. Nov 2009, 16:08
Kontaktdaten:

[BUG 4.9.8] function scanDirectory()

Beitrag von beloved_behated » Mi 19. Aug 2015, 10:37

Hallo,

in der contenido/includes/functions.file.php in Zeile 244 wird eine falsche Klasse aufgerufen:

Code: Alles auswählen

function scanDirectory($sDirectory, $bRecursive = false) {
    cDeprecated('This method is deprecated and is not needed any longer');
    return cFileHandler::read($sDirectory, $bRecursive, false, true);
}
Statt cFileHandler müsste hier cDirHandler aufgerufen werden:

Code: Alles auswählen

function scanDirectory($sDirectory, $bRecursive = false) {
    cDeprecated('This method is deprecated and is not needed any longer');
    return cDirHandler::read($sDirectory, $bRecursive, false, true);
}

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: [BUG 4.9.8] function scanDirectory()

Beitrag von frederic.schneider_4fb » Do 20. Aug 2015, 09:01

Upps! Vielen Dank für Deine Meldung. Ich habe das als Ticket für die nächste Version aufgenommen.
Frederic Schneider
Entwickler bei der four for business AG

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: [BUG 4.9.8] function scanDirectory()

Beitrag von frederic.schneider_4fb » Do 8. Okt 2015, 09:10

Das Problem ist in der nächsten Version behoben
Frederic Schneider
Entwickler bei der four for business AG

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: [BUG 4.9.8] function scanDirectory()

Beitrag von rethus » Di 20. Okt 2015, 20:15

BTW: In der API steht die noch drin, die Logs in 4.9.8 melden es aber als Deprecated.

Zwei Dinge wären gut:
  1. Die Fehlermeldung aussagekräftiger gestalten... z.B. "Use cFileHandler::read($sDirectory, $bRecursive, false, true); instead" ergänzen
  2. In der API die Funktion als Deprecated markieren, und auch den Hinweis dazu, was jetzt zu nutzen ist: http://api.contenido.org/con498/functio ... ctory.html
Wobei, ist die Implementierung überhaupt richtig. Wäre hier nicht die php-eigene Funktion scandir() sinvoller? Hier geht es ja nicht um das einlesen einer Datei, sondern um eine Dateiliste?!
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: [BUG 4.9.8] function scanDirectory()

Beitrag von rethus » Mi 21. Okt 2015, 15:03

Verwendet man Module, die z.B. den Template-Ordner des Moduls auslesen sollen muss der Aufruf von scanDirectory gegen folgendes ersetzt werden:

Code: Alles auswählen

$module = new cModuleHandler($cCurrentModule);
$tplFiles = $module->getAllFilesFromDirectory('template');
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: [BUG 4.9.8] function scanDirectory()

Beitrag von rethus » Mi 28. Okt 2015, 19:21

Hier nochmal eine Ergänzung...

Da ich gerade ein altes Modul auf 4.9 migriere, war ich auf der Suche nach einer Funktion, die nur kursiv die Verzeichnisse einliest.
Dabei bin ich auf cDirHandler gestoßen - leider macht diese Klasse Ihre arbeit stellenweise nicht gut.

Der Aufruf:

Code: Alles auswählen

// zum Vergleich:  
// public static function read($dirname,$recursive = false, $dirOnly = false, $fileOnly = false)
             cDirHandler::read($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload'],true,true,false);
 
liefert alle Verzeichnisse & Dateien zurück anstatt wie gewünscht nur die Verzeichnisse.

Mal wird über opendir() ausgelesen [alte variante], mal wird es "state of the Art" via SPL-Directory-Iterator gemacht.

Ab PHP-Version 5.3 ist ja die SPL-Erweiterung fest einkompiliert und nicht mehr deaktivierbar... somit kann man die von der Erweiterung angebotenen Iteratoren nutzen (http://php.net/manual/de/spl.iterators.php), weshalb ich bitte ein Ticket zu öffnen mit dem Inhalt, dass die Datei komplett aktualisiert wird.

Was mich wundert... es wird bereits in der class.dirhandler.php mit dem DirectoryIterator gearbeitet, aber dann wird nicht die iteratoreigene Methode "DirectoryIterator::isDir()"genutzt, sondern die Dateisystem-Basierte Methode "is_dir()" gearbeitet. :shock:

Beispiel-Iteration, wie es aussehen könnte (so habe ich es in meinem Modul jetzt erstmal überbrückt)

Code: Alles auswählen

$iterator = new DirectoryIterator($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload']);
foreach ($iterator as $fileinfo) {
    if ($fileinfo->isDir() && !$fileinfo->isDot()) {
        echo $fileinfo->getFilename() . "\n";
    }
}
Bitte ggf. ein Ticket dazu ergänzen/erstellen (ich komme nicht in den Issue-Tracker - sonst würde ich es selbst machen)
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Gesperrt