Bots und User in separaten Zeilen

current version: 1.2.1.1
released: 11.07.2011

Re: Bots und User in separaten Zeilen

Postby nickvergessen » Wed Oct 12, 2011 7:05 pm

arg
Code: Select all
$bots_list .= $user->lang['COMMA_SEPARATOR'] . '<em' . $hover_info . '>' .$wwh_username_full . '</em>' . $disp_time;

sollte
Code: Select all
$users_list .= $user->lang['COMMA_SEPARATOR'] . '<em' . $hover_info . '>' .$wwh_username_full . '</em>' . $disp_time;
sein
cheers nickvergessen :geek:

Member of phpBB Development-Team
No Support via PM
User avatar
nickvergessen
Administrator
Administrator
 
Posts: 5748
Topics: 217
Images: 139
Joined: Mon Oct 15, 2007 4:15 pm
phpBB.de: nickvergessen
phpBB.com: nickvergessen

Re: Bots und User in separaten Zeilen

Postby Nashra » Wed Oct 12, 2011 8:39 pm

ausgetauscht und jetzt wird es richtig angezeigt ;)
Danke nickv 8-)
User avatar
Nashra
Posts 40 - 50
Posts 40 - 50
 
Posts: 43
Topics: 9
Images: 0
Joined: Sun Sep 13, 2009 9:03 am
Location: Geldern
phpBB.de: FRvN
phpBB.com: Nashra

Re: Bots und User in separaten Zeilen

Postby Blackwolf_Oz » Tue Oct 25, 2011 10:55 am

I think I want what the the poster above asked for. Hi...Im from Oz :)

I have your mod installed...version 1.2.1.1

I would like to have the bots separate from the users when viewing who is online please. I tried to translate the above but it did not work. :oops:
We are Anonymous. We are Legion. We do not forgive. We do not forget. Expect us.
User avatar
Blackwolf_Oz
Posts < 10
Posts < 10
 
Posts: 2
Joined: Tue Oct 25, 2011 10:35 am
Location: Melbourne Australia

Re: Bots und User in separaten Zeilen

Postby nickvergessen » Mon Nov 21, 2011 1:33 am

nickvergessen wrote:styles/prosilver/template/index_body.html
find:
Code: Select all
<br />{WHO_WAS_HERE_LIST}

after add:
Code: Select all
<br />{WHO_WAS_HERE_LIST_BOTS}


language/de/mods/lang_wwh.php (english auch?)
find:
Code: Select all
));

before add:
Code: Select all
   'BOT_USERS'         => 'Suchmaschinen:',
   'NO_ONLINE_BOTS'   => 'keine Suchmaschinen',


