Plugin Updates

 
Fragz
koffeeinsuechtiger coding freak
Avatar
Geschlecht:
Herkunft: Neuss
Alter: 38
Homepage: fragz.de
Beiträge: 2217
Dabei seit: 03 / 2008
Betreff:

Plugin Updates

 · 
Gepostet: 27.10.2013 - 16:56 Uhr  ·  #1
Hi Chris,

ich habe da mal ein Problem mit dem Plugin Updater.
Installierte Version meiner Knowledge Base 1.5.0 welches auf 1.6.0 aktualisiert werden soll.
Im Adminbereich meldet er auch das es aktualisiert worden ist, aber die Befehle wurden nicht ausgeführt.

Code
public function module_update($old_version = '')
    {
        global $DB, $ACP;
        switch ( $old_version )
        {
      case '1.1.0':
      
      case '1.2.0':
      
            case '1.3.0':
                
      case '1.4.0':
      
      case '1.5.0':
      
      $DB->set_sql('UPDATE ' . KBBASE_CONFIG . ' SET `value` = \'1.5.0\' WHERE `name` = \'version\'');
      $DB->execute();
      $DB->free();
      
      case '1.6.0':
      
      $DB->set_sql('UPDATE ' . KBBASE_CONFIG . ' SET `value` = \'1.6.0\' WHERE `name` = \'version\'');
      $DB->execute();
      $DB->free();
      
      $DB->set_sql('ALTER TABLE ' . KBBASE_POST . ' ADD `post_tags` text NOT NULL;');
      $DB->execute();
      $DB->free();
      
      $DB->set_sql('INSERT INTO ' . KBBASE_CONFIG . ' (`name`, `value`) VALUES (\'tags_activ\', \'1\')');
      $DB->execute();
      $DB->free();  
        }
    } 


Den Punkt case '1.6.0': hat er Ignoriert. Kannst du dir das erklären?
cback
Admin
Avatar
Geschlecht:
Herkunft: Saarland
Alter: 38
Homepage: cback.net
Beiträge: 17612
Dabei seit: 12 / 2003
Betreff:

Re: Plugin Updates

 · 
Gepostet: 28.10.2013 - 13:41 Uhr  ·  #2
Huhu,

wenn ich das richtig verstehe möchtest Du die 1.5.0 auf 1.6.0 aktualisieren richtig? Also sprich die Version 1.6.0 liegt erst nach dem Update vor oder? Die Updateroutine nimmt als Ausgangspunkt allerdings die bisherige Version beim Anwender. So ist es auch möglich eben mehrere Versionsschritte korrekt zu aktualisieren wenn man mal ein Update verpasst hat.

Du müsstest also die Querys nicht für die Zielversion festlegen sondern immer jeweils für die vorherige. Wenn Du also die Schritte die Du jetzt bei case '1.6.0' hast für ein Update von 1.5.0 auf 1.6.0 benötigst, dann müssten sie unter case '1.5.0' kommen.

LG,
Chris
Fragz
koffeeinsuechtiger coding freak
Avatar
Geschlecht:
Herkunft: Neuss
Alter: 38
Homepage: fragz.de
Beiträge: 2217
Dabei seit: 03 / 2008
Betreff:

Re: Plugin Updates

 · 
Gepostet: 28.10.2013 - 13:48 Uhr  ·  #3
Ah ich verstehe, ein Update von 1.5.0 auf 1.6.0 erfodert die Anweisungen in dem case 1.5.0 Block.
Später mal für ein Update von 1.6.0 auf 1.7.0 müssen die Anweisungen in case 1.6.0 rein.

Hattest du ja hier vor kurzem erst beschrieben topic.php?p=158682#real158682
Ich sollte mehr Kaffee trinken

EDIT:
Habe es nun angepasst, ohne Erfolg

Code
case '1.4.0':
      
        $DB->set_sql('UPDATE ' . KBBASE_CONFIG . ' SET `value` = \'1.5.0\' WHERE `name` = \'version\'');
        $DB->execute();
        $DB->free();
      
      case '1.5.0':

        $DB->set_sql('UPDATE ' . KBBASE_CONFIG . ' SET `value` = \'1.6.0\' WHERE `name` = \'version\'');
        $DB->execute();
        $DB->free();
        
        $DB->set_sql('ALTER TABLE ' . KBBASE_POST . ' ADD `post_tags` text NOT NULL;');
        $DB->execute();
        $DB->free();
        
        $DB->set_sql('INSERT INTO ' . KBBASE_CONFIG . ' (`name`, `value`) VALUES (\'tags_activ\', \'1\')');
        $DB->execute();
        $DB->free();


Er führt bei einem Update die SQL Anweisungen nicht aus.
cback
Admin
Avatar
Geschlecht:
Herkunft: Saarland
Alter: 38
Homepage: cback.net
Beiträge: 17612
Dabei seit: 12 / 2003
Betreff:

