Multi Login eklentisi
Bugün (24 saat) çevrimiçi olanlar
Spoiler veremedim arkadaşlar. Kodu yüklememişler sanırım. :S
Çok teşekkür ederim. Sağ olun.
Kod:
<?php
//###########################################################################
//# #
//# MultiLogin 0.3 #
//# Copyright © 2011 Brian Allen Vanderburg II #
//# #
//# Allows users to log into multiple accounts at once. #
//# #
//# This program is free software: you can redistribute it and/or #
//# modify it under the terms of the GNU General Public License as #
//# published by the Free Software Foundation, either version 3 of #
//# the License, or (at your option) any later version. #
//# #
//# This program is distributed in the hope that it will be useful, #
//# but WITHOUT ANY WARRANTY; without even the implied warranty of #
//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #
//# See the GNU General Public License for more details. #
//# #
//# You should have received a copy of the GNU General Public License #
//# along with this program. #
//# If not, see <http://www.gnu.org/licenses/>. #
//# #
//###########################################################################
if(!defined("IN_MYBB"))
die("This can only be included from MyBB.");
// A generic reusable session mechanism for storage of information. Multiple
// sessions can exist concurrently by storing each session id in a different
// cookie. This is needed since the same session information (the list of
// logged in users) is needed across any user accounts logged in.
class MultiLoginSession implements ArrayAccess, IteratorAggregate, Countable
{
const TABLE='multilogin_sessions';
static private $runcache = array();
private $sid = null;
private $data = null;
static public function cleanup()
{
global $db;
$cut = TIME_NOW - 24 * 3600;
$db->delete_query(self::TABLE, "time < '{$cut}'");
}
static public function load($sid)
{
global $db;
if(isset(self::$runcache[$sid]))
{
return self::$runcache[$sid];
}
$row = $db->fetch_array($db->simple_select(self::TABLE, "time, data", "sid=\"".$db->escape_string($sid)."\""));
if($row)
{
if(intval($row['time']) < (TIME_NOW - 24 * 3600))
{
$db->delete_query(self::TABLE, "sid=\"".$db->escape_string($sid)."\"");
return null;
}
else
{
// Each load updates timestamp
$db->update_query(self::TABLE, array('time' => TIME_NOW), "sid=\"".$db->escape_string($sid)."\"");
}
return new MultiLoginSession($sid, $row['data']);
}
return null;
}
static public function create()
{
global $db;
$sid = '';
$data = base64_encode(gzcompress(serialize(array())));
$created = FALSE;
for($i = 0; $i < 100; $i++)
{
$sid = random_str(50);
$row = array(
'sid' => $sid,
'time' => TIME_NOW,
'data' => $data
);
try
{
$result = $db->insert_query(self::TABLE, $row);
// Assume false/null result is a failure if it doesn't use exceptions
if($result !== FALSE && $result !== null)
{
$created = TRUE;
break;
}
}
catch(Exception $e)
{
// TODO: log message or something?
}
}
if(!$created)
{
return null;
}
return new MultiLoginSession($sid);
}
static public function activate()
{
global $db;
self::deactivate();
$db->query('CREATE TABLE '.TABLE_PREFIX.self::TABLE.' (sid VARCHAR(50) UNIQUE NOT NULL, time BIGINT, data TEXT)');
}
static public function deactivate()
{
global $db;
if($db->table_exists(self::TABLE))
{
$db->drop_table(self::TABLE);
}
}
private function __construct($sid, $data=null)
{
$this->sid = $sid;
if($data === null)
{
$this->data = array();
}
else
{
$this->data = unserialize(gzuncompress(base64_decode($data)));
if($this->data === FALSE || $this->data === null)
{
$this->data = array();
}
}
self::$runcache[$sid] = $this;
}
public function sid()
{
return $this->sid;
}
public function save()
{
global $db;
$row = array(
'time' => TIME_NOW,
'data' => base64_encode(gzcompress(serialize($this->data)))
);
$db->update_query(self::TABLE, $row, "sid=\"".$db->escape_string($this->sid)."\"");
}
// ArrayAccess
public function offsetSet($offset, $value)
{
if($offset === null)
{
$this->data[] = $value;
}
else
{
$this->data[$offset] = $value;
}
}
public function offsetGet($offset)
{
return isset($this->data[$offset]) ? $this->data[$offset] : null;
}
public function offsetExists($offset)
{
return isset($this->data[$offset]);
}
public function offsetUnset($offset)
{
unset($this->data[$offset]);
}
// IteratorAggregate/Traversable
public function getIterator()
{
return new ArrayIterator(&$this->data);
}
// Countable
public function count()
{
return count($this->data);
}
}
// Plugin portion
$plugins->add_hook("misc_clearcookies", "multilogin_clearcookies");
$plugins->add_hook("global_start", "multilogin_header");
$plugins->add_hook("member_do_login_end", "multilogin_login");
$plugins->add_hook("member_logout_start", "multilogin_logout");
$plugins->add_hook("member_login", "multilogin_switch");
function multilogin_info()
{
global $lang;
return array(
"name" => "Çoklu Kullanıcı Giriş Eklentisi",
"description" => "Birden Fazla Kullanıcı Olarak Giriş Yapmanızı Sağlar.<br /><img src=\"http://destek.mybb.com.tr/turkey.gif\" border=\"0\" alt=\"MCTR\" title=\"MCTR\" /> Türkçe Çeviri: <a title=\"MyBB.Com.TR - ByBenjo\" href=\"http://www.mybb.com.tr\" target=\"_blank\"><b>MyBB.Com.TR</b></a>",
"author" => "Brian Allen Vanderburg II",
"version" => "0.3",
"compatibility" => "16*",
"guid" => "213c401f14b344f5e8f290dfcc991630"
);
}
function multilogin_activate()
{
global $db, $mybb, $lang;
$template = array (
"title" => 'multilogin_header',
"template" => '<hr />{$multilogin_header_userbit}',
"sid" => -1,
"version" => 1.0,
"dateline" => TIME_NOW
);
$db->insert_query("templates", $template);
require_once MYBB_ROOT."/inc/adminfunctions_templates.php";
find_replace_templatesets('header_welcomeblock_member', '#{\$lang->welcome_pms_usage}#', '{\$lang->welcome_pms_usage}<!-- MultiLogin1 -->{$multilogin_header}<!-- /MultiLogin1 -->');
find_replace_templatesets('header_welcomeblock_member', '#<a href=\"{\$mybb->settings\[\'bburl\'\]}/member.php\?action=logout#', '<!-- MultiLogin2 --><a href="{\$mybb->settings[\'bburl\']}/member.php?action=login">{\$lang->welcome_login}</a> — <!-- /MultiLogin2 --><a href="{$mybb->settings[\'bburl\']}/member.php?action=logout');
find_replace_templatesets('header_welcomeblock_guest', '#{\$lang->welcome_register}</a>\)</span>#', '{$lang->welcome_register}</a>)</span><!-- MultiLogin3 -->{$multilogin_header}<!-- /MultiLogin3 -->');
MultiLoginSession::activate();
}
function multilogin_deactivate()
{
global $db;
$db->delete_query("templates", "`title` = 'multilogin_header'");
require_once MYBB_ROOT."/inc/adminfunctions_templates.php";
find_replace_templatesets('header_welcomeblock_member', '#\<!--\sMultiLogin1\s--\>(.+)\<!--\s/MultiLogin1\s--\>#is', '', 0);
find_replace_templatesets('header_welcomeblock_member', '#\<!--\sMultiLogin2\s--\>(.+)\<!--\s/MultiLogin2\s--\>#is', '', 0);
find_replace_templatesets('header_welcomeblock_guest', '#\<!--\sMultiLogin3\s--\>(.+)\<!--\s/MultiLogin3\s--\>#is', '', 0);
MultiLoginSession::deactivate();
}
function multilogin_get_session()
{
global $mybb;
static $session = null;
if($session !== null)
{
return $session;
}
if(isset($mybb->cookies['mybb_multilogin']))
{
$session = MultiLoginSession::load($mybb->cookies['mybb_multilogin']);
}
if($session === null)
{
$session = MultiLoginSession::create();
}
if($session)
{
my_setcookie('mybb_multilogin', $session->sid(), -1, $mybb->settings['cookiepath'], $mybb->settings['cookiedomain']);
}
return $session;
}
function multilogin_clearcookies()
{
@my_setcookie('mybb_multilogin', '', TIME_NOW - 1, $mybb->settings['cookiepath'], $mybb->settings['cookiedomain']);
}
function multilogin_header()
{
global $mybb, $templates, $lang, $multilogin_header;
// Create the header bit even if guest. A logout will cause a user
// to be the guest even if they were logged into other accounts
$session = multilogin_get_session();
if($session === null)
{
return;
}
$multilogin_header_userbit = '';
$dash = '';
if($mybb->user['uid'] != "0")
{
$multilogin_header_userbit .= " <a href='{$mybb->settings['bburl']}/member.php?action=login&do=multilogin&uid=0&my_post_key={$mybb->post_code}'><em>{$lang->guest}</em></a>";
$dash = ' — ';
}
foreach($session as $id => $key)
{
if($id == $mybb->user['uid'])
{
continue;
}
$user = get_user($id);
if($user)
{
$user['uid'] = intval($user['uid']);
$user['username'] = htmlspecialchars_uni($user['username']);
$multilogin_header_userbit .= "{$dash}<a href='{$mybb->settings['bburl']}/member.php?action=login&do=multilogin&uid={$user['uid']}&my_post_key={$mybb->post_code}'>{$user['username']}</a>";
$dash = ' — ';
}
}
$multilogin_header = '';
if($multilogin_header_userbit)
{
eval("\$multilogin_header = \"".$templates->get('multilogin_header')."\";");
}
}
function multilogin_login()
{
global $mybb;
if(isset($mybb->cookies['mybbuser']))
{
$session = multilogin_get_session();
if($session === null)
{
return;
}
$pos = strpos($mybb->cookies['mybbuser'], '_');
$id = substr($mybb->cookies['mybbuser'], 0, $pos);
$key = substr($mybb->cookies['mybbuser'], $pos + 1);
$session[$id] = $key;
$session->save();
}
}
function multilogin_logout()
{
global $mybb;
if(isset($mybb->user['uid']))
{
$session = multilogin_get_session();
if($session === null)
{
return;
}
if(isset($session[$mybb->user['uid']]))
{
unset($session[$mybb->user['uid']]);
$session->save();
}
}
}
function multilogin_switch()
{
global $mybb, $lang;
if($mybb->input['do'] == 'multilogin')
{
verify_post_check($mybb->input['my_post_key']);
// get the current page
$redirect_url = htmlentities($_SERVER['HTTP_REFERER']);
// change to guest?
if(intval($mybb->input['uid']) == 0)
{
my_unsetcookie('mybbuser');
redirect($redirect_url, "");
exit;
}
// load lang
$lang->load('multilogin');
// get the uid sanatized
$user = get_user(intval($mybb->input['uid']));
// check if user exists
if(!$user)
{
error($lang->multilogin_switch_error);
}
// check that we are logged in as that user
$session = multilogin_get_session();
if($session === null || !isset($session[$user['uid']]))
{
error($lang->multilogin_switch_error);
}
if($session[$user['uid']] != $user['loginkey'])
{
error($lang->multilogin_switch_error);
}
// make the switch!
my_unsetcookie('mybbuser');
my_setcookie('mybbuser', $user['uid'].'_'.$user['loginkey'], null, true);
// redirect to page
redirect($redirect_url, "");
exit;
}
}Bugün (24 saat) çevrimiçi olanlar
Kod:
<?php
/**
* Copyright © 2006-2008 CraKteR, crakter [at] gmail [dot] com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @version $Id: onlinetoday.php 29 2008-08-14 19:00:36Z CraKteR $
* @copyright $LastChangedDate: 2008-08-14 21:00:36 +0200 (to, 14 aug 2008) $
* @author CraKteR <[email protected]>
*/
if(!defined("IN_MYBB"))
{
die("This file cannot be accessed directly.");
}
$plugins->add_hook('index_start', 'add_onlinetoday', 1000000);
function onlinetoday_info()
{
return array(
"name" => "Bugün Online Olanlar Gelişmiş",
"description" => "Bu eklenti, son 24 saat içinde çevriçi olanları göstermenize olanak sağlar.",
"website" => "http://www.mybb.com.tr",
"author" => "CraKteR",
"authorsite" => "mailto:[email protected]",
"version" => "2.0",
"guid" => "c2f1dd8db9b4f3898cb58f5ed02f9b53",
"compatibility" => "16*",
);
}
function onlinetoday_activate()
{
global $db;
$template = array(
"tid" => NULL,
"title" => "online_today_index",
"template" => "<tr>
<td class=\"tcat\"><strong>{\$lang->whos_online_today}</strong> [<a href=\"online.php?action=today\">{\$lang->complete_list}</a>]</td>
</tr>
<tr>
<td class=\"trow1\"><span class=\"smalltext\">{\$lang->online_note_today}<br />{\$onlinemembers}</span></td>
</tr>",
"sid" => "-1"
);
$db->insert_query("templates", $template);
require MYBB_ROOT."/inc/adminfunctions_templates.php";
find_replace_templatesets('index_boardstats', '#{\$whosonline}#', "{\$whosonline}\n{\$online_today}");
}
function onlinetoday_deactivate()
{
global $db;
$db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='online_today_index'");
require MYBB_ROOT."/inc/adminfunctions_templates.php";
find_replace_templatesets('index_boardstats', '#(\n?){\$online_today}#', '', 0);
}
function add_onlinetoday()
{
global $db, $mybb, $templates, $online_today, $lang, $theme;
$online_today = '';
if($mybb->settings['showwol'] != 0 && $mybb->usergroup['canviewonline'] != 0)
{
$lang->load("onlinetoday");
$lang->load("index");
$timesearch = time() - 24*60*60;
$queries = array();
$queries[] = $db->simple_select(
"users u LEFT JOIN ".TABLE_PREFIX."sessions s ON (u.uid=s.uid)",
"s.sid, s.ip, s.time, s.location, u.uid, u.username, u.invisible, u.usergroup, u.displaygroup",
"u.lastactive > $timesearch ORDER BY u.username ASC, s.time DESC"
);
$queries[] = $db->simple_select(
"sessions s LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid)",
"s.sid, s.ip, s.uid, s.time, s.location, u.username, u.invisible, u.usergroup, u.displaygroup",
"s.time>'$timesearch' ORDER BY u.username ASC, s.time DESC"
);
$comma = $onlinemembers = '';
$membercount = $guestcount = $anoncount = 0;
$doneusers = $ips = array();
foreach($queries as $query)
{
while($user = $db->fetch_array($query))
{
if(isset($user['sid']))
{
$botkey = strtolower(str_replace("bot=", '', $user['sid']));
}
if($user['uid'] > 0)
{
if($doneusers[$user['uid']] < $user['time'] || !$doneusers[$user['uid']])
{
if($user['invisible'] == 1)
{
++$anoncount;
}
++$membercount;
if($user['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid'])
{
$invisiblemark = ($user['invisible'] == 1) ? "*" : "";
$user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']);
$user['profilelink'] = build_profile_link($user['username'], $user['uid']);
eval("\$onlinemembers .= \"".$templates->get("index_whosonline_memberbit", 1, 0)."\";");
$comma = ", ";
}
if(isset($user['time']))
{
$doneusers[$user['uid']] = $user['time'];
}
else
{
$doneusers[$user['uid']] = $user['lastactive'];
}
}
}
else if(strstr($user['sid'], "bot=") !== false && $session->bots[$botkey] && !in_array($user['ip'], $ips))
{
$onlinemembers .= $comma.format_name($session->bots[$botkey], $session->botgroup);
$comma = ", ";
++$botcount;
}
else
{
++$guestcount;
$guests[] = $user['ip'];
}
}
}
$onlinecount = $membercount + $guestcount;
$onlinebit = ($onlinecount != 1) ? $lang->online_online_plural : $lang->online_online_singular;
$memberbit = ($membercount != 1) ? $lang->online_member_plural : $lang->online_member_singular;
$anonbit = ($anoncount != 1) ? $lang->online_anon_plural : $lang->online_anon_singular;
$guestbit = ($guestcount != 1) ? $lang->online_guest_plural : $lang->online_guest_singular;
$lang->online_note_today = $lang->sprintf($lang->online_note_today, my_number_format($onlinecount), $onlinebit, 24, my_number_format($membercount), $memberbit, my_number_format($anoncount), $anonbit, my_number_format($guestcount), $guestbit);
eval("\$online_today = \"".$templates->get("online_today_index")."\";");
}
}
?>Spoiler veremedim arkadaşlar. Kodu yüklememişler sanırım. :S
Çok teşekkür ederim. Sağ olun.

