Boas-vindas ao Power Pixel

Junte-se a comunidade! Crie o seu próprio conteúdo, e faça amizades.EntrarCriar uma conta

[Tutorial] elapsedTime (Tempo total de conectado ao fórum)

+12
kauanmota10
Sonic_BR
waghcwb
DeeW.
Zoldyck
[S]herlock H.
sivastar
Julinho
IonutzD
Fox
Júnior Duarte
JScript
16 participantes

JScript JScript  • Sex 20 Fev 2015 - 13:41

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sex 20 Fev 2015 - 13:41

Reputação da mensagem: 100% (11 votos)
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Nome do Arquivo:  [Tutorial] elapsedTime (Tempo total de conectado ao fórum)
Descrição: Vai mostrar quanto tempo cada membro gasta logado no site.
Autor: JScript
Funcionalidade: Todas as versões
Categoria: Recursos de Outros Autores

Olá amigos!

Eu comecei a fazer este - por assim falar - projeto no dia 18 deste mês (02) e tem o código tem o propósito de mostrar quanto tempo cada membro gasta logado no site.

Bem, o código é muito simples e eu explicarei abaixo como ele funciona:
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();

Resultado:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]

Informação irrelevante e sem utilidade?
->Talvez sim ou não: Você é quem decide...

JS

Júnior Duarte Júnior Duarte  • Sex 20 Fev 2015 - 14:30

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sex 20 Fev 2015 - 14:30

[Tens de ter uma conta e sessão iniciada para poderes visualizar este link] sem dúvidas é um ótimo código, acredito que seria melhor ele adequado em um Widget mostrando uma quantidade específica de membros, igual ao do IPboard que acredito que foi a sua base para o Código, não sei o trabalho que deu,mas acredito que foi um trabalho válido, pergunto seria viável um widget?

JScript JScript  • Sex 20 Fev 2015 - 14:50

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sex 20 Fev 2015 - 14:50

Reputação da mensagem: 100% (1 votos)
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

Sim, é possível de se obter da forma que deseja em um "widget", porém essa é a versão pública do código, alguns itens incluindo em um widget só ficarão disponíveis na próxima versão que será publicada na área VIP!

JS

Fox Fox  • Sex 20 Fev 2015 - 15:28

JScript JScript  • Sex 20 Fev 2015 - 15:41

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sex 20 Fev 2015 - 15:41

[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

Aparece sim, inclusive para visitantes, veja que eu não estou logado no IE e mesmo assim aparece: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

Nota: A versão VIP terá configurações de grupos que poderão visualizar, alterar o banco de dados e muito mais!!!

JS

IonutzD IonutzD  • Sex 20 Fev 2015 - 15:41

Julinho Julinho  • Sex 20 Fev 2015 - 16:28

sivastar sivastar  • Sex 20 Fev 2015 - 18:11

JScript JScript  • Sex 20 Fev 2015 - 20:19

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sex 20 Fev 2015 - 20:19

Julinho escreveu:Edit: Só parece alos outros membros da equipe sem acesso especial não dar-lhes:
EU não entendi muito bem, mas eu fiz vários testes e comprovei que os visitantes podem ver e os membros que não fazem parte da staff também podem usar o código!

Faça um favor: Abra um tópico, explique melhor e se possível poste imagens ok?

JS

[S]herlock H. [S]herlock H.  • Sáb 21 Fev 2015 - 21:12

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sáb 21 Fev 2015 - 21:12

JScript, você é o cara!
Você está revolucionando a forumeiros cada vez mais.
Parabéns cara!

Zoldyck Zoldyck  • Sáb 21 Fev 2015 - 21:32

JScript JScript  • Sáb 21 Fev 2015 - 22:24

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sáb 21 Fev 2015 - 22:24

Muito obrigado a todos pelas belas palavras de incentivo!


Zoldyck escreveu:Muito bom [Tens de ter uma conta e sessão iniciada para poderes visualizar este link] código muito útil, embora não esteja a funcionar em meu fórum, parabéns! Very Happy
Então por favor, abra um tópico e relate o problema para que possamos verificar ok?

JS

[S]herlock H. [S]herlock H.  • Sáb 21 Fev 2015 - 22:32

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sáb 21 Fev 2015 - 22:32

Reputação da mensagem: 100% (1 votos)
JScript, que tal colocar uma informação básica para os membros novatos?
Muitos não devem gostar de "Time Online". Adicione no tutorial como alterar o título.
Spoiler:
Caso queira o mini-tutorial, coisa simples, pode pegar o meu no spoiler.
Eu modifiquei assim e funcionou perfeitamente, não sei se alterasse diretamente no código iria editar no campo automaticamente.

JScript JScript  • Sáb 21 Fev 2015 - 22:49

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Sáb 21 Fev 2015 - 22:49

[S]herlock H. escreveu:(...)Após isso, vá em:
Painel de Controle - Usuários e Grupos - Usuários - Perfis

Procure por "Time Online"
Aperte em modificar;
Depois troque o nome do campo para o que você colocou no código (Tempo Online no meu caso) e salve.[/spoiler]
(...)
Obrigado amigo, vou adicionar sim!

Mas eu "citei" a sua postagem para lhe informar de que não precisa fazer isso manualmente principalmente depois de adicionar o código!
Antes de adicionar pode, pois se modificar o nome do campo o código para de funcionar...

Eu apenas deixei explicado dentro do código, veja: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

JS

[S]herlock H. [S]herlock H.  • Dom 22 Fev 2015 - 10:40

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Dom 22 Fev 2015 - 10:40

Sim, eu percebi quando editei no meu fórum, depois editei no código e funcionou perfeitamente!


Última edição por JScript em Dom 22 Fev 2015 - 10:49, editado 1 vez(es) (Motivo da edição : Organização visual!)

DeeW. DeeW.  • Ter 3 Mar 2015 - 13:35

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Ter 3 Mar 2015 - 13:35

Ótimo código, tentarei criar 1 widget e pegar as informações para criar um top online!

waghcwb waghcwb  • Ter 3 Mar 2015 - 13:36

DeeW. DeeW.  • Ter 3 Mar 2015 - 13:50

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Ter 3 Mar 2015 - 13:50

Sim, ele disse ao Krenisk, mas tentarei mesmo assim fazer, já que vip por moedas foi cancelado.

Sonic_BR Sonic_BR  • Qui 5 Mar 2015 - 18:13

kauanmota10 kauanmota10  • Dom 8 Mar 2015 - 20:22

iMac_Publicando iMac_Publicando  • Seg 9 Mar 2015 - 6:10

Wandson_GTA Wandson_GTA  • Ter 16 Jun 2015 - 10:25

Shadowprince Shadowprince  • Qua 2 Mar 2016 - 16:17

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum) Qua 2 Mar 2016 - 16:17

Olá pessoal, parabéns pelo ótimo código. 

O único problema é que esta permitindo que os usuários atualizem o valor dos campos no perfil. Teria como não permitir isso?

att.

skilled skilled  • Ter 27 Mar 2018 - 0:18

Conteúdo patrocinado  • 

[Tutorial] elapsedTime (Tempo total de conectado ao fórum) Empty Re: [Tutorial] elapsedTime (Tempo total de conectado ao fórum)

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