Test der neuen CONTENIDO-Version 4.9.13

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Oldperl
Beiträge: 3991
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

PIM: Anzeige der Navigations-Einträge

Beitrag von Oldperl » Mo 9. Okt 2017, 15:31

Servus,

Bild

Die Anzeige der Einträge im Pluginmanager für die Menüpositionen ist etwas irritierend. Die für mein ConRepo-Plugin vorhandenen Einträge zum Plugin-Manager Sub-Menü werde als Menüeinträge im Hauptmenü Administration angezeigt. Hier sollte man eventuell noch die Area auswerten um die Positionen korrekt anzuzeigen.

Gruß aus Franken

Ortwin
Dateianhänge
_CONTENIDO_4.9.13_local.dceserver.de_concom_con49_contenido_-_2017-10-09_16.23.26.jpg
(107.54 KiB) Noch nie heruntergeladen
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

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

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von frederic.schneider_4fb » Mo 9. Okt 2017, 15:42

Danke Dir! Mir ist vorhin auch aufgefallen, dass z. B. bei manchen Plugins gar kein Menüpunkt angezeigt wird, obwohl vorhanden. Ich nehme Deinen Punkt dann mit auf, möglicherweise hängt das sogar zusammen!
Frederic Schneider
Entwickler bei der four for business AG

Oldperl
Beiträge: 3991
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von Oldperl » Mo 9. Okt 2017, 16:14

Servus,
frederic.schneider_4fb hat geschrieben:
Mo 9. Okt 2017, 15:42
Danke Dir! Mir ist vorhin auch aufgefallen, dass z. B. bei manchen Plugins gar kein Menüpunkt angezeigt wird, obwohl vorhanden.
Gerne! Eventuell sollte man wirklich unterscheiden zwischen Hauptmenü-Einträgen und Sub-Menü Einträgen, wobei es bei Sub-Menü ja auch noch 2 Varianten gibt.
Btw, weil wir gerade von aufgefallen reden. Eventuell sollte man alle Plugins nochmal auf die Verwendung der Standard-Submenüs optimieren, oder zumindest insofern ergänzen, das man sich per Plugin einklinken kann. Das ist leider nicht bei allen Core-Plugins gegeben.

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

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

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von frederic.schneider_4fb » Do 12. Okt 2017, 09:33

Oldperl hat geschrieben:
Fr 6. Okt 2017, 08:13
Servus,

Datei contenido/includes/pseudo-cron.inc.php (Zeile 214 ff) die Funktion lTrimZeros($number) durch folgendes ersetzen:

Code: Alles auswählen

/**
 *
 * @param int $number
 * @return string
 */
function lTrimZeros($number) {
    while ($number[0] == '0') {
        $number = cString::getPartOfString($number, 1);
    }
    if(empty($number)) {
        $number = 0;
    }
    return (int) $number;
}
Die Funktion soll eine Null zu Beginn des übergebenen Wertes entfernen. Das Resultat wird in der folgenden Funktion parseElement() zur Schleifenberechnung verwendet, und muss daher zwingend numerisch sein. Eine leere Variable oder alles andere als eine Zahl führt zur Fehlermeldung.

Gruß aus Franken

Ortwin
Ist übernommen. Danke nochmal!
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: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von frederic.schneider_4fb » Do 12. Okt 2017, 09:35

Oldperl hat geschrieben:
Mo 9. Okt 2017, 16:14
Servus,
frederic.schneider_4fb hat geschrieben:
Mo 9. Okt 2017, 15:42
Danke Dir! Mir ist vorhin auch aufgefallen, dass z. B. bei manchen Plugins gar kein Menüpunkt angezeigt wird, obwohl vorhanden.
Gerne! Eventuell sollte man wirklich unterscheiden zwischen Hauptmenü-Einträgen und Sub-Menü Einträgen, wobei es bei Sub-Menü ja auch noch 2 Varianten gibt.
Ich habe jetzt ein Update der Funktionalität gemacht. Bitte mal nach einem git pull testen, ob das bei Deinen Plugins besser klappt. Es gab einen Fehler. Bzgl. Deiner zweiten Anregung habe ich mir das mal vorgemarkt als Aufgabe.
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: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von frederic.schneider_4fb » Do 19. Okt 2017, 10:10

Wer CONTENIDO 4.9.13 via Git testet, möge bitte hier drauf achten:
https://forum.contenido.org/viewtopic.p ... 74#p173674

Ich würde mich sehr freuen, wenn das mit getestet wird.
Frederic Schneider
Entwickler bei der four for business AG

Oldperl
Beiträge: 3991
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

CEC addChainFunction und Exception

Beitrag von Oldperl » Do 26. Okt 2017, 15:08

Servus,

