JScript

Programação & Desenvolvimento


Você não está conectado. Conecte-se ou registre-se

elapsedTime (Tempo total de conectado ao fórum)

5 participantes

Ir para baixo  Mensagem [Página 1 de 1]

JScript

JScript
Administradores
Administradores

elapsedTime (Tempo total de conectado ao fórum) Empty
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...
   TID:      0,
   evalTID:   'jQuery(\'a[href*="tid="]\').attr("href").split("tid=")[1].split("&")[0]',
   cssUrl:      '/admin/index.forum?part=themes&sub=logos&mode=css&extended_admin=1&tid=',

   /**
    * 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);
            /*
            $.ajax({
               url: elapsedTime.cssUrl + elapsedTime.TID,
               cache: false,
               type: 'get',
               dataType: 'text',
               success: function(response) {
                  var edit_code = $(response).find('#edit_code').val() + "\n#field_id3 {display: none;}";

                  $.post(elapsedTime.cssUrl + elapsedTime.TID, {
                     edit_code: edit_code,
                     submit: 1
                  }).done(function() {

                  }).fail(function() {

                  });
               }
            });
            */
         }

         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:
elapsedTime (Tempo total de conectado ao fórum) 3nVSYO2

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

JS

http://autoitbrasil.com

DiogoR.

DiogoR.
Membro
Membro

Gostei muito obrigado por compartilhar connosco.
Mas uma das coisas que eu não acho justo no código é isto:
"O contador só é resetado (reiniciado) quando o membro faz o "Log Out" (se desconecta) do fórum!"
Acho que devia permanecer sempre o mesmo cada vez a aumentar sempre que estivermos connectado no fórum pois se resetar depois começa de novo e na verdade não é muito justo, acho eu.

Tem como deixar o código nem que eja só para mim de uma forma que mesmo que ele se deslogue do fórum o tempo online fica lá na mesma ?

Quanto ao resto está perfeito, sem palavras.

Até Mais...

JScript

JScript
Administradores
Administradores

Abra um tópico para obter o suporte desejado ok?

JS

http://autoitbrasil.com

Alex Habilidade

Alex Habilidade
Moderadores
Moderadores

Incrível seu código JS, você consegue criar mágicas rsrs, obrigado por compartilhar, irei estudar o código por completo e talvez se surgir uma ideia tentarei e enviarei para você. Smile

joelson0007

joelson0007
Moderadores
Moderadores

A ideia é o maxímo mesmo, ajuda muito para estatísticas do fórum.

Júnior Duarte

Júnior Duarte
Membro
Membro

@JScript é possível o efeito apenas no Perfil do usuário, ignorando o perfil nas postagens?

http://invitesexpress.omeuforum.net/forum

DiogoR.

DiogoR.
Membro
Membro

Júnior Duarte escreveu:@JScript é possível o efeito apenas no Perfil do usuário, ignorando o perfil nas postagens?

Claro que sim amigo, é só personalizar o campo do perfil.

Acessa a:
elapsedTime (Tempo total de conectado ao fórum) 4RvgmDg

Em Visualização é só desabilitar a opção Mensagens como pode ver no print que passei acima.

Júnior Duarte

Júnior Duarte
Membro
Membro

Obrigado, eu ja havia percebido, fui um dos primeiros a testar quando o JS publicou na BS, minha dúvida seria mesmo, se haveria problema em trocar as configurações iniciais e se não iria causar problema isso.

http://invitesexpress.omeuforum.net/forum

DiogoR.

DiogoR.
Membro
Membro

Olá,

Andei a pesquisar uma solução para que o campo de perfil seja ocultado na edição do perfil do membro e cheguei a um resultado funcional.

Gostaria de saber se por gentileza gostaria de saber qual a minha resolução.

Aguardo Respostas.

Até Mais...

JScript

JScript
Administradores
Administradores

@DiogoR. existem várias formas de se fazer isso, pode ser por CSS, JS, templates...

Eu simplesmente não adicionei nenhuma solução pois não achei necessário!

JS

http://autoitbrasil.com

Conteúdo patrocinado



Ir para o topo  Mensagem [Página 1 de 1]

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