Long time no posting. Kali ini masih seputar codeigniter. Ide awalnya ingin menambahkan fitur forum di Portal Ripiu. Karena tidak ingin pusing dan ribet kalau harus dibangun dari awal, jatuhlah pilihan untuk menggunakan open source.
Pilihan pertama jatuh kepada SMF (simple machine forum). Alasannya karena tertarik dengan namanya (simple gitu loh
) . Setelah dibaca – baca instruksi, dan dengan modal nekat dicoba melakukan integrasi. Kendala pertama yang dihadapi, so pasti masalah account. Keinginannya adalah account yang sudah terdaftar di ripiu agar tidak perlu lagi mendaftar di forum nantinya. Dengan bantuan om google ditemukanlah SMF API. Tapi sayang sekali, API yang begitu bagus, tidak disertakan dengan dokumentasi cara pemakaiaanya dan tidak ada sedikit contoh pun yang disertakan. Walhasil, gatot alias gagal total. Cari – cari di forum codeigniter pun, ternyata memang belum ada yang buat SMF library untuk codeigniter. Ya sudahlah!
Dengan semangat yang masih tertinggal 10%, pikiran tertuju kepada engine forum yang lain yang sudah sering digunakan sebelumnya, PHPBB. Sebenarnya agak malas juga menggunakan engine ini, karena berdasarkan pengalaman, harus rajin update setiap ada rilis baru. Maklumlah namanya juga opensource, terkenal pula, jadi banyak yang ngoprek, sehingga dalam waktu yang relatif singkat dari rilis terbarunya akan banyak bermunculan orang yang melaporkan bug dan celah keamanannya (itu bagi hacker yang baik, tapi bagi cracker celah tersebut langsung di exploit ke beberapa situs yang menggunakan PHPBB untuk mengirim tulisan spam, bahkan sampaimengambil alih domain situs tersebut).
Ternyata keberuntungan berpihak kepada diriku, meskipun PHPBB belum menyediakan API untuk mengintegrasikan forumnya, Namun di komunitas Codeigniter, ternyata sudah ada yang berbaik hati untuk menyediakan library PHPBB untuk codeigniter (hore .. tinggal pakai
) . Setelah baca2 sedikit, langsung praktek. Ternyata tidak sesulit yang dibayangkan. Meskipun begitu, library yang disediakan belum menyediakan semua kebutuhan yang diinginkan untuk memuluskan rencana integrasi dengan portal ripiu. Berbekal dengan bantuan om google lagi, akhirnya ditemukan tambahan library yang pas dan berguna untuk rencana integrasi tersebut. Tambahannya bisa dilihat disini. Jangan takut jika link tersebut tidak bisa diakses, akan aku copy paste disini :
< ?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter phpBB3 Bridge
* @author Georgi Budinov, credits to Tomaž Muraus at http://www.tomaz-muraus.info
* @link georgi.budinov.com
*/
class Phpbb_bridge
{
public $CI;
protected $_user;
/**
* Constructor.
*/
public function __construct()
{
if (!isset($this->CI))
{
$this->CI =& get_instance();
}
// Set the variables scope
global $phpbb_root_path, $phpEx, $user, $auth, $cache, $db, $config, $template, $table_prefix;
$rootPath = $this->CI->config->item('root_path');
define('IN_PHPBB', TRUE);
define('FORUM_ROOT_PATH', $rootPath.'forum/');
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : FORUM_ROOT_PATH;
$phpEx = substr(strrchr(__FILE__, '.'), 1);
// Include needed files
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'config.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
// Initialize phpBB user session
$user->session_begin();
$auth->acl($user->data);
$user->setup();
// Save user data into $_user variable
$this->_user = $user;
}
/**
* @param $email
* @param $username
* @param $password
* @return unknown_type
*/
public function user_add($email, $username, $password)
{
$user_row = array(
'username' => $username,
'user_password' => phpbb_hash($password),
'user_email' => $email,
'group_id' => 2, // by default, the REGISTERED user group is id 2
'user_timezone' => (float) date('T'),
'user_lang' => 'bg',
'user_type' => USER_NORMAL,
'user_ip' => $_SERVER['REMOTE_ADDR'],
'user_regdate' => time(),
);
return user_add($user_row, false);
}
/**
* @param $username
* @param $password
* @return bool
*/
public function user_edit($username, $password)
{
return user_edit($username, $password);
}
/*
* Logins the user in forum
*/
public function user_login($username, $password)
{
$auth = new auth();
return $auth->login($username, $password);
}
public function user_logout()
{
$this->_user->session_kill();
$this->_user->session_begin();
}
/**
* @param $user_id
* @return unknown_type
*/
public function user_delete($user_id)
{
return user_delete('remove', $user_id, false);
}
}
Beberapa kendala umum yang mungkin akan dihadapi ketika mencoba menggunakan library tersebut :
- Duplicate fungsi redirect, solusinya ada dua : ubah fungsi redirect yang ada di codeigniter atau menambahkan baris (if (!function_exist() )) di dalam file function.php nya phpBB yang terdapat dalam folder include.
Selamat Mencoba !