mit der Methode addChainFunction() der CecRegistry kann ich auf Chains von Contenido zugreifen und diese mit eigenen Funktionalitäten abarbeiten. Laut DocBlock
/**
* Adds a chain function which is to invoke.
*
* @param string $sChainName
* Chain name
* @param string $sFunctionName
* Name of function/callback to invoke.
* Feasible values are:
* - "ClassName->methodName" to invoke a method of a ClassName
* instance.
* A instance of the clas will be created here.
* - "ClassName::methodName" to invoke a static method of ClassName.
* - "FunctionName" to invoke a function.
* NOTE: Necessary files must be manually included before or by
* defined autoloader.
* @throws cInvalidArgumentException
* if the given chain is not registered or the given callback is not callable
* @return bool
* True on success, otherwise false
*/
public function addChainFunction($sChainName, $sFunctionName)
soll die Methode eine Exception bei auftretenden Fehler werfen. Dies tut sie aber nur für alle Fälle, die die eigene Funktion ($sFunctionName) betreffen. Ob es die registrierte Chain mit dem gegebenen Namen ($sChainName) jedoch gibt bleibt ungeprüft und wirft keine Ausnahme entgegen der Info im DocBlock.
Dies sollte man entsprechend der Doku ergänzen, da es mittlerweile keinerlei Funktion mehr dafür gibt, ob eine entsprechende Chain registriert ist. Nur dann kann man das mit einem try-catch prüfen und gegebenenfalls eine Meldung ausgegeben oder alternativen Code ausführen.

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Oldperl
Beiträge: 3991
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von Oldperl » Fr 27. Okt 2017, 06:57

Servus,

ich nochmal. :)

Habe mich nun nochmals ein wenig mehr in die neue Funktionalität der CEC und den Chains rein gefuchst. Nun ist mir auch klar warum es da keine Exception gibt. Die CeCRegistry verdient an der Stelle eigentlich ihren Namen nicht mehr, da sie keinerlei Info über vorhandene Chains zur Laufzeit hat. Mit dem neuen Contenido-Chainer wurde das geändert.
In 4.8 war es noch so, dass man neue Chains beim System anmelden musste. Diese wurden dann in einem Array der Klasse vorgehalten, und das System konnte bei Bedarf abfragen ob eine entsprechende Chain vorhanden ist, und wie, sprich mit welchem Parametern, sie zu nutzen ist.
Dies hat sich in 4.9 grundlegend geändert. Nicht der eigentliche Hook, die Chain, muss mehr registriert werden, dieser wird nur einfach an der gewünschten Stelle mit der gewünschten Funktionalität eingebaut. Registrieren müssen sich inzwischen die Funktionen (addChainFunction), welche auf eine Chain zugreifen. Vorteil, es bedarf keiner speziellen Registrierungs-Datei mehr, Nachteil, man kann eben auch nicht mehr auf das Vorhandensein einer Chain abfragen.

Stellt sich mir die Frage wie ihr es euch vorgestellt habt entsprechende Chains zu dokumentieren? Durch die nun fehlende, und in der Vergangenheit mit DocBlocks auch ausreichend dokumentierte, Einbindung per Datei, existiert weder eine Info welche Chains das aktuelle System zur Laufzeit kennt, noch welche Parameter man in seiner Funktion erhält und zurück geben muss.

Ich für meine Teil habe begonnen meine neuen Chains nun mit einem DocBlock zu dokumentieren
/**
* Chain Contenido.Pifa.FieldTypeNames, add more field type names
*
* @author Ortwin Pinke <info@php-backoffice.de>
* @since 4.9.13
*
* @param string $name name of chain
* @param array $array array with core field type names
* @return array array of field type names
*/
Da es sich bei diesen aber , beispielsweise per statischem Aufruf cApiCecHook::executeAndReturn() eingebunden, eigentlich nicht um eine Funktion oder Klassenmethode, sondern um deren Aufruf handelt, weiß ich nicht so recht, ob der DocBlock an der Stelle zum Einsatz kommen sollte, und wie er dann später bei der Api-Doku rüber kommt.
Frederic, es wäre schön mal zu erfahren, wie ihr euch das vorgestellt habt bzw. vorstellt.

Ach ja, ich arbeite gerade im Rahmen eines Projektes an der Erweiterung des Form Assistenten mit zusätzlichen Feldern. Dafür erweitere ich diesen mit entsprechenden CecHook-Einträgen. Gerne schicke ich Dir die gemachten Änderungen wenn ihr diese in den Core übernehmen wollt.

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Oldperl
Beiträge: 3991
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von Oldperl » Fr 27. Okt 2017, 14:22

Servus,

