frdl / frdl-oidplus-wtf-plugin

Shimmy shimmy WTF functions polyfill
MIT License
0 stars 0 forks source link

OOBE problem #2

Open danielmarschall opened 1 week ago

danielmarschall commented 1 week ago

I'm about to try to understand how this plugin works.

I think it would be good if you could add a small example plugin. Just a plugin which offers a page that outputs "hello world". This way, we can see how such a "plugin.php" needs to look like.

wehowski commented 1 week ago

Here is another gist: https://gist.github.com/wehowski/d16a4ce9cdeb5da1e90f9a7b28b6ffdb#file-plugin-php You can watch examples and source code in weid.info/plus/ More examples and plugins will follow...

This is an older example of how you can implement the do_action system/use it in OIDplus core: https://github.com/frdl/oidplus-frdljs-cdn-proxy-plugin/blob/5501bbda3ae99f379dd8f75a06df43160c4feaa9/OIDplusCDNProxyPagePlugin.class.php#L757

I would suggest to NOT put an hello world example to the wtf plugin as this just should provide the system and output nothing as other user do not want such an output, better would be to develop seperate example plugins.

Some examples are are not visible yet as they are in tenants userdata, but I will publish it later or send you the code or give you access...

danielmarschall commented 1 week ago

I tried to test the WTF plugin, but it does not work.

I did the following to my current dev machine:

  1. I cloned this github to plugins/frdl/adminPages/frdl-oidplus-wtf-plugin
  2. I created userdata/plugins/test/plugin.php with the contents of frdl-oidplus-wtf-plugin

Now, I get:

OIDplus Error
Too few arguments to function Frdlweb\OIDplus\Plugins\AdminPages\WTFunctions\OIDplusPageWTFunctions::Frdlweb\OIDplus\CustomMenu\plugin\{closure}(), 0 passed and exactly 1 expected
Technical information about the problem:

ArgumentCountError
at file .../userdata/plugins/test/plugin.php (line 114)

Stacktrace:
#0 [internal function]: Frdlweb\OIDplus\Plugins\AdminPages\WTFunctions\OIDplusPageWTFunctions->Frdlweb\OIDplus\CustomMenu\plugin\{closure}()
#1 .../plugins/frdl/adminPages/frdl-oidplus-wtf-plugin/OIDplusPageWTFunctions.class.php(140): call_user_func()
#2 .../includes/classes/OIDplus.class.php(1363): Frdlweb\OIDplus\Plugins\AdminPages\WTFunctions\OIDplusPageWTFunctions->init()
#3 .../index.php(31): ViaThinkSoft\OIDplus\Core\OIDplus::init()
#4 {main}
wehowski commented 1 week ago

Das ist eigentlich nur ein Beispiel, was die IO4 autoloaded Klassen benötigt, wenn Du das ohne verwendest probiere mal entweder den Parameter zu entfernen:

return (function(){

});

Oder die Funktion zu löschen!?!

wehowski commented 1 week ago

Alternativ könntest Du bestimmte OIDplus Variablen als Parameter übergeben bei call_user_func() , die müssten dann aber vorher festgelegt werden, das autowire und ParameterResolver funktioniert nur mit dem php-di/invoker vom IO4 container.

wehowski commented 1 week ago

Wenn Du IO4 nicht verwendest solltet Du entsprechend abändern:

    $json =$oidplus_public_pages_tree_json;
        $Array = (new \Wehowski\Helpers\ArrayHelper($json)) ;

        $Array
            ->after(1)
            ->add(
//...

stattdessen ohne die Helper Klasse:

$oidplus_public_pages_tree_json[]= ...
danielmarschall commented 1 week ago

Ich bin etwas irritiert. Ich möchte doch einfach nur wissen, wie man ein Plugin installiert Wenn nicht mal ich das kapiere, wie soll das ein OIDplus Anfänger verstehen? :-)