includes/mods/who_was_here.php replace with the following content:
Code: Select all
<?php
/**
*
* @package - NV "who was here?"
* @version $Id$
* @copyright (c) nickvergessen - http://www.flying-bits.org/
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

if (!defined('IN_PHPBB'))
{
   exit;
}

class phpbb_mods_who_was_here
{
   const SORT_ASC = 0;

   const SORT_USERNAME_ASC = 0;
   const SORT_USERNAME_DESC = 1;
   const SORT_LASTPAGE_ASC = 2;
   const SORT_LASTPAGE_DESC = 3;
   const SORT_USERID_ASC = 4;
   const SORT_USERID_DESC = 5;

   static private $prune_timestamp = 0;

   static private $count_total = 0;
   static private $count_reg = 0;
   static private $count_hidden = 0;
   static private $count_bot = 0;
   static private $count_guests = 0;

   static private $ids_reg = array();
   static private $ids_hidden = array();
   static private $ids_bot = array();

   /**
   * Would have been to nice, if we could use a constant.
   */
   static public function table($table_name = 'wwh')
   {
      global $table_prefix;
      return $table_prefix . $table_name;
   }

   /**
   * Update the users session in the table.
   */
   static public function update_session()
   {
      global $db, $user;

      if ($user->data['user_id'] != ANONYMOUS)
      {
         $wwh_data = array(
            'user_id'         => $user->data['user_id'],
            'user_ip'         => $user->ip,
            'username'         => $user->data['username'],
            'username_clean'   => $user->data['username_clean'],
            'user_colour'      => $user->data['user_colour'],
            'user_type'         => $user->data['user_type'],
            'viewonline'      => $user->data['session_viewonline'],
            'wwh_lastpage'      => time(),
         );

         $db->sql_return_on_error(true);
         $sql = 'UPDATE ' . self::table() . '
            SET ' . $db->sql_build_array('UPDATE', $wwh_data) . '
            WHERE user_id = ' . (int) $user->data['user_id'] . "
               OR (user_ip = '" . $db->sql_escape($user->ip) . "'
                  AND user_id = " . ANONYMOUS . ')';
         $result = $db->sql_query($sql);
         $db->sql_return_on_error(false);

         if ((bool) $result === false)
         {
            // database does not exist yet...
            return;
         }

         $sql_affectedrows = (int) $db->sql_affectedrows();
         if ($sql_affectedrows != 1)
         {
            if ($sql_affectedrows > 1)
            {
               // Found multiple matches, so we delete them and just add one
               $sql = 'DELETE FROM ' . self::table() . '
                  WHERE user_id = ' . (int) $user->data['user_id'] . "
                     OR (user_ip = '" . $db->sql_escape($user->ip) . "'
                        AND user_id = " . ANONYMOUS . ')';
               $db->sql_query($sql);
               $db->sql_query('INSERT INTO ' . self::table() . ' ' . $db->sql_build_array('INSERT', $wwh_data));
            }

            if ($sql_affectedrows == 0)
            {
               // No entry updated. Either the user is not listed yet, or has opened two links in the same time
               $sql = 'SELECT 1 as found
                  FROM ' . self::table() . '
                  WHERE user_id = ' . (int) $user->data['user_id'] . "
                     OR (user_ip = '" . $db->sql_escape($user->ip) . "'
                        AND user_id = " . ANONYMOUS . ')';
               $result = $db->sql_query($sql);
               $found = (int) $db->sql_fetchfield('found');
               $db->sql_freeresult($result);
               if (!$found)
               {
                  // He wasn't listed.
                  $db->sql_query('INSERT INTO ' . self::table() . ' ' . $db->sql_build_array('INSERT', $wwh_data));
               }
            }
         }
      }
      else
      {
         $db->sql_return_on_error(true);
         $sql = 'SELECT user_id
            FROM ' . self::table() . "
            WHERE user_ip = '" . $db->sql_escape($user->ip) . "'";
         $result = $db->sql_query_limit($sql, 1);
         $db->sql_return_on_error(false);

         if ((bool) $result === false)
         {
            // database does not exist yet...
            return;
         }

         $user_logged = (int) $db->sql_fetchfield('user_id');
         $db->sql_freeresult($result);

         if (!$user_logged)
         {
            $wwh_data = array(
               'user_id'         => $user->data['user_id'],
               'user_ip'         => $user->ip,
               'username'         => $user->data['username'],
               'username_clean'   => $user->data['username_clean'],
               'user_colour'      => $user->data['user_colour'],
               'user_type'         => $user->data['user_type'],
               'viewonline'      => 1,
               'wwh_lastpage'      => time(),
            );
            $db->sql_query('INSERT INTO ' . self::table() . ' ' . $db->sql_build_array('INSERT', $wwh_data));
         }
      }
      $db->sql_return_on_error(false);
   }

   /**
   * Fetching the user-list and putting the stuff into the template.
   */
   static public function display()
   {
      global $auth, $config, $db, $template, $user;

      $user->add_lang('mods/lang_wwh');

      if (!self::prune())
      {
         // Error while purging the list, database is missing :-O
         $user->add_lang('mods/info_acp_wwh');
         return;
      }

      self::$count_guests = self::$count_bot = self::$count_reg = self::$count_hidden = self::$count_total = 0;
      $wwh_username_colour = $wwh_username = $wwh_username_full = $users_list = $bots_list = '';

      switch ($config['wwh_sort_by'])
      {
         case self::SORT_USERNAME_ASC:
         case self::SORT_USERNAME_DESC:
            $sql_order_by = 'username_clean';
         break;
         case self::SORT_USERID_ASC:
         case self::SORT_USERID_DESC:
            $sql_order_by = 'user_id';
         break;
         case self::SORT_LASTPAGE_ASC:
         case self::SORT_LASTPAGE_DESC:
         default:
            $sql_order_by = 'wwh_lastpage';
         break;
      }
      $sql_ordering = (($config['wwh_sort_by'] % 2) == self::SORT_ASC) ? 'ASC' : 'DESC';

      // Let's try another method, to deny duplicate appearance of usernames.
      $user_id_ary = array();

      $sql = 'SELECT user_id, username, username_clean, user_colour, user_type, viewonline, wwh_lastpage, user_ip
         FROM  ' . self::table() . "
         ORDER BY $sql_order_by $sql_ordering";
      $result = $db->sql_query($sql);

      while ($row = $db->sql_fetchrow($result))
      {
         if (!in_array($row['user_id'], $user_id_ary))
         {
            $wwh_username_full = get_username_string((($row['user_type'] == USER_IGNORE) ? 'no_profile' : 'full'), $row['user_id'], $row['username'], $row['user_colour']);
            $hover_time = (($config['wwh_disp_time'] == '2') ? $user->lang['WHO_WAS_HERE_LATEST1'] . '&nbsp;' . $user->format_date($row['wwh_lastpage'], $config['wwh_disp_time_format']) . $user->lang['WHO_WAS_HERE_LATEST2'] : '' );
            $hover_ip = ($auth->acl_get('a_') && $config['wwh_disp_ip']) ? $user->lang['IP'] . ':&nbsp;' . $row['user_ip'] : '';
            $hover_info = (($hover_time || $hover_ip) ? ' title="' . $hover_time . (($hover_time && $hover_ip) ? ' | ' : '') . $hover_ip . '"' : '');
            $disp_time = (($config['wwh_disp_time'] == '1') ? '&nbsp;(' . $user->lang['WHO_WAS_HERE_LATEST1'] . '&nbsp;' . $user->format_date($row['wwh_lastpage'], $config['wwh_disp_time_format']) . $user->lang['WHO_WAS_HERE_LATEST2'] . (($hover_ip) ? ' | ' . $hover_ip : '' ) . ')' : '' );

            if ($row['viewonline'] || ($row['user_type'] == USER_IGNORE))
            {
               if (($row['user_id'] != ANONYMOUS) && ($config['wwh_disp_bots'] || ($row['user_type'] != USER_IGNORE)))
               {
                  if ($row['user_type'] != USER_IGNORE)
                  {
                     $users_list .= $user->lang['COMMA_SEPARATOR'] . '<span' . $hover_info . '>' . $wwh_username_full . '</span>' . $disp_time;
                  }
                  else
                  {
                     $bots_list .= $user->lang['COMMA_SEPARATOR'] . '<span' . $hover_info . '>' . $wwh_username_full . '</span>' . $disp_time;
                  }
                  $user_id_ary[] = $row['user_id'];
               }
            }
            else if (($config['wwh_disp_hidden']) && ($auth->acl_get('u_viewonline')))
            {
               $users_list .= $user->lang['COMMA_SEPARATOR'] . '<em' . $hover_info . '>' .$wwh_username_full . '</em>' . $disp_time;
               $user_id_ary[] = $row['user_id'];
            }

            // At the end let's count them =)
            if ($row['user_id'] == ANONYMOUS)
            {
               self::$count_guests++;
            }
            else if ($row['user_type'] == USER_IGNORE)
            {
               self::$count_bot++;
               self::$ids_bot[] = (int) $row['user_id'];
            }
            else if ($row['viewonline'] == 1)
            {
               self::$count_reg++;
               self::$ids_reg[] = (int) $row['user_id'];
            }
            else
            {
               self::$count_hidden++;
               self::$ids_hidden[] = (int) $row['user_id'];
            }
            self::$count_total++;
         }
      }

      $users_list = utf8_substr($users_list, utf8_strlen($user->lang['COMMA_SEPARATOR']));
      if ($users_list == '')
      {
         // User list is empty.
         $users_list = $user->lang['NO_ONLINE_USERS'];
      }

      $bots_list = utf8_substr($bots_list, utf8_strlen($user->lang['COMMA_SEPARATOR']));
      if ($bots_list == '')
      {
         // User list is empty.
         $bots_list = $user->lang['NO_ONLINE_BOTS'];
      }

      if (!$config['wwh_disp_bots'])
      {
         self::$count_total -= self::$count_bot;
      }
      if (!$config['wwh_disp_guests'])
      {
         self::$count_total -= self::$count_guests;
      }
      if (!$config['wwh_disp_hidden'])
      {
         self::$count_total -= self::$count_hidden;
      }

      // Need to update the record?
      if ($config['wwh_record_ips'] < self::$count_total)
      {
         set_config('wwh_record_ips', self::$count_total, true);
         set_config('wwh_record_time', time(), true);
      }

      // Disabled, see comment on the method itself.
      //self::log();

      $template->assign_vars(array(
         'WHO_WAS_HERE_LIST'      => $user->lang['REGISTERED_USERS'] . ' ' . $users_list,
         'WHO_WAS_HERE_LIST_BOTS'=> $user->lang['BOT_USERS'] . ' ' . $bots_list,
         'WHO_WAS_HERE_TOTAL'   => self::get_total_users_string($config['wwh_disp_hidden'], $config['wwh_disp_bots'], $config['wwh_disp_guests']),
         'WHO_WAS_HERE_EXP'      => self::get_explanation_string($config['wwh_version']),
         'WHO_WAS_HERE_RECORD'   => self::get_record_string($config['wwh_record'], $config['wwh_version']),
      ));
   }

   /**
   * Deletes the users from the list, whose visit is to old.
   */
   static public function prune()
   {
      global $config;

      $timestamp = time();
      if ($config['wwh_version'])
      {
         self::$prune_timestamp = gmmktime(0, 0, 0, gmdate('m', $timestamp), gmdate('d', $timestamp), gmdate('Y', $timestamp));
         self::$prune_timestamp -= ($config['board_timezone'] * 3600);
         self::$prune_timestamp -= ($config['board_dst'] * 3600);
         self::$prune_timestamp = (self::$prune_timestamp < $timestamp - 86400) ? self::$prune_timestamp + 86400 : ((self::$prune_timestamp > $timestamp) ? self::$prune_timestamp - 86400 : self::$prune_timestamp);
      }
      else
      {
         self::$prune_timestamp = $timestamp - ((3600 * $config['wwh_del_time_h']) + (60 * $config['wwh_del_time_m']) + $config['wwh_del_time_s']);
      }

      if ((!isset($config['wwh_last_clean']) || ($config['wwh_last_clean'] != self::$prune_timestamp)) || !$config['wwh_version'])
      {
         global $db;

         $db->sql_return_on_error(true);
         $sql = 'DELETE FROM ' . self::table() . '
            WHERE wwh_lastpage <= ' . self::$prune_timestamp;
         $result = $db->sql_query($sql);
         $db->sql_return_on_error(false);

         if ((bool) $result === false)
         {
            // database does not exist yet...
            return false;
         }

         if ($config['wwh_version'])
         {
            set_config('wwh_last_clean', self::$prune_timestamp);
         }
      }

      // Purging was not needed or done succesfully...
      return true;
   }

   /**
   * Logs the daily stats.
   * NOTE: Currently not active, as there might be law conflicts in some states.
   */
   static public function log()
   {
      global $config;

      if (!$config['wwh_version'])
      {
         // Logging not allowed for this mode.
         return;
      }

      $log_data = array(
         'guest_users'      => self::$count_guests,
         'hidden_users'      => self::$count_hidden,
         'registered_users'   => self::$count_reg,
         'bots'            => self::$count_bot,
         'hidden_users_list'      => implode(', ', self::$ids_hidden),
         'registered_users_list'   => implode(', ', self::$ids_reg),
         'bots_list'            => implode(', ', self::$ids_bot),
         'start_time'      => self::$prune_timestamp,
         'end_time'         => self::$prune_timestamp + 86400,
      );

      $www_log_hash = self::$count_guests . '-' . self::$count_hidden . '-' . self::$count_reg . '-' . self::$count_bot;

      if ((time() > $config['wwh_log_endtime']) || ($config['wwh_log_hash'] != $www_log_hash))
      {
         global $db;

         if ($config['wwh_log_endtime'] > time())
         {
            $sql = 'UPDATE ' . self::table('wwh_logs') . '
               SET ' . $db->sql_build_array('UPDATE', $log_data) . '
               WHERE log_id = ' . (int) $config['wwh_current_log_id'];
            $db->sql_query($sql);
         }
         else
         {
            $db->sql_query('INSERT INTO ' . self::table('wwh_logs') . ' ' . $db->sql_build_array('INSERT', $log_data));
            set_config('wwh_current_log_id', (int) $db->sql_nextid());
            set_config('wwh_log_endtime', $log_data['end_time']);
         }
         set_config('wwh_log_hash', $www_log_hash);
      }
   }

   /**
   * Returns the Explanation string for the online list:
   * Demo:   based on users active today
   *      based on users active over the past 30 minutes
   */
   static public function get_explanation_string($mode)
   {
      global $config, $user;

      if ($mode)
      {
         return $user->lang['WHO_WAS_HERE_EXP'];
      }
      else
      {
         global $config;

         $explanation = $user->lang['WHO_WAS_HERE_EXP_TIME'];
         $explanation .= $user->lang('WWH_HOURS', (int) $config['wwh_del_time_h']);
         $explanation .= $user->lang('WWH_MINUTES', (int) $config['wwh_del_time_m']);
         $explanation .= $user->lang('WWH_SECONDS', (int) $config['wwh_del_time_s']);

         switch (substr_count($explanation, '%s'))
         {
            case 3:
               return sprintf($explanation, '', $user->lang['COMMA_SEPARATOR'], $user->lang['WHO_WAS_HERE_WORD']);
            case 2:
               return sprintf($explanation, '', $user->lang['WHO_WAS_HERE_WORD']);
            default:
               return sprintf($explanation, '');
         }
      }
   }

   /**
   * Returns the Record string for the online list:
   * Demo:   Most users ever online was 1 on Mon 7. Sep 2009
   *      Most users ever online was 1 between Mon 7. Sep 2009 and Tue 8. Sep 2009
   */
   static public function get_record_string($active, $mode)
   {
      global $config, $user;

      if (!$active)
      {
         return '';
      }
      if ($mode)
      {
         return sprintf($user->lang['WHO_WAS_HERE_RECORD'], $config['wwh_record_ips'], $user->format_date($config['wwh_record_time'], $config['wwh_record_timestamp'])) . '<br />';
      }
      else
      {
         global $config;

         $config['wwh_record_time2'] = $config['wwh_record_time'] - (3600 * $config['wwh_del_time_h']) - (60 * $config['wwh_del_time_m']) - $config['wwh_del_time_s'];
         return sprintf($user->lang['WHO_WAS_HERE_RECORD_TIME'], $config['wwh_record_ips'], $user->format_date($config['wwh_record_time2'], $config['wwh_record_timestamp']), $user->format_date($config['wwh_record_time'], $config['wwh_record_timestamp'])) . '<br />';
      }
   }

   /**
   * Returns the Total string for the online list:
   * Demo:   In total there was 1 user online :: 1 registered, 0 hidden, 0 bots and 0 guests
   */
   static public function get_total_users_string($display_hidden, $display_bots, $display_guests)
   {
      global $user;

      $total_users_string = $user->lang('WHO_WAS_HERE_TOTAL', self::$count_total);
      $total_users_string .= $user->lang('WHO_WAS_HERE_REG_USERS', self::$count_reg);
      if ($display_hidden)
      {
         $total_users_string .= '%s ' . $user->lang('WHO_WAS_HERE_HIDDEN', self::$count_hidden);
      }
      if ($display_bots)
      {
         $total_users_string .= '%s ' . $user->lang('WHO_WAS_HERE_BOTS', self::$count_bot);
      }
      if ($display_guests)
      {
         $total_users_string .= '%s ' . $user->lang('WHO_WAS_HERE_GUESTS', self::$count_guests);
      }

      switch (substr_count($total_users_string, '%s'))
      {
         case 3:
            return sprintf($total_users_string, $user->lang['COMMA_SEPARATOR'], $user->lang['COMMA_SEPARATOR'], $user->lang['WHO_WAS_HERE_WORD']);
         case 2:
            return sprintf($total_users_string, $user->lang['COMMA_SEPARATOR'], $user->lang['WHO_WAS_HERE_WORD']);
         case 1:
            return sprintf($total_users_string, $user->lang['WHO_WAS_HERE_WORD']);
         default:
            return $total_users_string;
      }
   }
}
cheers nickvergessen :geek:

Member of phpBB Development-Team
No Support via PM
User avatar
nickvergessen
Administrator
Administrator
 
Posts: 5748
Topics: 217
Images: 139
Joined: Mon Oct 15, 2007 4:15 pm
phpBB.de: nickvergessen
phpBB.com: nickvergessen

Re: Bots und User in separaten Zeilen

Postby wildchilli » Sat Jan 07, 2012 12:14 pm

Yeah is this mod working for phpbb 3.0.10?

Does it work on Prosilver based styles?.

Many thank is advance
wildchilli
Posts < 10
Posts < 10
 
Posts: 8
Topics: 2
Joined: Thu Oct 08, 2009 8:14 am

Re: Bots und User in separaten Zeilen

Postby Blackwolf_Oz » Sun Mar 25, 2012 9:58 am

Working fine for me ;)

Im using ca_black..pro_silver based.

Image
We are Anonymous. We are Legion. We do not forgive. We do not forget. Expect us.
User avatar
Blackwolf_Oz
Posts < 10
Posts < 10
 
Posts: 2
Joined: Tue Oct 25, 2011 10:35 am
Location: Melbourne Australia

Re: Bots und User in separaten Zeilen

Postby Vox Populi » Mon Mar 26, 2012 3:19 pm

Works for me. Prosilver and PS SE.
Vox Populi
Be kinder than necessary for everyone
you meet is fighting some kind of battle.

IndexWa.org
Vox Populi
Donator
Donator
 
Posts: 4
Images: 0
Joined: Sat Mar 17, 2012 11:41 pm
phpBB.com: edbo1

Previous

Return to NV "Who Was Here?"

Who is online

Users browsing this forum: No registered users and 0 guests