Migracja danych i18n z wersji alpha do pre-beta w cake'u 1.2

UWAGA: To jest tylko zalążek artykułu. Będę bardzo wdzięczny, jeśli pomożesz go dopracować :)

1. Tworzenie kontrolera, modelu i szablonów:

Kod kontrolera (/app/controllers/i18n_migration_controller.php):

<?php
 class I18nMigrationController extends AppController
 {
    function admin_index()
    {
    }
    
    function admin_update()
    {
        $this->I18nMigration->update();
    }
 }
 ?>

Kod modelu (/app/models/i18n_migration.php):

 <?php
  
 class I18nMigration extends AppModel
 {
      var $name = 'I18nMigration';
      var $useTable = false;
      var $db=null;

      var $__prefix;

      function __construct()
      {
          // change this if you don't use default connection
          $dbConnection = 'default';
          
          $this->db =& ConnectionManager::getDataSource($dbConnection);
          
          $this->__prefix = empty($this->db->config['prefix']) ? '' : $this->db->config['prefix'];
      }
      
      function update()
      {
        $rs = $this->query("SELECT * FROM ".$this->__prefix."i18n_content");
        $counter = count($rs);
        
        for($i=0;$i<$counter;$i++)
        {
            $this->execute("UPDATE ".$this->__prefix."i18n SET content='".addslashes($rs[$i][$this->__prefix.'i18n_content']['content'])."' WHERE id='".addslashes($rs[$i][$this->__prefix.'i18n_content']['id'])."' ");
        } 
      }
 }
 ?>

Kod szablonu index(/app/views/i18n_migration/admin_index.ctp):

<h2>Migracja danych i18n z alpha do pre-beta v. 0.1</h2>

<h3><b>UWAGA: W związku z tym, że jest to bardzo wczesna wersja rozwojowa oprogramowania, przed operacją importu, należy wykonać kopie bezpieczeństwa danych z tablic i18n i i18n_content. Autor nie odpowiada za starty wynikłe z działania tego oprogramowania.</b></h3>

<p>Przed wykonaniem migracji danych należy zaktualizować strukturę tabeli i18n według kodu podanego poniżej:<br />
[ZNACZNIK CODE]
CREATE TABLE i18n (<br />
    id int(10) NOT NULL auto_increment,<br />
    locale varchar(6) NOT NULL,<br />
    model varchar(255) NOT NULL,<br />
    foreign_key int(10) NOT NULL,<br />
    field varchar(255) NOT NULL,<br />
    content mediumtext,<br />
    PRIMARY KEY    (id),<br />
#    UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field),<br />
#    INDEX I18N_LOCALE_ROW(locale, model, foreign_key),<br />
#    INDEX I18N_LOCALE_MODEL(locale, model),<br />
#    INDEX I18N_FIELD(model, foreign_key, field),<br />
#    INDEX I18N_ROW(model, foreign_key),<br />
    INDEX locale (locale),<br />
    INDEX model (model),<br />
    INDEX row_id (foreign_key),<br />
    INDEX field (field)<br />
);<br />
[/ZNACZNIK CODE]
</p>


<b><?php echo $html->link('ROZPOCZNIJ MIGRACJE DANYCH','update',null,'Jesteś pewien? Pamiętaj o utworzeniu kopii bezpieczeństwa danych z tabel i18n i i18n_content!'); ?></b>

Kod szablonu update(/app/views/i18n_migration/admin_update.ctp):

<h2>Migracja danych i18n z alpha do pre-beta v. 0.1</h2>

<p>Migracja danych została zakończona. W związku z tym, że jest to badzo wczesna wersja oprogramowania <b>NALEŻY</b> sprawdzić, czy migracja <b>FAKTYCZNIE</b> zakończyła się powodzeniem.</p>

<b><?php echo $html->link('WRÓĆ','index'); ?></b>

2. Konfiguracja połączenia z bazą danych

Jeśli korzystasz z innego połączenia niż domyślne (default), to w pliku modelu należy zmienić linijkę:

$dbConnection = 'default';

3. Uruchomienie modułu do migracji

Aby uruchomić moduł, należy wejść na pod adres http://twojastrona.com/admin/i18n_migration/index.

4. Przygotowanie bazy danych

Na początku należy wykonać kopie bezpieczeństwa tabel i18n i i18n_content. Następnie według kodu SQL podanego na stronie pod adresem podanym w punkcie 3.

5. Migracja danych

Po wykonaniu powyższych kroków, możesz przystąpić do migracji danych. PAMIĘTAJ: Wszystkie operacje wykonujesz na własne ryzyko!

6. TODO

  • sprawdzać, czy jest zmieniona struktura tabeli i18n (jesli potrzeba, to zmienic),
  • sprawdzac, czy jest tabela i18n_content (jesli nie ma, to nie trzeba przeprowadzac migracji),
  • sprawdzic, czy migracja zostala zakonczona powodzeniem,
  • przed migracja zrobic kopie bezpieczenstwa danych z tabel i18n i i18_content,
  • wrzucić moduł do repozytorium.

Personal Tools