iBplanet.pl
Opis: Mod dodający do postów ikonki używanych przez użytkownika systemu operacyjnego oraz przeglądarki internetowej.
Autor moda: Ranma_man

Instalacja:

1. Otwieramy ACP i wybieramy SQL Management -> MySQL Toolbox. Wybieramy dowolną tabelę.
Wysyłamy zapytanie (wklejając poniższy tekst do odpowiedniego okna).
Uwaga: Jeżeli używasz innego prefiksu niż domyœlny, zmień nazwy tabel w zapytaniu!
CREATE TABLE `ibf_operating_systems` (
`id` smallint(4) NOT NULL auto_increment,
`break` tinyint(1) NOT NULL default '0',
`order` smallint(3) NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`word` varchar(255) NOT NULL default '',
`filename` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 AUTO_INCREMENT=0 ;

CREATE TABLE `ibf_browsers` (
`id` smallint(4) NOT NULL auto_increment,
`break` tinyint(1) NOT NULL default '0',
`order` smallint(3) NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`word` varchar(255) NOT NULL default '',
`filename` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=0 ;

INSERT INTO `ibf_operating_systems` VALUES (0, 0, 0, 'Unknown', '', 'unknown.gif'); INSERT INTO `ibf_operating_systems` VALUES (1, 0, 1, 'Windows 95 / 98', 'windows 9', 'windows_1.gif');
INSERT INTO `ibf_operating_systems` VALUES (2, 0, 2, 'Windows NT', 'windows nt 4.', 'windows_1.gif');
INSERT INTO `ibf_operating_systems` VALUES (3, 0, 3, 'Windows 2000', 'windows nt 5.0', 'windows_1.gif');
INSERT INTO `ibf_operating_systems` VALUES (4, 0, 4, 'Windows XP / 2003', 'windows nt 5.', 'windows_2.gif');
INSERT INTO `ibf_operating_systems` VALUES (5, 0, 5, 'Windows Millenium', 'windows me', 'windows_1.gif');
INSERT INTO `ibf_operating_systems` VALUES (6, 0, 6, 'Aurox Linux', 'aurox', 'aurox.gif');
INSERT INTO `ibf_operating_systems` VALUES (7, 0, 7, 'Fedora Linux', 'fedora', 'fedora.gif');
INSERT INTO `ibf_operating_systems` VALUES (8, 0, 8, 'Mandrake Linux', 'mandrake', 'mandrake.gif');
INSERT INTO `ibf_operating_systems` VALUES (9, 0, 9, 'Debian Linux', 'debian', 'debian.gif');
INSERT INTO `ibf_operating_systems` VALUES (10, 0, 10, 'Knoppix Linux', 'knoppix', 'knoppix.gif');
INSERT INTO `ibf_operating_systems` VALUES (11, 0, 11, 'Slackware Linux', 'slackware', 'slackware.gif');
INSERT INTO `ibf_operating_systems` VALUES (12, 0, 12, 'Redhat Linux', 'redhat', 'redhat.gif');
INSERT INTO `ibf_operating_systems` VALUES (13, 0, 13, 'Gentoo Linux', 'gentoo', 'gentoo.gif');
INSERT INTO `ibf_operating_systems` VALUES (14, 0, 14, 'Suse Linux', 'suse', 'suse.gif');
INSERT INTO `ibf_operating_systems` VALUES (15, 0, 15, 'PLD Linux', 'pld', 'pld.gif');
INSERT INTO `ibf_operating_systems` VALUES (16, 0, 16, 'Linux', 'linux', 'linux.gif');
INSERT INTO `ibf_operating_systems` VALUES (17, 0, 17, 'MacOS', 'mac', 'macos.gif');
INSERT INTO `ibf_operating_systems` VALUES (18, 0, 18, 'BeOS', 'be', 'beos.gif');
INSERT INTO `ibf_operating_systems` VALUES (19, 0, 19, 'FreeBSD / NetBSD', 'bsd', 'freebsd.gif');
INSERT INTO `ibf_operating_systems` VALUES (20, 0, 20, 'SunOS / Solaris', 'sun', 'sunos_solaris.gif');
INSERT INTO `ibf_operating_systems` VALUES (21, 0, 21, 'AmigaOS', 'amiga', 'amigaos.gif');

INSERT INTO `ibf_browsers` VALUES (0, 0, 0, 'Unknown', '', 'unknown.gif'); INSERT INTO `ibf_browsers` VALUES (1, 0, 1, 'Internet Explorer', 'msie', 'msie.gif');
INSERT INTO `ibf_browsers` VALUES (2, 0, 2, 'Firefox', 'firefox', 'firefox.gif');
INSERT INTO `ibf_browsers` VALUES (3, 0, 3, 'Mozilla', 'mozilla', 'mozilla.gif');
INSERT INTO `ibf_browsers` VALUES (4, 0, 4, 'Opera', 'opera', 'opera.gif');
INSERT INTO `ibf_browsers` VALUES (5, 0, 5, 'Avant Browser', 'avant browser', 'avant_browser.gif');
INSERT INTO `ibf_browsers` VALUES (6, 0, 6, 'Myie2', 'myie2', 'myie2.gif');
INSERT INTO `ibf_browsers` VALUES (7, 0, 7, 'Konqueror', 'konqueror', 'konqueror.gif');
INSERT INTO `ibf_browsers` VALUES (8, 0, 8, 'Galeon', 'galeon', 'galeon.gif');
INSERT INTO `ibf_browsers` VALUES (9, 0, 9, 'Epiphany', 'epiphany', 'epiphany.gif');
INSERT INTO `ibf_browsers` VALUES (10, 0, 10, 'Safari', 'safari', 'safari.gif');
INSERT INTO `ibf_browsers` VALUES (11, 0, 11, 'Camino', 'camino', 'camino.gif');
INSERT INTO `ibf_browsers` VALUES (12, 0, 12, 'Netscape', 'netscape', 'netscape.gif');
INSERT INTO `ibf_browsers` VALUES (13, 0, 13, 'Crazy Browser', 'crazy browser', 'crazy_browser.gif');
INSERT INTO `ibf_browsers` VALUES (14, 0, 14, 'Omniweb', 'omniweb', 'omniweb.gif');
INSERT INTO `ibf_browsers` VALUES (15, 0, 15, 'Dillo', 'dillo', 'dillo.gif');
INSERT INTO `ibf_browsers` VALUES (16, 0, 16, 'iCab', 'icab', 'icab.gif');
INSERT INTO `ibf_browsers` VALUES (17, 0, 17, 'Lynx', 'lynx', 'lynx.gif');
INSERT INTO `ibf_browsers` VALUES (18, 0, 18, 'Links', 'links', 'links.gif');
INSERT INTO `ibf_browsers` VALUES (19, 0, 19, 'AvantGo', 'avantgo', 'avantgo.gif');
INSERT INTO `ibf_browsers` VALUES (20, 0, 20, 'Amaya', 'amaya', 'amaya.gif');
INSERT INTO `ibf_browsers` VALUES (21, 0, 21, 'Amiga Voyager', 'amiga voyager', 'amiga_voyager.gif');
INSERT INTO `ibf_browsers` VALUES (22, 0, 22, 'iBrowse', 'ibrowse', 'ibrowse.gif');
INSERT INTO `ibf_browsers` VALUES (23, 0, 23, 'ICE Browser', 'ice browser', 'ice_browser.gif');
Warto sprawdzić czy na konścu tabeli ibf_posts została dodana kolumna o nazwie user_agent.



2. Otwieramy plik Skin/s1/skin_topic.php
Szukamy (okolice 265 linii):
{$author['member_joined']}<br /><br />
{$author['warn_text']} {$author['warn_minus']}{$author['warn_img']}{$author['warn_add']}</span><br />
Zamieniamy na:
{$author['member_joined']}<br /><br />
<img src='{$ibforums->vars['img_url']}/ua/br/{$post['br_filename']}' title='{$post['br_name']}' alt='{$post['br_name']}'/> <img src='{$ibforums->vars['img_url']}/ua/os/{$post['sys_filename']}' title='{$post['sys_name']}' alt='{$post['sys_name']}'/>
{$author['warn_text']} {$author['warn_minus']}{$author['warn_img']}{$author['warn_add']}</span><br />




3. Otwieramy plik sources/Topics.php
Szukamy (okolice 530 linii):
//--------------------------------------------
// Optimized query?
// MySQL.com insists that forcing LEFT JOIN or
// STRAIGHT JOIN helps the query optimizer, so..
//--------------------------------------------


$DB->query( "SELECT p.*,
m.id,m.name,m.mgroup,m.email,m.joined,m.avatar,m.avatar_size,m.posts,m.aim_name,m.icq_number,
m.signature, m.website,m.yahoo,m.integ_msg,m.title,m.hide_email,m.msnname, m.warn_level, m.warn_lastwarn,m.browser_id,m.system_id,
g.g_id, g.g_title, g.g_icon, g.g_dohtml $join_get_fields
FROM ibf_posts p
LEFT JOIN ibf_members m ON (p.author_id=m.id)
LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
$join_profile_query
WHERE p.topic_id=".$this->topic['tid']." and p.queued != 1
ORDER BY p.{$ibforums->vars['post_order_column']} {$ibforums->vars['post_order_sort']} LIMIT $first, ".$ibforums->vars['display_max_posts']);
Zamieniamy na:
//--------------------------------------------
// Optimized query?
// MySQL.com insists that forcing LEFT JOIN or
// STRAIGHT JOIN helps the query optimizer, so..
//--------------------------------------------


$DB->query( "SELECT p.*,
m.id,m.name,m.mgroup,m.email,m.joined,m.avatar,m.avatar_size,m.posts,m.aim_name,m.icq_number,
m.signature, m.website,m.yahoo,m.integ_msg,m.title,m.hide_email,m.msnname, m.warn_level, m.warn_lastwarn,m.browser_id,m.system_id,b.br_name,b.br_filename,s.sys_name,s.sys_filename,
x.br_name AS br_name2,x.br_filename AS br_filename2,y.sys_name AS sys_name2,y.sys_filename AS sys_filename2,

g.g_id, g.g_title, g.g_icon, g.g_dohtml $join_get_fields
FROM ibf_posts p
LEFT JOIN ibf_members m ON (p.author_id=m.id)
LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
LEFT JOIN ibf_browsers b ON (b.id=m.browser_id AND m.id>0)
LEFT JOIN ibf_operating_systems s ON (s.id=m.system_id AND m.id>0)
LEFT JOIN ibf_browsers x ON (x.id=p.browser_id AND m.id=0)
LEFT JOIN ibf_operating_systems y ON (y.id=p.system_id AND m.id=0)

$join_profile_query
WHERE p.topic_id=".$this->topic['tid']." and p.queued != 1
ORDER BY p.{$ibforums->vars['post_order_column']} {$ibforums->vars['post_order_sort']} LIMIT $first, ".$ibforums->vars['display_max_posts']);


Szukamy (okolice 610 linii):
else
{
// It's definately a guest...
$poster = $std->set_up_guest( $row['author_name'] );
$row['name_css'] = 'unreg';
}
Zamieniamy na:
else
{
$row['br_name'] = $row['br_name2'];
$row['br_filename'] = $row['br_filename2'];
$row['sys_name'] = $row['sys_name2'];
$row['sys_filename'] = $row['sys_filename2'];


// It's definately a guest...
$poster = $std->set_up_guest( $row['author_name'] );
$row['name_css'] = 'unreg';
}




4. Otwieramy plik sources/functions.php
Szukamy (okolice 30 linii):
class FUNC {

var $time_formats = array();
var $time_options = array();
var $offset = "";
var $offset_set = 0;
var $num_format = "";
var $allow_unicode = 1;
var $get_magic_quotes = 0;

// Set up some standards to save CPU later

function FUNC() {
Zamieniamy na:

class FUNC {

var $time_formats = array();
var $time_options = array();
var $offset = "";
var $offset_set = 0;
var $num_format = "";
var $allow_unicode = 1;
var $get_magic_quotes = 0;

function get_browser_system()
{
global $DB, $_SERVER, $ibforums;

$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
$browser = 0;
$system = 0;

$DB->query( "SELECT id,break,word FROM ibf_browsers WHERE id>0 ORDER BY `order` ASC" );

while ( $row = $DB->fetch_row() )
{
if ( !( strpos($ua,$row['word']) === false ) )
{
$browser = $row['id'];
if ( $row['break'] == 1 )
{
break;
}
}
}

$DB->query( "SELECT id,break,word FROM ibf_operating_systems WHERE id>0 ORDER BY `order` ASC" );

while ( $row = $DB->fetch_row() )
{
if ( !( strpos($ua,$row['word']) === false ) )
{
$system = $row['id'];

if ( $row['break'] == 1 )
{
break;
}
}
}

if ( $ibforums->member['id'] > 0 )
{
if ( $browser <> $ibforums->member['browser_id'] || $system <> $browser->member['system_id'] )
{
$DB->query('UPDATE ibf_members set browser_id='.$browser.', system_id='.$system.' WHERE id='.$ibforums->member['id']);
}
}
return array($browser,$system);

}

// Set up some standards to save CPU later

function FUNC() {


Szukamy (okolice 2780 linii):
//+-------------------------------------------------
// Attempt to load a
//+-------------------------------------------------

function load_member($member_id=0)
{
global $DB, $std, $ibforums;

$member_id = intval($member_id);

if ($member_id != 0)
{

$DB->query("SELECT moderator.mid as is_mod, moderator.allow_warn, m.id, m.name, m.mgroup, m.password, m.email, m.restrict_post, m.view_sigs, m.view_avs, m.view_pop, m.view_img, m.auto_track,
m.mod_posts, m.language, m.skin, m.new_msg, m.show_popup, m.msg_total, m.time_offset, m.posts, m.joined, m.last_post,
m.last_visit, m.last_activity, m.dst_in_use, m.view_prefs, m.org_perm_id, m.temp_ban, m.sub_end, g.*
FROM ibf_members m
LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
LEFT JOIN ibf_moderators moderator ON (moderator.member_id=m.id OR moderator.group_id=m.mgroup )
WHERE m.id=$member_id");
Zamieniamy na:
//+-------------------------------------------------
// Attempt to load a
//+-------------------------------------------------

function load_member($member_id=0)
{
global $DB, $std, $ibforums;

$member_id = intval($member_id);

if ($member_id != 0)
{

$DB->query("SELECT m.browser_id, m.system_id, moderator.mid as is_mod, moderator.allow_warn, m.id, m.name, m.mgroup, m.password, m.email, m.restrict_post, m.view_sigs, m.view_avs, m.view_pop, m.view_img, m.auto_track,
m.mod_posts, m.language, m.skin, m.new_msg, m.show_popup, m.msg_total, m.time_offset, m.posts, m.joined, m.last_post,
m.last_visit, m.last_activity, m.dst_in_use, m.view_prefs, m.org_perm_id, m.temp_ban, m.sub_end, g.*
FROM ibf_members m
LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
LEFT JOIN ibf_moderators moderator ON (moderator.member_id=m.id OR moderator.group_id=m.mgroup )
WHERE m.id=$member_id");




5. Otwieramy plik sources/lib/post_new_post.php
Szukamy (okolice 220 linii):
//-------------------------------------------------
// Update the post info with the upload array info
//-------------------------------------------------

$this->post['attach_id'] = $this->upload['attach_id'];
$this->post['attach_type'] = $this->upload['attach_type'];
$this->post['attach_hits'] = $this->upload['attach_hits'];
$this->post['new_topic'] = 1;
$this->post['attach_file'] = $this->upload['attach_file'];
Zamieniamy na:
//-------------------------------------------------
// Update the post info with the upload array info
//-------------------------------------------------

$this->post['attach_id'] = $this->upload['attach_id'];
$this->post['attach_type'] = $this->upload['attach_type'];
$this->post['attach_hits'] = $this->upload['attach_hits'];
$this->post['attach_file'] = $this->upload['attach_file'];
$this->post['new_topic'] = 1;
$sys = $std->get_browser_system();
$this->post['browser_id'] = $sys[0];
$this->post['system_id'] = $sys[1];




6. Otwieramy plik sources/lib/post_reply_post.php
Szukamy (okolice 130 linii):
//-------------------------------------------------
// Update the post info with the upload array info
//-------------------------------------------------

$this->post['attach_id'] = $this->upload['attach_id'];
$this->post['attach_type'] = $this->upload['attach_type'];
$this->post['attach_hits'] = $this->upload['attach_hits'];
$this->post['attach_file'] = $this->upload['attach_file'];
Zamieniamy na:
//-------------------------------------------------
// Update the post info with the upload array info
//-------------------------------------------------

$this->post['attach_id'] = $this->upload['attach_id'];
$this->post['attach_type'] = $this->upload['attach_type'];
$this->post['attach_hits'] = $this->upload['attach_hits'];
$this->post['attach_file'] = $this->upload['attach_file'];
$sys = $std->get_browser_system();
$this->post['browser_id'] = $sys[0];
$this->post['system_id'] = $sys[1];




7. Otwieramy plik sources/lib/post_q_reply_post.php
Szukamy (okolice 180 linii):
//-------------------------------------------------
// Update the post info with the upload array info
//-------------------------------------------------

$this->post['attach_id'] = $this->upload['attach_id'];
$this->post['attach_type'] = $this->upload['attach_type'];
$this->post['attach_hits'] = $this->upload['attach_hits'];
$this->post['attach_file'] = $this->upload['attach_file'];
Zamieniamy na:
//-------------------------------------------------
// Update the post info with the upload array info
//-------------------------------------------------

$this->post['attach_id'] = $this->upload['attach_id'];
$this->post['attach_type'] = $this->upload['attach_type'];
$this->post['attach_hits'] = $this->upload['attach_hits'];
$this->post['attach_file'] = $this->upload['attach_file'];
$sys = $std->get_browser_system();
$this->post['browser_id'] = $sys[0];
$this->post['system_id'] = $sys[1];




8. Otwieramy plik sources/lib/post_poll.php
Szukamy (okolice 240 linii):
// Update the post info with the upload array info

$this->post['attach_id'] = $this->upload['attach_id'];
$this->post['attach_type'] = $this->upload['attach_type'];
$this->post['attach_hits'] = $this->upload['attach_hits'];
$this->post['new_topic'] = 1;
Zamieniamy na:
// Update the post info with the upload array info

$this->post['attach_id'] = $this->upload['attach_id'];
$this->post['attach_type'] = $this->upload['attach_type'];
$this->post['attach_hits'] = $this->upload['attach_hits'];
$this->post['new_topic'] = 1;
$sys = $std->get_browser_system();
$this->post['browser_id'] = $sys[0];
$this->post['system_id'] = $sys[1];




9. Kopiujemy katalog ua do style_images/1/ by scieżka wyglądała style_images/1/ua/
Przygotowałem dwa zestawy ikon, o wysokości 18 i 24 pikseli. Jeśli chcesz używać większe, usuń "24" z nazw tych katalogów, jeżeli chcesz mniejsze, postąp analogicznie z "18". Używane katalogi muszą mieć nazwę "br" i "os"! Oczywiście należy zedytować kążdy skin a pliki graficzne skopiować do kążdego stylu.


I to by było na tyle, have fun!