Also, ich brauche einfach mal ein kleines Minimal-Beispiel, was aufzeigt, was wie so ein "Wordpress" plugin aufgebaut ist. Wie installiere ich sowas? Was kann so ein plugin?

danielmarschall commented 1 week ago

Außerdem, wenn du ein Example postest, und man es eins-zu-eins copy-pasted, dann darf kein Fehler kommen. Das ist eine sehr schlechte OOBE (Out-Of-Box-Experience)! Entweder es soll auf Anhieb funktionieren, oder im Falle eines Anwenderfehlers (z.B. eine Dependeny nicht installiert), dann soll eine verständliche Fehlermeldung für den Anwender kommen. Aber einfach mit einer PHP-Fehlermeldung abstürzen ist nix gut :-)

wehowski commented 1 week ago

Ich weiß nicht warum das Plugin abstürzt!? Werde noch weitere hinzufügen. Habe Dir auch eins per E-Mail geschickt. In den Plugins io4, cdn, wtf im .zip sind Plugin Beispiele die funktionieren: https://registry.frdl.de/frdl-plugins.zip Was die Plugins machen hängt auch von der Implementation ab, habe Dir oben verlinkt: https://github.com/frdl/oidplus-frdljs-cdn-proxy-plugin/blob/5501bbda3ae99f379dd8f75a06df43160c4feaa9/OIDplusCDNProxyPagePlugin.class.php#L757 tree und gui Beispiel, ist aber veraltet, der aktuelle Code ist im .zip Package. Ein weiteres Beispiel sind die Shortcodes, dafür gibt es erst ein Verwendungsbeispiel: https://github.com/frdl/oidplus-io4-bridge-plugin/blob/aba3e297f35b19e0f919b0f2e5a1eedae6006046/OIDplusPagePublicIO4.class.php#L253 Die anderen Beispiele fügen Links zur Navigation und Hooks zur gui Methode.

wehowski commented 1 week ago

Ich habe das Plugin welches so funktioniert hat in ein gist gehackt als Code Beispiel, es ist keine "Out-Of-Box-Experience". Du könntest mal unten die add_action auskommentieren welche fremde Klassen verwenden, vl. hilft das?

wehowski commented 1 week ago

Die bisher verwendeten Funktionen sind

do_action Aufrufe solltest Du dann ggf. im OIDplus Core oder in z.b. core Plugins verwenden. add_action/add_shortcode die Plugins/userdata/tenant Plugins. do_shortcodes ist für diese uri/cms Erweiterung gedacht, kann aber an jeder anderen Stelle auch Verwendung finden!?!

wehowski commented 1 week ago

Schau mal bitte, gibt es hier einen Fehler? https://github.com/frdl/frdl-oidplus-wtf-plugin/blob/main/OIDplusPageWTFunctions.class.php#L60 Ich bin mir nicht über die Parameter sicher, teste das aber nachher noch ggf....

danielmarschall commented 1 week ago

Hallo Till,

