Código para mostrar o tempo online do usuário

4 participantes

Ver o tópico anterior Ver o tópico seguinte Ir para baixo

Tópico resolvido Código para mostrar o tempo online do usuário

Mensagem por Allenkar_ 18.11.15 2:20

Detalhes da questão


Endereço do fórum: http://pokemonspacesoul.forumeiros.com/
Versão do fórum: PunBB

Descrição


Olá,
Eu vi que em alguns fóruns o tempo que o usuário é ativo fica no perfil e nas postagens, e eu gostaria se possível, que se alguém souber como fazer, me ajude.

Ex: iria ficar assim no perfil: 169dias 24h 36min 20s Online!


Código para mostrar o tempo online do usuário  1
Allenkar_

Allenkar_
**

Membro desde : 01/05/2014
Mensagens : 90
Pontos : 146

http://poke-mind.forumeiros.com

Ir para o topo Ir para baixo

Membro Entusiasta

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Ace 18.11.15 2:28

Olá,

Poderia nos mandar um fórum onde viu isso?

Att.
Ace

Ace
Membro Entusiasta
Membro Entusiasta

Membro desde : 06/07/2011
Mensagens : 8881
Pontos : 11607

https://ajuda.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Allenkar_ 18.11.15 2:35

Allenkar_

Allenkar_
**

Membro desde : 01/05/2014
Mensagens : 90
Pontos : 146

http://poke-mind.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por MateusAnjosV 18.11.15 14:02

MateusAnjosV

MateusAnjosV
Super Membro

Membro desde : 16/10/2015
Mensagens : 1718
Pontos : 2373

http://holder.forumeiros.com/

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Allenkar_ 18.11.15 15:40

Olá,
Eu tentei, mas não consegui fazer.
Allenkar_

Allenkar_
**

Membro desde : 01/05/2014
Mensagens : 90
Pontos : 146

http://poke-mind.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Chagas 18.11.15 15:47

Olá,
1- É criado dois campos no perfil dos membros, o primeiro tem o propósito de mostrar o tempo de conexão, o outro é usado como um pseudo-banco de dados;
2- O contador inicia quando o membro se conecta no fórum (faz login);
3- Então, a cada 30 segundos (valor padrão que pode ser alterado) o contador do tempo é incrementado e salvo no campo do perfil;
4- O contador só é resetado (reiniciado) quando o membro faz o "Log Out" (se desconecta) do fórum!
Se apenas fechar a página ou o navegador, o contador permanece ativo e é incrementado novamente quando no próximo login.

Abaixo está o código que deve ser adicionado com investimento "Em todas as páginas":
Código:

