Enable SQL Query Pada Saat Install / Uninstall Plugin Joomla


Beberapa waktu yang lalu, saya sempat dipusingkan bagaimana cara menginstall sebuah plugin (mambot) sekaligus membuat table baru di dalam database MySQL dari sebuah joomla site ? Berikut ini jawabannya🙂

Saat saya (penulis) membuat sebuah plugin (mambot) sederhana untuk joomla site, plugin tersebut membutuhkan akses ke tabel dari database MySQL, di mana tabel tersebut benar-benar sebuah tabel baru (new create), yang aslinya bukan bagian dari database MySQL joomla site yang ada.

Untuk bisa menginstall suatu syntax query yang berfungsing membuat tabel baru pada MySQL, maka saya menambahkan parameter khusus dari file XML milik plugin (mambot) yang saya buat seperti berikut :

<install>
<queries>
     <query>
CREATE TABLE IF NOT EXISTS `#__content_vote` (
         `id` int(11) NOT NULL auto_increment,
         `cid` int(11) NOT NULL default ‘0’,
         `ip_address` varchar(15) NOT NULL default ‘000.000.000.000’,
         `waktu` timestamp NULL default CURRENT_TIMESTAMP,
         PRIMARY KEY (`id`)
    )</query>
</queries>
</install>
<uninstall>
<queries>
     <query>
DROP TABLE `#__content_vote`</query>
</queries>
</uninstall>

tag <install> mewakili query yang akan terinstall saat plugin (mambot) ini diinstall.

tag <uninstall> mewakili query yang akan dijalankan saat plugin (mambot) di uninstall. Lebih tepatnya disebut untuk menghapus tabel MySQL.

Saat pertama kali menguji plugin (mambot) yang saya buat, install melalui Backend Administrator Joomla, ternyata tidak berhasil membuat tabel MySQL baru pada database Joomla sesuai dengan yang saya setting di parameter file XML dari Plugin (mambot).

Akhirnya saya putuskan untuk melakukan sedikit modifikasi pada file Joomla (core edit).

 

Khusus untuk Joomla versi 1.0.X, berikut ini langkah-langkahnya :

1. Gunakan text editor sepert Macromedia Dreamweaver, load / open file “administrator/components/com_installer/mambot/mambot.class.php” tersebut.

2. Temukan function berikut yang ada di dalam file tersebut.

function install( $p_fromdir = null ) {

3. Temukan syntax php berikut :

// Insert mambot in DB
$query = "SELECT id"
. "\n FROM #__mambots"
. "\n WHERE element = " . $database->Quote( $this->elementName() )
;

4. Tepat sebelum syntax tersebut, insert / sisipkan perintah berikut (copy & paste)

// Are there any SQL queries??
$query_element = &$mosinstall->getElementsByPath(‘install/queries’, 1);
if (!is_null($query_element)) {
   $queries = $query_element->childNodes;
   foreach($queries as $query) {
      $database->setQuery( $query->getText());
      if (!$database->query()) { 
        $this->setError( 1, "SQL Error " . $database->stderr( true ) );
        return false;
      }
   }
}

5. Selanjutnya scroll ke bawah untuk menemukan function berikut :

function uninstall( $id, $option, $client=0 ) {

6. Scroll ke bawah dan temukan syntax berikut :

$mosinstall =& $this->i_xmldoc->documentElement;

7. Tepat sesudahnya, tambahkan (add) perintah berikut (copy & paste) :

// Are there any SQL queries??
$query_element = $mosinstall->getElementsbyPath(‘uninstall/queries’, 1);
if (!is_null($query_element)) {
   $queries = $query_element->childNodes;
   foreach($queries as $query) {
      $database->setQuery( $query->getText());
      if (!$database->query()) {
         HTML_installer::showInstallMessage($database->stderr(true),‘Uninstall – error’, $this->returnTo( $option, ‘component’, $client ) );
         exit();
      }
   }
}

8. Save / simpan perubahan yang telah kita lakukan terhadap file “mambot.class.php”, tutup text editornya.

9. Reupload kembali file “mambot.class.php” ke folder :

administrator/components/com_installer/mambot

 

Khusus untuk Joomla 1.5.X, langkah-langkah modifikasinya :

1. Gunakan text editor seperti Dreamweaver, open / buka file “libraries/joomla/installer/adapters/plugin.php

2. Scroll ke baris #135, yang terdapat syntax berikut :

/**
* ———————————————————————————————
* Database Processing Section
* ———————————————————————————————
*/

3. Tepat sesudahnya (baris #140), letakkan syntax berikut (copy & paste)

//Install Query SQL
$result = $this->parent->parseQueries($this->manifest->getElementByPath(‘install/queries));
if ($result === false) {
   // Install failed, rollback changes
   $this->parent->abort(JText::_(‘Plugin’).‘ ‘.JText::_(‘Install’).‘: ‘.JText::_(‘SQL Error’)." ".$db->stderr(true));
   return false;
}

4. Scroll ke baris #280, yang berisi syntax berikut

// Remove the plugin files

5. Tepat sebelumnya (baris #279), letakkan syntax berikut (copy & paste)

// Uninstall Queries
$result = $this->parent->parseQueries($root->getElementByPath(‘uninstall/queries’));
if ($result === false) {
   //Uninstall failed, rollback changes
   JError::raiseWarning(100, JText::_(‘Plugin’).‘ ‘.JText::_(‘Uninstall’).‘: ‘.JText::_(‘SQL Error’)." ".$db->stderr(true));
   return false;
}

6. Save / simpan perubahan yang dilakukan terhadap file “plugin.php”, tutup text editornya.

7. Reupload kembali file “plugin.php” ke joomla site ada, upload ke folder :

libraries/joomla/installer/adapters

Dengan perubahan yang telah dilakukan ini, sekarang saya(penulis) bisa menginstall sebuah plugin (mambot) bersama dengan query syntax tertentu (create / alter table MySQL database).

Bahkan saat diujicoba “uninstall” plugin, query syntax seperti “DROP TABLE” juga berhasil dijalankan.

Semoga Bermanfaat🙂

Semoga

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s