es tut mir leid, aber ich bin total verwirrt :-( Ich habe noch gar keine Ahnung mit allem, und versuche rauszufinden, wie es funktioniert. Ich habe keine Ahnung was Shortcodes sind, und was ich machen muss. Es ist grad zu viel Input für mich, du musst mir eines nach dem anderen erklären und mir Beispiele geben, ELI5 Level.

Nochmal zurück zu dem ursprünglichen Plugin Fehler.

Der Fehler kommt hier:

return (function($container){ //print_r(get_class($container)); });

Grund ist, dass $container gar nicht definiert ist. Ich habe keine Ahnung was dieser Code überhaupt machen soll.

Habe diesen Code nun auskommentiert, nun lädt OIDplus. Aber ich sehe nicht dass irgendwas "hinzugekommen" ist. Ich habe jetzt also dieses user-plugin installiert, aber ich sehe und fühle nix. Was macht es?

danielmarschall commented 1 week ago

Ich habe jetzt mal das plugin.php von der E-Mail von vorhin verwendet. Auch dort kommt wieder return (function($container){ vor, obwohl $container im kompletten Code nirgends definiert wird. Ich habe es jetzt abgeändert in return (function(){. Aber ich sehe einfach nix. Das System sieht genau so aus wie vorher. ich kann keine veränderung sehen, keine neuen menüeinträge nix.

Bin im Moment etwas frustriert und überfordert. Ich kapier es nicht und es funktioniert bei mir nix. :-(

Wenn es auf meinem Server nicht so kompliziert wäre, einen FTP account einzurichten, hätte ich am liebsten dir FTP zugriff gegeben, sodass du mein system mal so einrichten kannst, dass man etwas sehen kann, wie dein WTF plugin funktioniert.

wehowski commented 1 week ago

Durch das wtfp Plugin alleine siehst Du nichts, das gist soll zwei Links hinzufügen...

Das soll Links hinzufügen

add_action(
        'oidplus_public_pages_tree',
        __NAMESPACE__.'\CustomMenu_plugin_public_pages_tree',
        0//,
        //string $include_path = null,
    );

return (function($container){ //print_r(get_class($container)); });

Siehe: https://github.com/frdl/frdl-oidplus-wtf-plugin/issues/2#issuecomment-2335305512

Du kannst entweder

Der Code registriert die Funktion die kurz darüber im Code steht. Schau mal hier die gui Methode an: https://github.com/frdl/frdl-oidplus-wtf-plugin/blob/4ac74d1f62be55bd4a8a6df23f3286e6167ac0a1/OIDplusPageWTFunctions.class.php#L33 und entsprechend hier die aufgerufene Funktion: https://gist.github.com/wehowski/d16a4ce9cdeb5da1e90f9a7b28b6ffdb#file-plugin-php-L68

Hilft das etwas weiter?

Wenn es auf meinem Server nicht so kompliziert wäre, einen FTP account einzurichten, hätte ich am liebsten dir FTP zugriff gegeben, sodass du mein system mal so einrichten kannst, dass man etwas sehen kann, wie dein WTF plugin funktioniert. Du hast doch den vollen FTP Zugriff auf weid.info, da sind doch so gut wie alle Beispiele im Einsatz und Du kannst dort auch testen?

Viele Grüße Melanie

wehowski commented 1 week ago

Test (siehe oben, Funktions-Argumente) funktioniert bei mir!?

danielmarschall commented 1 week ago

Durch das wtfp Plugin alleine siehst Du nichts, das gist soll zwei Links hinzufügen...

Mit Links meinst du links bei "Documents and Resources" sind hyperlinks? Nein, da ist nix hinzugekommen.

Ich verstehe gerade nicht, wenn man "nichts sieht", was exakt macht das Plugin? Wofür sind Wordpress Plugins da? Was ist deren Verwendungszweck? Ich steh irgendwie auf dem Schlauch.

  • Hast Du IO4 installiert, wenn nein siehe oben?

Nein. Ich habe ein vanilla System, auf dem ich nur WTF und dieses plugin.php installiert habe.

Die Sache ist die: Ich möchte deine Arbeit ja gerne würdigen in dem ich den Code teste, dir Feedback gebe, und anschließend in den Core bündel, sodass alle OIDplus Nutzer dein Plugin nutzen können, denn ich denke in deinen Erfindungen steckt viel Potential.

Aber dafür ist es wichtig, dass:

  1. Ich verstehe, was das Ding überhaupt macht (denn wenn ich es nicht verstehe, wie soll es ein Anfänger verstehen?). Ich bin generell nicht so gut aufnahmefähig, deshalb muss man es mir relativ einfach erklären, ELI5 "Explain like I'm 5", am besten mit einem Beispiel, sodass man auf einen Blick sehen kann "Aha, so sieht das aus", eben irgendein Hello World oder ähnliches.

  2. Es muss Out-Of-The-Box funktionieren und darf das System nicht zum Absturz bringen. Das ist der absolute Grundsatz von OIDplus.

  3. Es muss auch ohne IO4/Webfan funktionieren. Aus diesem Grund ist mein Developer-System ein vanilla-system, sodass ich ausschließen kann, dass Plugins untereinander Nebenwirkungen erzeugen.

Du hast doch den vollen FTP Zugriff auf weid.info, da sind doch so gut wie alle Beispiele im Einsatz und Du kannst dort auch testen?

Ich bin mir nicht sicher, wie weid.info im Moment mit Drittanbieter plugins "bestückt" ist. Wie gesagt, ich kann das Plugin erst bündeln, wenn es fehlerfrei läuft, ohne dass irgendwelche Bedingungen erfüllt sein müssen. Es ist möglich, dass weid.info Einstellungen hat, die nicht vanilla sind.

Ich denke das genau das hier gerade passiert: Ich habe Vanilla + WTF + Plugin installiert und bei mir kracht es, weil $container nicht deklariert ist. Bei dir kracht es nicht. Also musst du an irgendeiner Stelle $container definieren. Das ist möglicherweise in irgendeinem Webfan/IO4/XYZ plugin definiert. Würde ich jetzt WTF bündeln, ohne es an einem Vanilla-System getestet zu haben, würde das OIDplus-Update alle Systeme bricken.

wehowski commented 1 week ago

Wie schon gesagt mit Vanilla return (function( ){

}); Ohne Container ist die Lösung. Der function body ist unbestückt.

Mit Links meinst du links bei "Documents and Resources" sind hyperlinks? Nein, da ist nix hinzugekommen.

Nein! Siehe https://registry.frdl.de/?goto=oidplus%3Asystem Die oberen Links ZWISCHEN Whois und Objects sind alle durch diese Plugins erzeugt.

Ich bin mir nicht sicher, wie weid.info im Moment mit Drittanbieter plugins "bestückt" ist. Wie gesagt, ich kann das Plugin erst bündeln, wenn es fehlerfrei läuft, ohne dass irgendwelche Bedingungen erfüllt sein müssen. Es ist möglich, dass weid.info Einstellungen hat, die nicht vanilla sind.

Sie oben, invoker, container, usw.

ohne dass irgendwelche Bedingungen erfüllt sein müssen

Das kann doch sooo schwer nicht sein, das hier ist der bisher gesamte code: https://github.com/frdl/frdl-oidplus-wtf-plugin

Ich verstehe, was das Ding überhaupt macht (denn wenn ich es nicht verstehe, wie soll es ein Anfänger verstehen?)

Nur durch das wft Plugin siehst Du nichts und sollst Du auch nichts sehen. Anfänger müssen den Code nicht verstehen, erst recht nicht wenn er noch gar nicht released ist. Aber das hier sind z.B. 148 Zeilen und doch kein Hexenwerk https://github.com/frdl/frdl-oidplus-wtf-plugin/blob/main/OIDplusPageWTFunctions.class.php

Das ohne io4 das $container Argument das Problem scheint haben wir oben doch schon 2-3 mal festgestellt, sonst sehe ich im code https://github.com/frdl/frdl-oidplus-wtf-plugin nichts was noch irgendwie io4-mäßig stören könnte? Bitte korrigiere mich wenn ich was übersehen habe?

Die 4 benutzen Funktionen bisher habe ich oben beschrieben, tut mir leid muss das vielleicht noch besser dokumentieren?

Ansonsten ist was Du siehst halt nicht im wtf plugin sondern wie Du es halt in OIDplus core oder den Plugins, da müsstest Du ein bischen Kreativität oder eigene Vorschläge anbringen ggf. für do_action z.B. ist ein Plugin von mir vl. schlechter als ein Core Plugin!?!

Anfänger sehen auf allen weid.info und registry.frdl Seiten das Plugin im Einsatz (die Links und das wenn man draufklickt).

Wäre es vielleicht eine Hilfe auf weif.info eine Zweite Instanz zu weid.inof/plus/ anzulegen, nur halt ohne IO4? Du kannst das gerne tun, oder mir bescheid geben wenn ich das übernehmen soll?

Alternativ kannst Du direkt im weid.info/plus/ io4 löschen und bei Bedarf wieder installieren (ist ja nur eine .zip Datei)!?!

wehowski commented 1 week ago

Bitte entschuldige, ich dachte ich hätte das hier https://github.com/frdl/frdl-oidplus-wtf-plugin/issues/2#issuecomment-2335550367 schon in die readme eingefügt gehabt. Werde die Doku noch verbessern...

wehowski commented 1 week ago

Sorry @danielmarschall mein Fehler! Da hätte ich vielleicht drauf kommen müssen, ich glaube ich habe den Fehler gefunden. Das oder ähnliches fehlt in einem (Core- oder möglichst frühem) publicPage Plugin:

   public function gui(string $id, array &$out, bool &$handled): void {
       global $oidplus_public_pages_gui_id;
       global $oidplus_public_pages_gui_out;
       global $oidplus_public_pages_gui_handled;

          $oidplus_public_pages_gui_id = $id;
          $oidplus_public_pages_gui_out = $out;
          $oidplus_public_pages_gui_handled = $handled;
          if(!did_action('oidplus_public_pages_gui')){
              do_action('oidplus_public_pages_gui', $id);
          }
        $out = $oidplus_public_pages_gui_out;
        $handled = (bool)$oidplus_public_pages_gui_handled === true ? true : false;
     // unset($oidplus_public_pages_gui_out);    
      unset($oidplus_public_pages_gui_id);
    //  THIS BRFEAKS HOME NO !  unset($handled);       

         if('oidplus:home'===$id){

             $handled = true;
            // header('Location: '.OIDplus::webpath(null,OIDplus::PATH_ABSOLUTE_CANONICAL) );
            // $io4Plugin = OIDplus::getPluginByOid("1.3.6.1.4.1.37476.9000.108.19361.24196");
             $out['title'] =  OIDplus::config()->getValue('system_title');
        //   $out['text']  .= $io4Plugin->handle404('/');
             $homelink = OIDplus::webpath(null,OIDplus::PATH_ABSOLUTE_CANONICAL);
             $out['text']  .= '<a href="'.$homelink.'">'.$homelink.'</a>'
                 .sprintf('<meta http-equiv="refresh" content="0; URL=%s">', $homelink);

             $out['icon'] = '';

         }
     }

    public function tree(array &$json, string $ra_email=null, bool $nonjs=false, string $req_goto=''): bool {
       global $oidplus_public_pages_tree_json;

        if (file_exists(__DIR__ . '/treeicon.png')) {
            $tree_icon = OIDplus::webpath(__DIR__) . 'treeicon.png';
        } else {
            $tree_icon = null; // default icon (folder)
        }

        if(OIDplus::isTenant()){
            //$oidplus_public_pages_tree_json = &$json;
            $oidplus_public_pages_tree_json = $json;
        }else{
            $oidplus_public_pages_tree_json = $json;
        }

          if(!did_action('oidplus_public_pages_tree')){
              do_action('oidplus_public_pages_tree', $ra_email);
          }

        if(OIDplus::isTenant()){
            //$json = &$oidplus_public_pages_tree_json;
            $json =$oidplus_public_pages_tree_json;
        }else{
            $json =$oidplus_public_pages_tree_json;
        }

        //unset($oidplus_public_pages_tree_json);
        return true;
    }

Hier ist ein Beispiel im CDN Plugin des io4 plugins package: https://github.com/frdl/oidplus-frdljs-cdn-proxy-plugin/blob/main/OIDplusCDNProxyPagePlugin.class.php#L757

Das hier https://github.com/frdl/frdl-oidplus-wtf-plugin/blob/main/OIDplusPageWTFunctions.class.php#L70 ist ein adminPages Plugin. Kann es sein das Du deshalb nichts siehst?

Bitte entschuldige daran hatte ich nicht gedacht, das ausreichend klarzustellen, Du musst das noch ggf. implementieren: Das CDN ist aber auch nicht der perfekt Ort für do_action an der Stelle, perfekt wäre ein publicPages Core Plugin wahrscheinlich das welches als erstes aufgerufen wird?

danielmarschall commented 1 week ago

Hallo Melanie,

danke für die Klarstellungen. Ich denke ich habe jetzt verstanden, wo die Irritation lag, nämlich, haben wir hier das Wort "Plugin" nicht definiert. Ich dachte, deine Plugins wären so wie OIDplus Plugins, die also Menüpunkte bereitstellen oder ähnliches. Aber du meintest Plugins, die Content nachbearbeiten / Ersetzungen vornehmen etc.


So etwas ähnliches (d.h. Inhaltsersetzung) gibt es im Core bereits als Plugin, siehe https://github.com/danielmarschall/oidplus/blob/master/plugins/viathinksoft/publicPages/999_antispam_filter/OIDplusPagePublicAntiSpamFilter.class.php


Ich hätte da folgende, dringende Bitten:

  1. Bitte schreibe eine Readme.md in der du erklärst, was deine Lösung genau macht. Hätte ich gewusst, dass das ein "Inhalts-Ersetzungs-Plugin" ist, hätte es diese ganze Verwirrung meinerseits nicht gegeben.

  2. Bitte benenne das Verzeichnis "plugins" um. Es ist extrem verwirrend, dass "plugins/" für OIDplus-Plugins und "userdata/plugins/" für WTF-Plugins ist. Bitte nenne das Verzeichnis "userdata/wtf-plugins/" oder ähnlich. Dies gibt mir auch die Möglichkeit, "userdata/plugins/" in Zukunft vielleicht für ECHTE OIDplus Plugins zu verwenden. (siehe unten)

  3. Wenn du Änderungen / Voschläge am Core hast, bitte gibt mir einen Pullrequest, dann mache ich das gerne!

  4. Es wäre vielleicht gut, wenn du bei deinem Webspace ein OIDplus System einrichten kannst, dass 100% vanilla ist, auf dem du Plugins kurz antesten kannst. Es sollte immer nur ein Plugin gleichzeitig installiert sein, sodass man ausschließen kann, dass Plugins untereinenander Wechselwirkungen erzeugen.


Ich habe noch ein paar Fragen:

  1. Wieso ist dein WTF-Plugin ein "adminPages" plugin? Ich denke ein "publicPages" Plugin Typ wäre passender. "adminPages" soll es nur sein, wenn dahinter Admin-Funktionalitäten stehen. "publicPages" ist die richtige Wahl, auch wenn es ein "invisible" Plugin ist, so wie mein AntiSpam-Plugin-Beispiel oben.

  2. Ergänzend zu deinem WTF-Plugin, was hältst du eigentlich von der Idee, dass man richtige OIDplus-Plugins im userdata/tenant-Verzeichnis laufen lassen könnte? Der Plugin-Loader würde also nicht nur plugins/ scannen, sondern auch userdata/plugins/ und userdata/tenannt/xyz/* ?

danielmarschall commented 1 week ago

Zu meinem Verbesserungspunkt Nr. 1 ergänzend: Bitte schreibe ein einfaches Hello-World-Plugin das Beispielsweise [angebot name="Wurst" preis="2,50"] (das ist doch das was du mit "short code" meinst, oder?) zu "Wurst heute für 2,50 EUR" ersetzt. Anschließend verlinkst du dieses WTF-Plugin in deiner README, und schreibst dazu, dass das man [angebot name="Wurst" preis="2,50"] in einer OID-Description eingeben soll, und dann "Wurst heute für 2,50 EUR" erhält. Ich denke, das ist dann super verständlich.

-- Ich hoffe dass ich die Funktion von WTF einigermaßen wiedergeben konnte. Bitte entschuldige dass ich so extrem schlecht die Dinge begreife

wehowski commented 1 week ago

Hallo Daniel, nein bitte entschuldige mich, ich bin nicht gut im erklären und habe leider wirklich eine schlimme Sauklaue auch digital. Ich werde Deine obigen Punkte umsetzen!

Zu den Fragen: 1.: Ok, vielleicht ändere ich das. Ich glaube ich war davon ausgegangen das adminPlugins Priorität haben oder so? Der Verzeichnisname fängt mit 0000... an, ich denke je eher das wtf plugin geladen wird desto besser? Weil es ja eigentlich eine core Erweiterung ist? 2.: Die Unterscheidung ist eigentlich extra:

Vielleicht könnte man auch Plugins schreiben, die Code sowohl im regulären Plugins-Verzeichnis als auch im userdata-Verzeichnis haben (können)?!?

Hätte ich gewusst, dass das ein "Inhalts-Ersetzungs-Plugin" ist, hätte es diese ganze Verwirrung meinerseits nicht gegeben.

Das ist eigentlich noch nach oben offen, man könnte Plugins schreiben die verschiedenste hooks bedienen welche vom core oder anderen Plugins aufgerufen werden.

Viele Grüße Melanie

danielmarschall commented 1 week ago

Hallo Melanie,

zu den Plugins:

Nein, publicPages kommen zuerst, soweit ich weiß. Die adminPages werden eigentlich eher durch das Login-Public-Page iteriert, wenn ich mich recht entsinne.

Auf jeden Fall, wenn es früher initialisiert werden soll, dann eine kleine Nummer geben, also "publicPages/000..."


Echte OIDplus Plugins im Tenant machen sehr viel Sinn. So kann dann jeder Tenant seine eigenen Extrawürste bekommen, z.B. "userdata/tenant/xyz.example.com/plugins/xyz/design/raumschiffkonsole" oder irgendsoein kram.

Plugins im userdata/ verzeichnis, das ist Ansichtssache. Ich würde es der vollständigkeit halber machen, denn ein tenant Verzeichnis ist ja nix anderes als ein userdata verzeichnis pro Domäne.

Bzgl. Ansichtssache: "Userdata" ist/war immer so geplant, das alles was in "userdata" und "userdata_pub" ist, gehört dir, und alles andere gehört zum OIDplus Core. Somit kann man sein ganzes OIDplus "Neu installieren", in dem man einfach alles außer "userdata" und "userdata_pub" löscht und die Dateien neu einspielt. In sofern macht es sehr viel Sinn, eigene Plugins in "userdata/plugins" zu schreiben, und nicht in "plugins".

Ich probiere das mal, ich denke das ist ganz gut, wenn der Pluginloader in allen drei Orten nachschaut. Ich gebe dem Anwender damit die Chance, es so zu machen wie er/sie es am besten empfindet.

danielmarschall commented 1 week ago

Sorry, das ist jetzt echt Off-Topic geworden - aber noch ein abschließender Satz dazu: Aktuelles SVN Release 1579 erlaubt nun, dass Plugins in userdata_pub/plugins und userdata_pub/tenant/.../plugins sind. Es ist wichtig, dass es userdata_pub und nicht userdata ist, denn im Plugin-Verzeichnis können auch Bilder liegen, auf die der Browser zugreifen muss. Wir haben jetzt also eine sehr schöne Lösung, bei der man Plugins pro Tenant haben kann.

Aber nun wieder zurück zum eigentlichen Thema: WTF plugins. Hier also bitte den Ordner "wtf-plugins" o.ä. nehmen, aber nicht "plugins"

wehowski commented 1 week ago

Hallo @danielmarschall , bin dabei Deine Punkte umzusetzen https://github.com/frdl/frdl-oidplus-wtf-plugin und bin fast so gut wie durch. Das hello-world plugin füge ich nachher abschließend zuletzt hinzu.

Es gibt allerdings einen Punkt wo das OIDplus nicht "out-of-the-box" funktioniert ;-) Habe hier https://oidplus.com/download.php das Archiv runtergeladen, aber untenstehende Meldung erscheint immer im letzten Schritt der Installation. Habe sowohl die Datei als auch in der DB den Key gelöscht, aber es tut sich nix. Kannst Du mal bitte schauen, wenn Du Zeit hast? Danke! Die Installation liegt in test.weid.info in im weid.info Account.

Viele Grüße Melanie

OIDplus Error The Private/Public key-pair is broken or cannot be decrypted! Please check if the file /var/www/vhosts/weid.info/test.weid.info/httpdocs/public/userdata/secret/privkey_secret_207310503.php is existing and OK! In case this file is missing or corrupted and cannot be recovered, you need to reset your private/public key-pair. Do so by removing the settings oidplus_public_key and oidplus_private_key in the OIDplus configuration table in the database. This will invoke a regeneration of the private/public key-pair (you will receive a new system ID). Technical information about the problem:

ViaThinkSoft\OIDplus\Core\OIDplusException at file .../includes/classes/OIDplus.class.php (line 1886)

Stacktrace:

0 .../includes/classes/OIDplus.class.php(1354): ViaThinkSoft\OIDplus\Core\OIDplus::getPkiStatus()

1 .../index.php(32): ViaThinkSoft\OIDplus\Core\OIDplus::init()

2 {main}

danielmarschall commented 1 week ago

Oh, das ist echt scheiße. Hoffentlich hab ich keine "Neukunden" verloren, dadurch dass das Ding sich nicht installieren ließ. Der Bug ist wohl eingeführt worden, als die reg2 Thematik gefixt wurde. Habe deine Installation erstmal per Hand gefixt und werde jetzt schauen, dass ich dringend einen Hotfix veröffentliche

wehowski commented 1 week ago

Hallo @danielmarschall hier ist das OOCB Example (habe das gist aktualisiert): https://gist.github.com/wehowski/d16a4ce9cdeb5da1e90f9a7b28b6ffdb#file-plugin-php

Hier ist es online: https://test.weid.info/?goto=oidplus%3Ahello_world


Anderes Thema zum Thema: Schau Dir mal diesen Kommentar an: https://github.com/frdl/frdl-oidplus-wtf-plugin/blob/39e865833ab8eb477b1adb25a97c23f12fe7c4ac/OIDplusPageWTFunctions.class.php#L81 D.h. es müsste noch ein entsprechendes adminPages Plugin zusätzlich her, oder eine Implementation im core code.

Das neue/wtf Plugin System hat den Vorteil das ein Plugin dann hooks für, sowohl publicPages als auch adminPages und auch weitere Plugin Typen, die do_action implementieren, registrieren kann.

Viele Grüße Melanie

wehowski commented 1 week ago

Hallo @danielmarschall

(das ist doch das was du mit "short code" meinst, oder?)

Ja, habe ein Beispiel mit shortcode hinzugefügt. Ein besseres Beispiel ist aber die Funktion https://github.com/frdl/oidplus-io4-bridge-plugin/blob/main/OIDplusPagePublicIO4.class.php#L221 objectCMSPage da sie die description eines Objects, also user generated content verarbeitet.

Und für user generated content ist die Funktion eigentlich gedacht, als ein Verwendungsbeispiel, bzw. für Widgets usw... .

Viele Grüße Melanie

wehowski commented 1 week ago

Sorry, Link vergessen: https://gist.github.com/wehowski/d16a4ce9cdeb5da1e90f9a7b28b6ffdb#file-hello-world-php

wehowski commented 1 week ago

Da war noch ein HTML Fehler den ich korrigiert habe:

<p> wurde nicht abgeschlossen </p>