Deutschland United States United Kingdom
ContentLion - Open Source CMS

Datenbankrevision

Datenbankrevision

Um bei Updater weiterzumachen brauche ich eine Liste, in welcher Revision welche Tabelle/Spalte hinzugekommen ist. Hat wer von euch Bock das über SVN Log rauszusuchen?

Auf jeden Fall sind folgende Tabellen betroffen:

- events --> Varchar auf 600 oder 255 gesetzt.
- tasks --> gleiches

Ich verstehe das System hinter SNV immer noch nicht -.- ^^

@Maxi: Was denn genau dabei?

@JuKu: Es zählen nur die Sachen im trunk. Bei dir würde es dann später die Revision beim Merge sein.

Dann musst du die Sachen endlich mal mergen!!! 8|
Der User hinzufügen - Bug ist nämlich auch immer noch drin! :(

(system/classes/user.php - Passwort wurde ohne Salt verschlüsselt.)
Hatte die ganzen Sachen schon behoben, aber wenn du das nie mergest... ;(

Die Version ist noch nicht draußen, weil vorher das Updater Plugin raus kommen muss. Da hat das mergen noch keine Auswirkungen. Mir kommt es darauf an, die alten Revisionen herauszufinden und danach erst mit neuem zu beginnen.

Noch nen Bug, denn ich zwar vor ner halben Ewigkeit schon gefixt habe, der aber immer noch im Release drin ist:
Der EventManager.
Die Datei "system/classes/eventmanager.php" muss so aussehen:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?PHP
  class EventManager {
    private static $handler null;
  
    /**
     * 
     * @return array;
     */
    public static function GetAllHandler(){
       $res self::$handler;
       if($res == null){
           if(Cache::contains("eventmanager""handler")){
               $res Cache::getData("eventmanager""handler");
           }
           else{
               /*$rows = DataBase::Current()->ReadRows("SELECT * FROM {'dbprefix'}events");
               
               foreach($rows as $handler){  print_r($handler);
                   
                   if(!isset($item[$handler->event])){
                     $res[$handler->event] = array();
                   }
                   
                   $res[$handler->event][] = $handler->file;
               }*/
               
               $rows DataBase::Current()->ReadRows("SELECT * FROM {'dbprefix'}events");
               
               foreach ($rows as $handler) {

           if(!isset($res[$handler->event])){
                     $res[$handler->event] = array();
                   }

                   $res[$handler->event][] = $handler->file;
               }
               
               //print_r($res);
               Cache::setData("eventmanager""handler"$res);
               self::$handler $res;
           }
       }
       return $res;
    }
    
    /**
     *
     * @param string $file
     * @param strung $event
     * @return mixed 
     */
    public static function addHandler($file$event){
       $file  DataBase::Current()->EscapeString($file);
       $event DataBase::Current()->EscapeString($event);
       Cache::clear("eventmanager""handler");
       return DataBase::Current()->Execute("INSERT INTO {'dbprefix'}events (event, file) VALUES ('".$event."','".$file."')");
    }
    
    /**
     *
     * @param string $file
     * @param string $event
     * @return mixed
     */
    public static function removeHandler($file$event){
       $file  DataBase::Current()->EscapeString($file);
       $event DataBase::Current()->EscapeString($event);
       Cache::clear("eventmanager""handler");
       return DataBase::Current()->Execute("DELETE FROM {'dbprefix'}events WHERE event = '".$event."' AND file = '".$file."'");
    }
    
    /**
     *
     * @param string $name
     * @param array $args 
     */
    public static function RaiseEvent($name,$args){
       $handler self::getHandler($name);
       if($handler){
         foreach($handler as $file){
           include_once(Settings::getValue("root").$file);
         }
       }
    }
    
    /**
     *
     * @param string $name
     * @return array
     */
    public static function getHandler($name){
       $handler self::GetAllHandler();
       if(isset($handler[$name]))
       {
            return $handler[$name];
       }
    }
  
  }
?>


;)

Was bitte schön hat dein Post mit den Datenbankrevisionen zu tun? Dafür bitte beim nächten mal einen neuen Thread.

Weil du alle Änderungen & Bugs wissen wolltest. ^^
Und das war einer. :D

Nur leider finde ich die Revisions-Nummer nicht... :S

Ich wollte die Änderungen in der Datenbank wissen, dass hat nichts mit Bugs zu tun^^

Ach so, Sorry! ^^
Darauf hab ich jetzt gar nicht geachtet. :D

So, jetzt mal wieder was zum eigentlichen Thema.

Das Ganze soll ja als Basis für den neuen Installer und auch für den Updater werden. Ich bin jetzt die Revisionen allte durchgegangen und habe alle Änderungen in Tabellenform gespeichert.

Aufbau:

table (aktuell 48 einträge)
- name
- repository
- revision
- engine
- charset
- auto_increment

columns (aktuell 164 einträge)
- table
- column
- repository
- revision
- type
- allow_null
- auto_increment
- deleted
- default
- on_update

primarykeys (aktuell 60 einträge)
- table
- column
- repository
- revision
- index

indizies (aktuell 4 einträge)
- name
- tabke
- column
- repository
- revision
- type
- index

Im nächsten Schritt müssen wir ein Script basteln, was aus den einzelnen Änderungen Create-Statements für den Installer und ALERT, CREATE und DROP-Statements für den Updater erstellt. Ich muss das auch noch für die einzelnen Plugins nachtragen. Wer Lust hat so ein Script zu bauen einfach Bescheid geben, ich geb ihm dann die Creates für meine Tabellen.

BTW: An einigen Stellen müssen wir den Datenbankaufbau noch anpassen, dass hab ich damals als noch unwissender Entwickler nicht so toll gemacht. Mehr daz in einem neuen Topic.

Ich kanns mal probieren, aber ist wahrscheinlich sehr schwierig. :D

Wobei, lass erstmal. Ich muss die neuen Einträge dort sowieso automatisch eintragen. Mit der Klassenstruktur kann ich dann auch die Creates und alters usw. basteln.