nächster Bug in der Klasse cApiCecHook
/**
* Method to execute registered functions for CONTENIDO Extension Chainer
* (CEC).
* Gets the desired CEC iterator and executes each registered chain
* function. You can pass as much parameters as you want. NOTE: the first
* param is interpeted as $chainName. NOTE: There is no restriction for
* number of passed parameter. NOTE: If no chain function is registered,
* $_defaultReturnValue will be returned.
*
* @return mixed
* Parameter changed/processed by chain functions.
*/
public static function executeAndReturn() {
Laut dem DocBlock soll die Methode im Falle nicht existierenden Chain Funktionen den in der Klassen-Variablen hinterlegten Default-Wert ($_defaultReturnValue) zurückgeben. Diesen kann man mit der Methode setDefaultReturnValue vorher setzen. Übergebe ich der Methode aber Parameter zur Verarbeitung, so liefert sie nicht den Default-Wert, sondern den 1. Parameter nach dem Chainnamen zurück.
Entweder ist da nur die Doku falsch, oder die Methode macht was Falsches.

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

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

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von frederic.schneider_4fb » Fr 27. Okt 2017, 14:38

Lieber Ortwin, wie schon im anderen Thema geschrieben: Rückmeldungen von mir erst nächste Woche, da ich Urlaub habe (Marathon). Vom Bauchgefühl tippe ich aber eher auf eine falsche Dokumentation. Aber das ist nur ein Bauchgefühl ;-).
Frederic Schneider
Entwickler bei der four for business AG

Oldperl
Beiträge: 3991
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von Oldperl » Fr 27. Okt 2017, 16:29

Servus,

alles gut Frederic, geh Du mal Joggen... :mrgreen:

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

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

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von frederic.schneider_4fb » Fr 27. Okt 2017, 18:08

Ich gebe mir Mühe :P
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: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von frederic.schneider_4fb » Mi 1. Nov 2017, 12:52

So. Der erste Schwung an Rückmeldungen:
Oldperl hat geschrieben:
Fr 27. Okt 2017, 06:57
Ach ja, ich arbeite gerade im Rahmen eines Projektes an der Erweiterung des Form Assistenten mit zusätzlichen Feldern. Dafür erweitere ich diesen mit entsprechenden CecHook-Einträgen. Gerne schicke ich Dir die gemachten Änderungen wenn ihr diese in den Core übernehmen wollt.
Sehr gerne! Du kannst es auch gerne, wenn Du einen Account in unserem Git hast, einchecken und ein Pull Request stellen. Dann prüfen wir das und übernehmen den Code.
Entweder ist da nur die Doku falsch, oder die Methode macht was Falsches.
Nachfrage: Der DocBlock-Abschnitt definiert doch lediglich, was passiert, wenn keine Chain-Funktion registriert wird. Über den Return-Wert, wenn Parameter übergeben werden, trifft der DocBlock keinerlei nähere Aussagen. Dass der erste Wert der Chain-Name ist, steht auch dabei: "NOTE: the first param is interpeted as $chainName." Wo erkennst Du dort eine fehlerhafte Dokumentation? Sprich: Was schlägst Du konkret vor, was wir verbessern sollten, damit man das besser versteht?
Frederic Schneider
Entwickler bei der four for business AG

Oldperl
Beiträge: 3991
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Franken, Bayern
Kontaktdaten:

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von Oldperl » Do 2. Nov 2017, 07:09