/*******************************************************************************************************
 * Application: elapsedTime (Total Time Spent On Forums)
 * Description: Will show how much time each member spends logged into the site.
 * Version: RC1 - Beta tester only!
 * Made and Optimizations by JScript - 2015/02/18
 * Copyright (c) 2015 JScript <jscriptbrasil at live dot com>
 * This work is free. You can redistribute it and/or modify it
 * under the terms of the WTFPL, Version 2
********************************************************************************************************
-
Variables that can be changed by the user:
1- tTimeOut
2- checkTime
3- fieldName
Note: For those variables "tTimeout" and "checkTime" ->
      - to avoid the "Request Limit" the lowest value should be 10 seconds and 30 seconds respectively!
*/
var elapsedTime = {
   autor:      'JScript',
   version:   '1.02202015-jq1.9.1',
   codename:   'Narmer (Sheikh Muftah)',

   /**
    * Related to database.
    **/
   fieldName:       'Time Online',
   field_id:       0,
   fd_description: 'Will show how much time each member spends logged into the site.',
   db_field:       0,
   db_content:    '',
   db_description: 'Database to store the data of the module elapsedTime!',
   db_url:       '/admin/index.forum?part=users_groups&sub=users&mode=avatar_profil2&extended_admin=1&tid=',
   response:       '',
   evalTextarea:   'jQuery(\'label:contains("elapsedTime_DB"), span:contains("elapsedTime_DB"), dt:contains("elapsedTime_DB")\', response).closest("dl, tr").find("textarea")',

   db_default: {
      appInfo: {
         module:       'elapsedTime_DB',
         description: 'Database to store the data of the module elapsedTime!',
         author:     'JScript',
         version:     'RC1 b',
         release:     '2015/02/18'
      },
      userInfo: {
         isOnline:    1,
         dateOld:    Number(new Date()),
         dateNow:    Number(new Date()),
         dateSpent:   ''
      }
   },

   /**
    * Related to intervals.
    **/
   lInterval:    10,
   tTimeOut:    10000,
   checkTime:    30000,
   setLoop:    0,

   // other variables...
   evalTID: 'jQuery(\'a[href*="tid="]\').attr("href").split("tid=")[1].split("&")[0]',
   TID: 0,

   /**
    * JavaScript/jQuery functions
    */
   initialize: function() {
      $(function() {
         return (!_userdata.session_logged_in) ? false : elapsedTime.setup();
      });
   },

   setup: function() {
      elapsedTime.TID = eval(elapsedTime.evalTID);
      /**
      * First checks if the database exists!
      **/
      jQuery.get('/profile?mode=editprofile', function(response) {
         elapsedTime.response = eval(elapsedTime.evalTextarea);

         // If the database does not exist, then an administrator will create it now!
         if ((!elapsedTime.response.length) && (_userdata.user_level == 1)) {
            elapsedTime.async(false);
            jQuery.post(elapsedTime.db_url + elapsedTime.TID, { /* <- Parameters! */
               /* Post action */
               action:                'add_field',
               id:                   0,
               type:                   0,
               action:                'configuration_final',
               list_type_field:          2,
               field_name:             'elapsedTime_DB',
               field_desc:             elapsedTime.db_description + ' - Made by JScript, 2015/02/18',
               field_oblig:             0,
               field_display_profil:       1,
               list_field_type_view:       0,
               list_auth_field_himself:    1,
               list_field_view:         0,
               list_separator:            0,
               field_type_2_lng_max:      15000,
               submit:                1,
               field_type_11_max_before:    14,
               field_type_11_max_after:    6
            }).done(function() {
               jQuery.get('/profile?mode=editprofile', function(response) {
                  elapsedTime.response = eval(elapsedTime.evalTextarea);
               });
            });
            jQuery.post(elapsedTime.db_url + elapsedTime.TID, { /* <- Parameters! */
               /* Post action */
               action:                'add_field',
               id:                   0,
               type:                   0,
               action:                'configuration_final',
               list_type_field:          13,
               field_name:             elapsedTime.fieldName,
               field_desc:             elapsedTime.fd_description + ' - Made by JScript, 2015/02/18',
               field_oblig:             0,
               field_display_message:       1,
               field_display_profil:       1,
               list_field_type_view:       0,
               list_auth_field_himself:   1,
               list_field_view:          -1,
               list_separator:          1,
               field_type_2_lng_max:       15000,
               submit:                1,
               field_type_11_max_before:   14,
               field_type_11_max_after:   6
            }).done(function(e) {
               console.log(e)
            });
            elapsedTime.async(true);
         }

         if (!elapsedTime.response.length) {
            return false;
         }

         elapsedTime.db_field = elapsedTime.response.attr('id');

         if (elapsedTime.response.val().length) {
            elapsedTime.db_content = JSON.parse(elapsedTime.response.val().replace(/'/g, '"'));
         }

         if ((!elapsedTime.response.val().length) || (!elapsedTime.db_content.userInfo.isOnline)) {
            elapsedTime.db_content = elapsedTime.db_default;

            elapsedTime.async(false);
               elapsedTime.dataSave(elapsedTime.db_field, JSON.stringify(elapsedTime.db_content).replace(/"/g, "'"));
            elapsedTime.async(true);

            elapsedTime.updateTime();
         }

         if (document.getElementById('fa_welcome') !== null) {
            jQuery('a[href$="logout=1"]').attr('href', jQuery('#logout').attr('href'));
         }
         jQuery('a[href*="logout=1"]').click(function(event) {
            elapsedTime.TID = eval(elapsedTime.evalTID);
            elapsedTime.db_content.userInfo.isOnline = 0;

            elapsedTime.async(false);
               elapsedTime.dataSave(elapsedTime.db_field, JSON.stringify(elapsedTime.db_content).replace(/"/g, "'"));
            elapsedTime.async(true);
         });
         /**
         * Writes the current time in the profile field...
         **/
         setTimeout(function() {
            setInterval(function() {
               elapsedTime.updateTime();
            }, elapsedTime.checkTime);
         }, elapsedTime.tTimeOut);

      }).fail(function(e) {
         console.log(e);
      });
   },

   async: function(mode) {
      jQuery.ajaxSetup({
         async: mode
      });
   },

   dataSave: function(field, content) {
      jQuery.post("/ajax_profile.forum?jsoncallback=?", {
         id: field.split("_")[3],
         user: _userdata.user_id,
         active: "1",
         content: '[["' + field + '", "' + content + '"]]',
         tid: elapsedTime.TID
      }, function(data) {
         // OK!
      }, "json").fail(function(e) {
         console.log(e);
      });
   },

   updateTime: function() {
      elapsedTime.TID = eval(elapsedTime.evalTID);

      jQuery.get('/profile?mode=editprofile', function(response) {
         elapsedTime.response = jQuery('label:contains("' + elapsedTime.fieldName + '"), span:contains("' + elapsedTime.fieldName + '"), dt:contains("' + elapsedTime.fieldName + '")', response).closest('dl, tr').find('input');
         elapsedTime.field_id = elapsedTime.response.attr('id');

         if (elapsedTime.response.length) {
            elapsedTime.response = eval(elapsedTime.evalTextarea);
            elapsedTime.db_content = JSON.parse(elapsedTime.response.val().replace(/'/g, '"'));

            elapsedTime.dataSave(elapsedTime.field_id, elapsedTime.getTime(elapsedTime.db_content.userInfo.dateOld));
         }
      }).fail(function(e) {
         console.log(e);
      });
   },

   getTime: function(date_old, date_now) {
      date_old = date_old || new Date(); //.toLocaleString('en-US', { hour12: false });
      date_now = date_now || new Date(); //.toLocaleString('en-US', { hour12: false });
      //date_old = date_old.split("/").swap(0, 1).join("/");
      //date_now = date_now.split("/").swap(0, 1).join("/");
      date_old = new Date(date_old);
      date_now = new Date(date_now);

      var seconds = Math.floor((date_now - (date_old)) / 1000),
         minutes = Math.floor(seconds / 60),
         hours = Math.floor(minutes / 60),
         days = Math.floor(hours / 24);

      hours = hours - (days * 24);
      minutes = minutes - (days * 24 * 60) - (hours * 60);
      seconds = seconds - (days * 24 * 60 * 60) - (hours * 60 * 60) - (minutes * 60);
      //console.log(days + "d " + hours + "h " + minutes + "m " + seconds + "s ");
      return ((days) ? days + "d " : "") + ((hours) ? hours + "h " : "") + ((minutes) ? minutes + "m " : "") + ((seconds) ? seconds + "s " : "");
   }
};

elapsedTime.initialize();



Wamki
Chagas

Chagas
Membro

Membro desde : 22/10/2015
Mensagens : 893
Pontos : 1098

https://pelotao.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Allenkar_ 18.11.15 15:56

Okay, mas como eu devo criar os campos nos perfis.
e o que eu devo fazer neles assim que os criar?
Allenkar_

Allenkar_
**

Membro desde : 01/05/2014
Mensagens : 90
Pontos : 146

http://poke-mind.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Allenkar_ 18.11.15 16:42

UP!
Allenkar_

Allenkar_
**

Membro desde : 01/05/2014
Mensagens : 90
Pontos : 146

http://poke-mind.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Chagas 18.11.15 18:00

Olá,

Crie dois campos de texto, com qualquer nome, depois me informe já criou que eu possa ajudar na configuração do código, e quero dizer está infringindo uns regras do suporte.

Sugiro que re-leia as regras de novo, que é proibido up antes de passar 24 horas.



Wamki
Chagas

Chagas
Membro

Membro desde : 22/10/2015
Mensagens : 893
Pontos : 1098

https://pelotao.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Allenkar_ 18.11.15 18:59

Já criei:

1º : Tempo Online

2º: Info Time
Allenkar_

Allenkar_
**

Membro desde : 01/05/2014
Mensagens : 90
Pontos : 146

http://poke-mind.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Chagas 18.11.15 23:42

Olá,

Mas senhor.., eu acessei neste link do perfil, visto que não aparecendo os campos que você citou acima.
Flecha ajudeiros http://pokemonspacesoul.forumeiros.com/u1

Wamki




Perdão meu, eu não reparei que quando fica vazio, não aparece no perfil, agora sim corrigi acessando meu perfil, altere o código pra este:

Código:

/*******************************************************************************************************
 * Application: elapsedTime (Total Time Spent On Forums)
 * Description: Will show how much time each member spends logged into the site.
 * Version: RC1 - Beta tester only!
 * Made and Optimizations by JScript - 2015/02/18
 * Copyright (c) 2015 JScript <jscriptbrasil at live dot com>
 * This work is free. You can redistribute it and/or modify it
 * under the terms of the WTFPL, Version 2
********************************************************************************************************
-
Variables that can be changed by the user:
1- tTimeOut
2- checkTime
3- fieldName
Note: For those variables "tTimeout" and "checkTime" ->
      - to avoid the "Request Limit" the lowest value should be 10 seconds and 30 seconds respectively!
*/
var elapsedTime = {
  autor:      'JScript',
  version:  '1.02202015-jq1.9.1',
  codename:  'Narmer (Sheikh Muftah)',

  /**
    * Related to database.
    **/
  fieldName:      'Time Online',
  field_id:      14,
  fd_description: 'Will show how much time each member spends logged into the site.',
  db_field:      13,
  db_content:    '',
  db_description: 'Database to store the data of the module elapsedTime!',
  db_url:      '/admin/index.forum?part=users_groups&sub=users&mode=avatar_profil2&extended_admin=1&tid=',
  response:      '',
  evalTextarea:  'jQuery(\'label:contains("elapsedTime_DB"), span:contains("elapsedTime_DB"), dt:contains("elapsedTime_DB")\', response).closest("dl, tr").find("textarea")',

  db_default: {
      appInfo: {
        module:      'elapsedTime_DB',
        description: 'Database to store the data of the module elapsedTime!',
        author:    'JScript',
        version:    'RC1 b',
        release:    '2015/02/18'
      },
      userInfo: {
        isOnline:    1,
        dateOld:    Number(new Date()),
        dateNow:    Number(new Date()),
        dateSpent:  ''
      }
  },

  /**
    * Related to intervals.
    **/
  lInterval:    10,
  tTimeOut:    10000,
  checkTime:    30000,
  setLoop:    0,

  // other variables...
  evalTID: 'jQuery(\'a[href*="tid="]\').attr("href").split("tid=")[1].split("&")[0]',
  TID: 0,

  /**
    * JavaScript/jQuery functions
    */
  initialize: function() {
      $(function() {
        return (!_userdata.session_logged_in) ? false : elapsedTime.setup();
      });
  },

  setup: function() {
      elapsedTime.TID = eval(elapsedTime.evalTID);
      /**
      * First checks if the database exists!
      **/
      jQuery.get('/profile?mode=editprofile', function(response) {
        elapsedTime.response = eval(elapsedTime.evalTextarea);

        // If the database does not exist, then an administrator will create it now!
        if ((!elapsedTime.response.length) && (_userdata.user_level == 1)) {
            elapsedTime.async(false);
            jQuery.post(elapsedTime.db_url + elapsedTime.TID, { /* <- Parameters! */
              /* Post action */
              action:                'add_field',
              id:                  0,
              type:                  0,
              action:                'configuration_final',
              list_type_field:          2,
              field_name:            'elapsedTime_DB',
              field_desc:            elapsedTime.db_description + ' - Made by JScript, 2015/02/18',
              field_oblig:            0,
              field_display_profil:      1,
              list_field_type_view:      0,
              list_auth_field_himself:    1,
              list_field_view:        0,
              list_separator:            0,
              field_type_2_lng_max:      15000,
              submit:                1,
              field_type_11_max_before:    14,
              field_type_11_max_after:    6
            }).done(function() {
              jQuery.get('/profile?mode=editprofile', function(response) {
                  elapsedTime.response = eval(elapsedTime.evalTextarea);
              });
            });
            jQuery.post(elapsedTime.db_url + elapsedTime.TID, { /* <- Parameters! */
              /* Post action */
              action:                'add_field',
              id:                  0,
              type:                  0,
              action:                'configuration_final',
              list_type_field:          13,
              field_name:            elapsedTime.fieldName,
              field_desc:            elapsedTime.fd_description + ' - Made by JScript, 2015/02/18',
              field_oblig:            0,
              field_display_message:      1,
              field_display_profil:      1,
              list_field_type_view:      0,
              list_auth_field_himself:  1,
              list_field_view:          -1,
              list_separator:          1,
              field_type_2_lng_max:      15000,
              submit:                1,
              field_type_11_max_before:  14,
              field_type_11_max_after:  6
            }).done(function(e) {
              console.log(e)
            });
            elapsedTime.async(true);
        }

        if (!elapsedTime.response.length) {
            return false;
        }

        elapsedTime.db_field = elapsedTime.response.attr('id');

        if (elapsedTime.response.val().length) {
            elapsedTime.db_content = JSON.parse(elapsedTime.response.val().replace(/'/g, '"'));
        }

        if ((!elapsedTime.response.val().length) || (!elapsedTime.db_content.userInfo.isOnline)) {
            elapsedTime.db_content = elapsedTime.db_default;

            elapsedTime.async(false);
              elapsedTime.dataSave(elapsedTime.db_field, JSON.stringify(elapsedTime.db_content).replace(/"/g, "'"));
            elapsedTime.async(true);

            elapsedTime.updateTime();
        }

        if (document.getElementById('fa_welcome') !== null) {
            jQuery('a[href$="logout=1"]').attr('href', jQuery('#logout').attr('href'));
        }
        jQuery('a[href*="logout=1"]').click(function(event) {
            elapsedTime.TID = eval(elapsedTime.evalTID);
            elapsedTime.db_content.userInfo.isOnline = 0;

            elapsedTime.async(false);
              elapsedTime.dataSave(elapsedTime.db_field, JSON.stringify(elapsedTime.db_content).replace(/"/g, "'"));
            elapsedTime.async(true);
        });
        /**
        * Writes the current time in the profile field...
        **/
        setTimeout(function() {
            setInterval(function() {
              elapsedTime.updateTime();
            }, elapsedTime.checkTime);
        }, elapsedTime.tTimeOut);

      }).fail(function(e) {
        console.log(e);
      });
  },

  async: function(mode) {
      jQuery.ajaxSetup({
        async: mode
      });
  },

  dataSave: function(field, content) {
      jQuery.post("/ajax_profile.forum?jsoncallback=?", {
        id: field.split("_")[3],
        user: _userdata.user_id,
        active: "1",
        content: '[["' + field + '", "' + content + '"]]',
        tid: elapsedTime.TID
      }, function(data) {
        // OK!
      }, "json").fail(function(e) {
        console.log(e);
      });
  },

  updateTime: function() {
      elapsedTime.TID = eval(elapsedTime.evalTID);

      jQuery.get('/profile?mode=editprofile', function(response) {
        elapsedTime.response = jQuery('label:contains("' + elapsedTime.fieldName + '"), span:contains("' + elapsedTime.fieldName + '"), dt:contains("' + elapsedTime.fieldName + '")', response).closest('dl, tr').find('input');
        elapsedTime.field_id = elapsedTime.response.attr('id');

        if (elapsedTime.response.length) {
            elapsedTime.response = eval(elapsedTime.evalTextarea);
            elapsedTime.db_content = JSON.parse(elapsedTime.response.val().replace(/'/g, '"'));

            elapsedTime.dataSave(elapsedTime.field_id, elapsedTime.getTime(elapsedTime.db_content.userInfo.dateOld));
        }
      }).fail(function(e) {
        console.log(e);
      });
  },

  getTime: function(date_old, date_now) {
      date_old = date_old || new Date(); //.toLocaleString('en-US', { hour12: false });
      date_now = date_now || new Date(); //.toLocaleString('en-US', { hour12: false });
      //date_old = date_old.split("/").swap(0, 1).join("/");
      //date_now = date_now.split("/").swap(0, 1).join("/");
      date_old = new Date(date_old);
      date_now = new Date(date_now);

      var seconds = Math.floor((date_now - (date_old)) / 1000),
        minutes = Math.floor(seconds / 60),
        hours = Math.floor(minutes / 60),
        days = Math.floor(hours / 24);

      hours = hours - (days * 24);
      minutes = minutes - (days * 24 * 60) - (hours * 60);
      seconds = seconds - (days * 24 * 60 * 60) - (hours * 60 * 60) - (minutes * 60);
      http://console.log(days + "d " + hours + "h " + minutes + "m " + seconds + "s ");
      return ((days) ? days + "d " : "") + ((hours) ? hours + "h " : "") + ((minutes) ? minutes + "m " : "") + ((seconds) ? seconds + "s " : "");
  }
};

elapsedTime.initialize();
Chagas

Chagas
Membro

Membro desde : 22/10/2015
Mensagens : 893
Pontos : 1098

https://pelotao.forumeiros.com

Ir para o topo Ir para baixo

Tópico resolvido Re: Código para mostrar o tempo online do usuário

Mensagem por Allenkar_ 19.11.15 14:52

Funcionou muito obrigado!
Allenkar_

Allenkar_
**

Membro desde : 01/05/2014
Mensagens : 90
Pontos : 146

http://poke-mind.forumeiros.com

Ir para o topo Ir para baixo

Ver o tópico anterior Ver o tópico seguinte Ir para o topo

- Tópicos semelhantes

Permissões neste sub-fórum
Não podes responder a tópicos