Hi, I create MOD for image users sessions. Each user visit image can see for session in detail foreach image ID (live).
If image active - show.
If image no active - no show.
If user invisible - show
* (same includes/sessions.php file). No show for user (is admin).
No HTML in PHP - all HTML template.
Test: Mr_LovaLove
// Step 1
In details.php file,
find:
// Update Hits
if ($user_info['user_level'] != ADMIN) {
$sql = "UPDATE ".IMAGES_TABLE."
SET image_hits = image_hits + 1
WHERE image_id = $image_id";
$site_db->query($sql);
}
add after:
// MOD: Image users sessions.
$image_time_out = time() - 300;
$image_guest_level_sessions_counter = 0;
$additional_sql = "";
$additional_sql_array = array();
if (isset($additional_user_fields) && is_array($additional_user_fields) && !empty($additional_user_fields)) {
foreach ($additional_user_fields as $key => $val) {
$additional_sql .= ", u." . $key;
$additional_sql_array[] = $key;
}
}
if (function_exists('get_image_sessions_info') && $user_info['user_level'] == GUEST) {
get_image_sessions_info($site_sess->session_id, 'check_sessions_table');
}
if (function_exists('get_image_sessions_info') && $user_info['user_level'] >= USER) {
get_image_sessions_info($user_info['user_id'], 'check_sessions_table');
}
$sql1 = "
SELECT ist.image_id, s.session_user_id" . get_user_table_field(", u.", "user_name") . get_user_table_field(", u.", "user_level") . get_user_table_field(", u.", "user_invisible") . $additional_sql . "
FROM (" . SESSIONS_TABLE . " s, " . IMAGES_SESSIONS_TABLE . " ist)
LEFT JOIN " . USERS_TABLE . " u ON (" . get_user_table_field("u.", "user_id") . " = s.session_user_id)
WHERE ist.user_id = s.session_user_id AND ist.image_id = " . $image_id . " AND ist.image_sessions_microtime >= " . $image_time_out . " AND s.session_user_id > '" . GUEST . "'
GROUP BY s.session_user_id
ORDER BY " . get_user_table_field("u.", "user_id") . " ASC, s.session_ip ASC";
$sessions_image_result = $site_db->query($sql1);
$image_num_rows = $site_db->get_numrows($sessions_image_result);
if (isset($image_num_rows) && $image_num_rows > 0) {
$image_sessions_template = "";
$image_invisible_sessions_counter = 0;
$image_registered_users_sessions_counter = 0;
$session_image_id = 0;
while ($sessions_image_row = $site_db->fetch_array($sessions_image_result)) {
if ($sessions_image_row[$user_table_fields['user_invisible']] == 1) {
$image_invisible_sessions_counter++;
}
if ($sessions_image_row[$user_table_fields['user_level']] >= USER) {
$image_registered_users_sessions_counter++;
}
$session_image_user_id = $sessions_image_row['session_user_id'];
$session_image_id .= $sessions_image_row['image_id'];
$session_image_name = $sessions_image_row[$user_table_fields['user_name']];
$session_image_invisible = $sessions_image_row[$user_table_fields['user_invisible']];
$site_template->register_vars(array(
"session_image_user_url" => $site_sess->url(ROOT_PATH . "member.php?action=showprofile&" . URL_USER_ID . "=" . $session_image_user_id),
"session_image_user_id" => (int)$session_image_user_id,
"session_image_name" => format_text(stripslashes($session_image_name), 2),
"session_image_invisible" => ($session_image_invisible == 1) ? 1 : 0,
"invisible_image_chars" => $lang['images_notify_invisible_chars'],
"need_separator" => (isset($image_num_rows) && $image_num_rows > 1) ? true : false
));
if (isset($additional_sql_array) && is_array($additional_sql_array) && !empty($additional_sql_array)) {
foreach ($additional_sql_array as $key => $val) {
if ($val == $sessions_image_row[$val]) {
$site_template->register_vars($val, $sessions_image_row[$val]);
}
}
}
$image_sessions_template .= $site_template->parse_template("details_sessions_content");
}
}
$sql2 = "
SELECT s.session_user_id" . $additional_sql . "
FROM (" . SESSIONS_TABLE . " s, " . IMAGES_SESSIONS_TABLE . " ist)
LEFT JOIN " . USERS_TABLE . " u ON (" . get_user_table_field("u.", "user_id") . " = s.session_user_id)
WHERE ist.image_id = " . $image_id . " AND ist.image_sessions_microtime >= " . $image_time_out . " AND s.session_user_id = '" . GUEST . "'
GROUP BY s.session_ip";
$sessions_guest_image_result = $site_db->query($sql2);
$sessions_guest_num_rows = $site_db->get_numrows($sessions_guest_image_result);
if (isset($sessions_guest_num_rows) && $sessions_guest_num_rows > 0) {
while ($sessions_image_guest_row = $site_db->fetch_array($sessions_guest_image_result)) {
$image_guest_level_sessions_counter++;
}
}
$total_image_sessions = $image_registered_users_sessions_counter + $image_guest_level_sessions_counter;
// End of MOD: Image users sessions.
Find:
"lang_file_size" => $lang['file_size'],
add after:
// MOD: Image users sessions.
"lang_image_notify_sessions_title" => $lang['images_notify_sessions_title'],
"lang_image_notify_current_sessions_title" => $lang['images_notify_current_sessions_title'],
"image_sessions_template" => (isset($image_sessions_template)) ? trim($image_sessions_template) : "",
"total_invisible_image_sessions" => (isset($image_invisible_sessions_counter)) ? preg_replace("/" . $site_template->start . "invisible_count" . $site_template->end . "/siU", (int)$image_invisible_sessions_counter, $lang['images_notify_invisible_count']) : preg_replace("/" . $site_template->start . "invisible_count" . $site_template->end . "/siU", 0, $lang['images_notify_invisible_count']),
"total_registered_users_image_sessions" => (isset($image_registered_users_sessions_counter)) ? preg_replace("/" . $site_template->start . "registered_users_count" . $site_template->end . "/siU", (int)$image_registered_users_sessions_counter, $lang['images_notify_registered_users_count']) : preg_replace("/" . $site_template->start . "registered_users_count" . $site_template->end . "/siU", 0, $lang['images_notify_registered_users_count']),
"total_guest_level_image_sessions" => (isset($image_guest_level_sessions_counter)) ? preg_replace("/" . $site_template->start . "guest_level_count" . $site_template->end . "/siU", (int)$image_guest_level_sessions_counter, $lang['images_notify_guest_level_count']) : preg_replace("/" . $site_template->start . "guest_level_count" . $site_template->end . "/siU", 0, $lang['images_notify_guest_level_count']),
"total_image_sessions" => (isset($total_image_sessions)) ? (int)$total_image_sessions : false,
// End of MOD: Image users sessions.
// Step 2
In lang/english/main.php file,
add top ?>:
// MOD: Images sessions.
//-----------------------------------------------------
//--- Images sessions -------------------------------
//-----------------------------------------------------
$lang['images_notify_count'] = "Total: {count}";
$lang['images_notify_sessions_title'] = "Currently active image users: ";
$lang['images_notify_invisible_chars'] = "*";
$lang['images_notify_current_sessions_title'] = "There are currently ";
$lang['images_notify_registered_users_count'] = "<b>{registered_users_count}</b> registered user(s) ";
$lang['images_notify_invisible_count'] = "({invisible_count} among them invisible) ";
$lang['images_notify_guest_level_count'] = "and <b>{guest_level_count}</b> guest(s) online.";
// Step 3
In templates/your_template/details.html file,
find:
{if allow_comments}
<a name="comments"></a>
<br />
add after:
{if is_admin}<! -- Image users sessions -- >{endif is_admin}
{if image_allow_read}
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="top" class="head1"> {lang_image_notify_sessions_title} {total_image_sessions}</td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="row1"> {lang_image_notify_current_sessions_title} {total_registered_users_image_sessions} {total_invisible_image_sessions} {total_guest_level_image_sessions}</td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
{if image_sessions_template}<td width="100%" class="row1" /> {image_sessions_template}</td>{endif image_sessions_template}
{if sessions_image_no_content_msg}{if allow_image_read}<td width="100%" class="row1" align="center" /><b>{sessions_image_no_content_msg}</b></td>{endif allow_image_read}{endif sessions_image_no_content_msg}
</tr>
</table>
{endif image_allow_read}
<br />
{if is_admin}<! -- End of image users sessions -- >{endif is_admin}
// Step 4
In templates/your_template folder, create:
details_sessions_content.html.
Add:
{if is_admin}{if session_image_invisible}<a href="{session_image_user_url}"><b>{session_image_name}</b></a>{invisible_image_chars}{if need_separator}, {endif need_separator} {endif session_image_invisible}{endif is_admin}
{if user_loggedin}{ifnot session_image_invisible}<a href="{session_image_user_url}"><b>{session_image_name}</b></a>{if need_separator}, {endif need_separator} {endifnot session_image_invisible}{endif user_loggedin}
// Step 5
In includes/functions.php file,
add top ?>:
// MOD: Image sessions user.
function get_image_sessions_info($user_id = -1, $status = "") {
global $site_db, $session_info, $image_id, $user_table_fields, $table_prefix;
if (!isset($user_id) || $user_id == -1) {
return;
}
if (!isset($status) || $status == "") {
return;
}
if (isset($user_id) && $user_id > 0) {
$user_id = preg_replace("/[^0-9]+/i", "", $user_id);
if ($user_row = get_user_info($user_id)) {
if ($user_id != $user_row[$user_table_fields['user_id']]) {
return;
}
unset ($user_row);
}
$status = preg_replace("/[^A-Za-z0-9\_]+/i", "", $status);
$date = date('Y-m-d');
$time = date('H:i:s');
$microtime = time();
switch($status) {
case 'check_sessions_table' :
if (!defined('IMAGES_SESSIONS_TABLE')) {
define('IMAGES_SESSIONS_TABLE', $table_prefix . "images_sessions");
}
$sql = "
CREATE TABLE IF NOT EXISTS " . IMAGES_SESSIONS_TABLE . " (
field_id INT(11) NOT NULL AUTO_INCREMENT,
user_id VARCHAR(32) NOT NULL DEFAULT '0',
image_id INT(11) NOT NULL DEFAULT '0',
image_sessions_date VARCHAR(48) NOT NULL DEFAULT '0000-00-00',
image_sessions_time VARCHAR(48) NOT NULL DEFAULT '00:00:00',
image_sessions_microtime VARCHAR(255) NOT NULL DEFAULT '0',
image_sessions_ip VARCHAR(48) NOT NULL DEFAULT '0.0.0.0',
PRIMARY KEY (field_id)
) TYPE=MyISAM;
";
$result = $site_db->query($sql);
$sql = "SELECT user_id, image_id FROM " . IMAGES_SESSIONS_TABLE . " WHERE user_id = " . $user_id . " AND image_id = " . $image_id;
$result = $site_db->query($sql);
$num_rows = $site_db->get_numrows($result);
if (isset($num_rows) && $num_rows <= 0) {
$image_sessions_ip = $session_info['session_ip'];
$sql1 = "
INSERT INTO " . IMAGES_SESSIONS_TABLE . "
(field_id, user_id, image_id, image_sessions_date, image_sessions_time, image_sessions_microtime, image_sessions_ip)
VALUES (NULL, '" . $user_id . "', '" . $image_id . "', '" . $date . "', '" . $time . "', '" . $microtime . "', '" . $image_sessions_ip . "')
";
$result = $site_db->query($sql1);
}
$get_sessions_microtime = $microtime - 300;
if (isset($num_rows) && $num_rows > 0) {
$site_db->query("DELETE FROM " . IMAGES_SESSIONS_TABLE . " WHERE image_sessions_microtime < " . $get_sessions_microtime);
//$site_db->query("UPDATE " . IMAGES_SESSIONS_TABLE . " SET image_sessions_microtime = '" . $microtime . "', image_id = '" . $image_id . "' WHERE user_id = '" . $user_id . "'");
}
return $user_id;
break;
}
}
}
// End of MOD: Image sessions user.
// Step 6
In includes/constants.php file,
find:
define('IMAGES_TABLE', $table_prefix.'images');
add after:
define('IMAGES_SESSIONS_TABLE', $table_prefix.'images_sessions');
// Step 7 (
09/09/2007)
In includes/sessions.php file,
find:
$this->current_time = time();
add before:
$this->current_date = date('Y-m-d');
$this->current_clocktime = date('H:i:s');
Find:
function logout($user_id) {
global $site_db;
$sql = "DELETE FROM ".SESSIONS_TABLE."
WHERE session_id = '".addslashes($this->session_id)."' OR session_user_id = " . $user_id;
$site_db->query($sql);
$this->set_cookie_data("userpass", "", 0);
$this->set_cookie_data("userid", GUEST);
$this->session_info = array();
return true;
}
replace:
function logout($user_id) {
global $site_db;
$sql = "DELETE FROM ".SESSIONS_TABLE."
WHERE session_id = '".addslashes($this->session_id)."' OR session_user_id = " . $user_id;
$site_db->query($sql);
$sql = "DELETE FROM " . IMAGES_SESSIONS_TABLE . "
WHERE user_id = '" . addslashes($this->session_id) ."' OR user_id = " . $user_id;
$site_db->query($sql);
$this->set_cookie_data("userpass", "", 0);
$this->set_cookie_data("userid", GUEST);
$this->session_info = array();
return true;
}
Find:
function update_session() {
global $site_db;
replace:
function update_session() {
global $site_db, $image_id, $url;
Find:
$this->session_info['session_lastaction'] = $this->current_time;
$this->session_info['session_location'] = $this->user_location;
$this->session_info['session_ip'] = $this->user_ip;
add after:
if (preg_match("/details.php/", $url)) {
$sql = "REPLACE INTO " . IMAGES_SESSIONS_TABLE . "
(field_id, user_id, image_id, image_sessions_date, image_sessions_time, image_sessions_microtime)
VALUES (NULL, '" . addslashes($this->session_id) . "', '" . $image_id . "', '" . $this->current_date . "', '" . $this->current_clocktime . "', $this->current_time)
";
$site_db->query($sql);
}
Find:
if ($this->user_info['user_id'] != GUEST) {
$sql = "UPDATE ".USERS_TABLE."
SET ".get_user_table_field("", "user_lastaction")." = $this->current_time, ".get_user_table_field("", "user_location")." = '$this->user_location'
WHERE ".get_user_table_field("", "user_id")." = ".$this->user_info['user_id'];
$site_db->query($sql);
}
replace:
if ($this->user_info['user_id'] != GUEST) {
$sql = "UPDATE ".USERS_TABLE."
SET ".get_user_table_field("", "user_lastaction")." = $this->current_time, ".get_user_table_field("", "user_location")." = '$this->user_location'
WHERE ".get_user_table_field("", "user_id")." = ".$this->user_info['user_id'];
$site_db->query($sql);
$sql1 = "DELETE FROM " . IMAGES_SESSIONS_TABLE . " WHERE user_id = '" . GUEST . "' AND image_sessions_ip = '" . $this->user_ip . "'";
$site_db->query($sql1);
}
Go details (is active for image) and see.
(For fix - reset table).