Servus,
frederic.schneider_4fb hat geschrieben:
Mi 1. Nov 2017, 12:52
Du kannst es auch gerne, wenn Du einen Account in unserem Git hast, einchecken und ein Pull Request stellen. Dann prüfen wir das und übernehmen den Code.
Vielen Dank für Dein Angebot. Dieses möchte ich aber momentan so nicht wahrnehmen. Ich hatte bereits einmal alle Zugänge, diese wurden mir aber damals einfach, ohne vorherige Ankündigung, gesperrt. Das möchte ich nicht nochmal erleben.
Daher werde ich, wenn ich soweit bin, das geänderte Plugin zur freien Verwendung hier im Forum einstellen. Wenn ihr meine Sachen übernehmt würde es mich freuen.
frederic.schneider_4fb hat geschrieben:
Mi 1. Nov 2017, 12:52
Nachfrage: Der DocBlock-Abschnitt definiert doch lediglich, was passiert, wenn keine Chain-Funktion registriert wird. Über den Return-Wert, wenn Parameter übergeben werden, trifft der DocBlock keinerlei nähere Aussagen.
Oldperl hat geschrieben:
Fr 27. Okt 2017, 14:22
/**
* Method to execute registered functions for CONTENIDO Extension Chainer
* (CEC).
* Gets the desired CEC iterator and executes each registered chain
* function. You can pass as much parameters as you want. NOTE: the first
* param is interpeted as $chainName. NOTE: There is no restriction for
* number of passed parameter. NOTE: If no chain function is registered,
* $_defaultReturnValue will be returned.
*
* @return mixed
* Parameter changed/processed by chain functions.
*/
public static function executeAndReturn() {
Laut dem DocBlock soll die Methode im Falle nicht existierenden Chain Funktionen den in der Klassen-Variablen hinterlegten Default-Wert ($_defaultReturnValue) zurückgeben.
Dann mal ein kurzes Beispiel, zum besseren Verständnis. Ich habe die Klasse PifaField bzw. deren Methode _getElemScript mit einem CecHook-Eintrag erweitert

Code: Alles auswählen

switch ($fieldType) {
            case self::DATEPICKER:
                $sel = '#pifa-field-elm-' . $idfield;
                // dateFormat: 'yy-mm-dd', // could be different
                // altFormat as ISO_8601
                $script = "if (typeof jQuery == \"function\") {
                	jQuery(function(){ jQuery('$sel').datepicker({
                    	altFormat: 'yy-mm-dd',
                    	altField: '$sel-hidden'
                	});});
                }";
                break;
            // case self::CAPTCHA:
            // $sel = '#pifa-field-' . $idfield . ' label';
            // $newCaptchaCode = mi18n("NEW_CAPTCHA_CODE");
            // $script = "jQuery(function(){\n";
            // // implement captcha reload on click
            // $script .= "jQuery('$sel').click(function (e) {\n";
            // $script .= "e.preventDefault();\n";
            // $script .= "var url = 'front_content.php?securimage&' +
            // Math.random();\n";
            // $script .= "jQuery(this).parent().find('img').attr('src',
            // url);\n";
            // $script .= "});\n";
            // // append 'New Captcha Code' to label
            // $script .= "jQuery('$sel').append('<br/><br/><span
            // style=\"cursor:pointer\">$newCaptchaCode</span>');";
            // $script .= "});\n";
            // break;
            default:
                $script = cApiCecHook::executeAndReturn("Contenido.Pifa.GetElemScript", $fieldType, $idfield);
                if ($script == $fieldType) {
                    $script = "";
                }
Dort übergebe ich neben dem Chain-Namen die Parameter des FeldTyps und der FeldId. Laut Doku soll nun, da ja bisher keine auf diese Chain zugreifende Funktion definiert ist, der in der Klasse definierte Wert

Code: Alles auswählen

/**
     * Temporaly stored default return value of CEC functions
     *
     * @var mixed
     */
    private static $_defaultReturnValue = NULL;
als Returnwert zurück gegeben werden. Diesen kann ich bei Bedarf über die statische Klassenmethode cApiCecHook::setDefaultReturnValue auch wie gewünscht verändern.
Hier ist aber entweder die Doku falsch, oder aber, was ich als Bug ansehe, die Klassenmethode. Denn diese liefert, egal ob ich eine Funktion registriert habe

Code: Alles auswählen

cRegistry::getCecRegistry()->addChainFunction('Contenido.Pifa.EditElemScript', 'phpboEditElemScript');
oder nicht, den Wert des 1. Parameters nach dem Chain-Namen zurück

Code: Alles auswählen

if (isset($args[$pos])) {
    $return = $args[$pos];
}
Um dieses Verhalten korrekt zu dokumentieren müsste es in der Doku heissen
Die Methode liefert, unabhängig von einer registrierten Chain-Funktion, den 1. zusätzlichen Parameter der Chain zurück. Sofern dieser nicht vorhanden oder nicht gesetzt ist wird der Wert aus $_defaultReturnValue zurück gegeben.
Möchte man die momentan vorhandene Doku richtig umsetzen, so müsste man die Rückgabe des Parameters abhängig vom Vorhandensein einer eingetragenen Chain-Funktion machen und ansonsten den Default-Wert zurückgeben.

Gruß aus Franken

Ortwin
*NEU* PHP 7.x Community Draft von CONTENIDO 4.9 auf github
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

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

Re: Test der neuen CONTENIDO-Version 4.9.13

Beitrag von frederic.schneider_4fb » Do 9. Nov 2017, 09:52

Okay, danke für Deine Erläuterungen. Verstanden und nachvollzogen ;-). Was sich der damalige Entwickler dabei gedacht hat, kann ich Dir nicht mehr sagen, da dieser nicht mehr im Hause arbeitet. Ich werde mich bei Dir persönlich noch einmal melden (siehe PN von letzter Woche) und dann können wir gemeinsam überlegen, ob wir das aktuelle Verhalten der Doku anpassen oder die Doku dem aktuellen Verhalten. Je nachdem, was sinnvoller ist.
Frederic Schneider
Entwickler bei der four for business AG

Antworten