Re: Plugin Updates

 · 
Gepostet: 29.10.2013 - 12:10 Uhr  ·  #4
Huhu,

die Anpassung ist richtig verstanden.

Warum er es immer noch nicht ausführt kann vermutlich nur noch davon kommen, dass Du in der package_info bei dem Forum bei dem Du das Update versuchen möchtest bereits die neue Versionsnummer eingetragen hast, nicht die bisherige, kann das sein? Vielleicht wurde bei dem ersten Fehlversuch auch schon die Datei eben ausgetauscht (wenn er in der Updateroutine keine Queries findet tauscht er trotzdem die Plugindaten aus. Es kann ja sein, dass sich eben nur eine Datei geändert hat).

Entsprechend kriegt er jetzt als "old version" schon ein 1.6.0 gemeldet.

LG,
Chris
Fragz
koffeeinsuechtiger coding freak
Avatar
Geschlecht:
Herkunft: Neuss
Alter: 38
Homepage: fragz.de
Beiträge: 2217
Dabei seit: 03 / 2008
Betreff:

Re: Plugin Updates

 · 
Gepostet: 29.10.2013 - 12:13 Uhr  ·  #5
Hi Chris,

dies ist leider nicht der Fall.
Als Basis wird immer die letzte Öffentliche Version genommen.
Auch bei dem Testend er Updates wird die letzte eingespielt und dann erst das Update durch geführt.
In der alten Version ist die 1.5.0 vorhanden, in der neuen die 1.6.0
cback
Admin
Avatar
Geschlecht:
Herkunft: Saarland
Alter: 38
Homepage: cback.net
Beiträge: 17612
Dabei seit: 12 / 2003
Betreff:

Re: Plugin Updates

 · 
Gepostet: 29.10.2013 - 12:20 Uhr  ·  #6
Hm okay,

weil er ja nicht den Wert aus der DB nimmt den Du aktualisierst sondern eben sich nur auf die package_info.php verlassen kann (das ist auch der Wert den er bei den Plugindateien immer im ACP anzeigt als "aktuelle Version").

Wo werden denn Deine eigenen Tabellekonstanten definiert? Ist das in der selben Datei (package_setup.php) der Fall?

Ansonsten fällt mir da nichts mehr ein was es noch sein könnte. Schreibrechte hast Du ja lokal eh. Und die Routine führt sich auch definitiv aus wenn man Updated. Im Zweifelsfall kannst Du nur PREFIX als Tabellenprefixkonstante benutzen und Deine eigenen Tabellenname im String dahinter anhängen. PREFIX.'forum' zum beispiel.

LG,
Chris
Fragz
koffeeinsuechtiger coding freak
Avatar
Geschlecht:
Herkunft: Neuss
Alter: 38
Homepage: fragz.de
Beiträge: 2217
Dabei seit: 03 / 2008
Betreff:

Re: Plugin Updates

 · 
Gepostet: 29.10.2013 - 12:46 Uhr  ·  #7
Genau, diese werden auch in der package_setup.php definiert unzwar global, vor der class

Code
define('KBBASE_CONFIG',      PREFIX . 'kb_config');
define('KBBASE_CAT',      PREFIX . 'kb_cat');
define('KBBASE_POST',      PREFIX . 'kb_post');
define('KBBASE_GROUP_ACTIV',  PREFIX . 'kb_group_activ');



// Klassenname = Name des Ordners. Bitte nur Buchstaben, Zahlen und Unterstrich nutzen!
class fragz_kbbase


Das ACP kann darauf zurückgreifen, also denke ich nicht das es da ausgerchnet beim Update hängt.
Ich habe das ganze mal durch PREFIX.'forum' ersezt und werde es gleich testen.

EDIT:
Leider nicht. Dann werde ich wohl eine update.php mit bei fügen.
cback
Admin
Avatar
Geschlecht:
Herkunft: Saarland
Alter: 38
Homepage: cback.net
Beiträge: 17612
Dabei seit: 12 / 2003
Betreff:

Re: Plugin Updates

 · 
Gepostet: 29.10.2013 - 15:12 Uhr  ·  #8
Anderer Vorschlag (sogar noch einer der für die Leute sicher wäre, die selbst die Plugin Dateien ersetzen weil sie z.B. keine Schreibrechte haben):
Du hast ja die Versionsnummer der KB in der Datenbank gespeichert. Mach doch einfach in Deiner Klasse einen construct welcher diesen Wert benutzt um festzustellen, ob die neueste Version schon installiert ist oder nicht. Wenn nein macht er die DB Updateschritte im Construct, wenn ja macht er nichts.

Das würde dann allen Eventualitäten vorbeugen.

LG,
Chris
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.