The forum of the forums
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Chatbox access by post count

2 posters

Go down

Solved Chatbox access by post count

Post by DVAted November 1st 2015, 1:00 pm

Hello

Please understand I've spent days on this forum looking
for similar topics with working solutions.

I did find the following main topics:
https://help.forumotion.com/t137827-request-certain-post-count-before-accessing-the-chatbox
This started off fairly promising.
"Looking for a code or a system to implement on my forun to make it so new members have to have a post count of 5 to access the chatbox."
"That the chatbox is visible, but can only post if you have the minimum amount of posts. "

That's all I wanted, except 30 posts instead of 5.

Then it goes on to say:
"You can only post messages When You have more than 5 threads started!"
But I don't want threads started, I just want simple posts, replies to existing topics.

THEN it goes further saying:
"from all members with an account that was older then 5 days and in order to see that chat box you had to make at least 1 post in a 24h period also with safe list to add some admins or like people who work on the site but don't post"
Wait.. what? WHY? Why "an account that was older then 5 days"
and why "you had to make at least 1 post in a 24h period" ?
That is NOT what the topic was supposed to be about.

"so these settings above would set it to require 2 post every 5 days if the joindate was longer then 10 days ago .. also user 3,876,232,1221,9764 will not be effected by this script"
Nope. Nope. Nuh-uh. Nooooo...

Further on, I already have a group setup for members under 30 posts, so I decided to check this out: https://help.forumotion.com/t137069-controlling-the-chatbox-group-based-access
But then it says "I'm using AWC" which means AvecWeb Chat. I have the default Forumotion chatbox, not AWC

I'm fairly sure this uses script for the same AWC
https://help.forumotion.com/t138130-post-requirement-to-use-chatbox-filter-by-usergroups

I tried some variations and neither of it worked.
Like this one:
Code:
$(function() {
  if (_userdata.user_posts >= 30) {
and this
Code:
$(function() {
  var ac = document.getElementById('avacweb_chat_button');
  ac.style.display = 'none';
  if (_userdata.user_posts >= 100) ac.style.display = '';
  else ac.parentNode.removeChild(ac);
});
But I think they're also for AvecWeb Chat Sad I don't even know what that is lol

Also, for full disclosure, I use several other customization scripts to my chatbox
particularly, I included the autologin, the archives in new tab,
the chatbox in toolbar and the round buttons.

I only enabled autologin today, but unless I can make it an option for people to turn on and off, I think I'll disable it.
This is the full current script (with some CSS modifications as well though)
Code:
(function() {
  if (!window.FA) window.FA = {};
  if (FA.Chat) {
    if (window.console) console.warn('FA.Chat has already been initialized');
    return;
  }

  FA.Chat = {

    // chatbox settings
    config : {
      height : '60%',
      width : '70%',
   
      live_notif : true,
      sound_notif : {
        enabled : true,
        file : 'https://ia601507.us.archive.org/3/items/wooshsfx/wooshsfx.mp3'
      },
      notifRate : 10000
    },

    // language settings
    lang : {
      chatbox : 'Chatbox',
      new_msg : 'A new message has been posted in the <a href="javascript:FA.Chat.toggle();">chatbox</a>.'
    },

    // technical data below
    node : {}, // node cache
    users : 0, // users in chat
    messages : 'initial', // total chat messages
    actif : false, // tells us if the chatbox is opened
    notifActif : false, // tells us if the notifications are active

    // initial setup of the chatbox
    init : function() {
      var right = document.getElementById('fa_right'),
          container = document.createElement('DIV'),
          button = document.createElement('A'),
          audio;

      button.id = 'fa_chat_button';
      button.innerHTML = FA.Chat.lang.chatbox + ' <span id="fa_chatters">(0)</span>';
      button.onclick = FA.Chat.toggle;
      FA.Chat.node.button = button;

      container.id = 'fa_chat_container';
      container.innerHTML = '<iframe id="fa_chat" src="/chatbox"></iframe>';
      container.style.width = FA.Chat.config.width;
      container.style.height = FA.Chat.config.height;
      container.style.bottom = '-' + FA.Chat.config.height;
      container.style.visibility = 'hidden';

      if (right) {
        right.insertBefore(button, right.lastChild); // add the chat button to the right side of the toolbar
        document.body.appendChild(container);
     
        // create the notification audio element
        if (FA.Chat.config.sound_notif.enabled) {
          audio = document.createElement('AUDIO');
          audio.src = FA.Chat.config.sound_notif.file;
          if (audio.canPlayType) {
            FA.Chat.node.audio = audio;
            document.body.appendChild(audio);
          }
        }

        FA.Chat.node.container = document.getElementById('fa_chat_container');
        FA.Chat.node.chatters = document.getElementById('fa_chatters');
        FA.Chat.node.frame = document.getElementById('fa_chat');
        FA.Chat.node.frame.onload = FA.Chat.getFrame;
      }
   
      delete FA.Chat.init;
    },

    // get the frame window, document, and elements
    getFrame : function() {
      if (FA.Chat.poll) window.clearInterval(FA.Chat.poll);
      if (this.contentDocument || this.contentWindow) {
        FA.Chat.window = this.contentWindow;
        FA.Chat.document = this.contentDocument ? this.contentDocument : FA.Chat.window.document;
     
        FA.Chat.node.message = FA.Chat.document.getElementById('message');
        FA.Chat.node.members = FA.Chat.document.getElementById('chatbox_members');
     
        FA.Chat.poll = window.setInterval(FA.Chat.listen, 300); // listen for changes every 0.3 seconds
      }
    },
 
    // listen for changes in the chatbox
    listen : function() {
      var users = FA.Chat.node.members.getElementsByTagName('LI').length,
          messages = FA.Chat.window.chatbox.messages.length;
   
      // update user count
      if (users > FA.Chat.users || users < FA.Chat.users) {
        FA.Chat.users = users;
        FA.Chat.node.chatters.innerHTML = '(' + FA.Chat.users + ')';
      }
   
      // initial / active updates
      if ((FA.Chat.messages == 'initial' && messages) || FA.Chat.notifActif || FA.Chat.actif) FA.Chat.messages = messages;
   
      // notify new messages while connected and the chatbox is closed
      if (!FA.Chat.actif && !FA.Chat.notifActif && FA.Chat.window.chatbox.connected && (messages > FA.Chat.messages || messages < FA.Chat.messages)) {
        FA.Chat.messages = messages; // update message count
        FA.Chat.notifActif = true;
     
        if (FA.Chat.config.live_notif) FA.Chat.notify(FA.Chat.lang.new_msg); // show live notification
        if (FA.Chat.config.sound_notif.enabled && FA.Chat.node.audio) FA.Chat.node.audio.play(); // play sound notification
     
        // wait before notifying the user again
        window.setTimeout(function() {
          FA.Chat.notifActif = false;
        }, FA.Chat.config.notifRate);
      }
    },
 
    // create a custom notification
    notify : function(msg) {
   
      var notif = document.createElement('DIV'),
          live = document.getElementById(Toolbar.LIVE_NOTIF);
       
      notif.className = 'fa_notification';
      notif.innerHTML = '<div class="content ellipsis">' + msg + '</div>';
      notif.style.display = 'none';
   
      $(notif).mouseover(function() { $(this).stop(true, true) });
      $(notif).mouseleave(function() { $(this).delay(5000).fadeOut() });
   
      live.insertBefore(notif, live.firstChild);
      $(notif.firstChild).dotdotdot();
   
      $(notif).fadeIn(100, function() { $(this).delay(10000).fadeOut() });
    },
 
    // toggle the display state of the chatbox
    toggle : function() {
      var container = FA.Chat.node.container.style;
     
      if (/hidden/i.test(container.visibility)) {
        FA.Chat.node.button.className = 'fa_chat_active';
        FA.Chat.actif = true;
       
        container.visibility = 'visible';
        container.bottom = '3px';
       
        // auto focus the message field
        window.setTimeout(function() {
          FA.Chat.node.message.focus();
        }, 350); // some browsers ( firefox ) need a delay
      } else {
        FA.Chat.node.button.className = '';
        FA.Chat.actif = false;
       
        container.visibility = 'hidden';
        container.bottom = '-' + FA.Chat.config.height;
      }
    }

  };

  $(function(){
    // initialize the chat when the document is ready and the user is logged in
    if (_userdata.session_logged_in) $(FA.Chat.init);
  });
})();

$(window).load(function() {
  var chatbox_script = function() {
    setTimeout(function(){ $('#chatbox_option_co:visible').click() }, 1000);
  };
  var s=document.createElement('script');s.text="("+chatbox_script.toString()+")();";$('object[data^="/chatbox/index.forum"],iframe[src^="/chatbox/index.forum"]').each(function(){try{$(this.contentDocument||this.contentWindow.document).find("#chatbox").closest("html").find("head").first().each(function(){this.appendChild(s.cloneNode(true))})}catch(a){}})
});

$(window).load(function() {
  var chatbox_script = function() {
    $("#chatbox_option_with_archives a").attr('target', 'ChatBox');
  };
  var s=document.createElement('script');s.text="("+chatbox_script.toString()+")();";$('object[data^="/chatbox/index.forum"],iframe[src^="/chatbox/index.forum"]').each(function(){try{$(this.contentDocument||this.contentWindow.document).find("#chatbox").closest("html").find("head").first().each(function(){this.appendChild(s.cloneNode(true))})}catch(a){}})
});
I'm fairly sure it's not part of the conflict.

Please, help me out. Members with 0 posts have recently been causing problems.
I don't care if newbies can access the /chatbox link directly to log in, most of them don't even know that exists. I just don't want them to be able to post on the main page (or toolbar chatbox) unless they have made 30 posts.


Last edited by DVAted on November 2nd 2015, 8:58 am; edited 1 time in total
DVAted
DVAted
Forumember

Posts : 61
Reputation : 3
Language : English

http://gunetwork.org

Back to top Go down

Solved Re: Chatbox access by post count

Post by Ange Tuteur November 1st 2015, 6:16 pm

Hi @DVAted,

If you only want to display the toolbar chatbox for those with a specific post count find the following condition :
Code:
if (_userdata.session_logged_in) $(FA.Chat.init);

and replace it by :
Code:
if (_userdata.session_logged_in && _userdata.user_posts >= 30) $(FA.Chat.init);


and for the other scripts which start with :
Code:
$(window).load(function() {

You can replace them with this :
Code:
$(window).load(function() {
  if (_userdata.user_posts < 30) return;
So it'll only execute the code inside if their posts are greater than 30.
Ange Tuteur
Ange Tuteur
Forumaster

Male Posts : 13246
Reputation : 3000
Language : English & 日本語
Location : Pennsylvania

https://fmdesign.forumotion.com

Back to top Go down

Solved Re: Chatbox access by post count

Post by DVAted November 1st 2015, 9:30 pm

oh thank you for replying on a Sunday evening, Ange, I really appreciate it.
The little tricks you made worked, the users with no posts or below 30 no longer have the chatbox in the toolbar.

However, they still have the chatbox on the front (home) page on top. This is from my HTML of Display/General/Template "body_index" Home Page code

Code:
<!-- BEGIN switch_chatbox_activate -->
   <tr>
      <td class="row1">
         <span class="gensmall">{TOTAL_CHATTERS_ONLINE}&nbsp;:&nbsp; {CHATTERS_LIST}<br />
            <!-- BEGIN switch_chatbox_popup -->
            <div id="chatbox_popup"></div>
            <script type="text/javascript">
            //<![CDATA[
            insertChatBoxPopup('{disable_viewonline.switch_chatbox_activate.switch_chatbox_popup.U_FRAME_CHATBOX}', '{L_CLICK_TO_JOIN_CHAT}');
            //]]>
            </script>
            <!-- END switch_chatbox_popup -->
         </span>
      </td>
   </tr>
   <!-- END switch_chatbox_activate -->
is there a way I can neutralize that for them as well?

also, I've forgotten to mention I included a rules link under the chatbox as well:
Code:
{CHATBOX_TOP}
<!-- BEGIN switch_user_logged_in -->
<div align="center" class="chatRules"><a href="/t8055-chatbox-rules" target="_blank">CHATBOX RULES</a></div>
<!-- END switch_user_logged_in -->
so if I remove the chatbox from the front page for everyone, the rules would be harder to reference as well, as I haven't figured out how to hotlink them in the toolbar popup.

again, thank you Bow 2


Last edited by DVAted on November 2nd 2015, 8:18 am; edited 1 time in total
DVAted
DVAted
Forumember

Posts : 61
Reputation : 3
Language : English

http://gunetwork.org

Back to top Go down

Solved Re: Chatbox access by post count

Post by Ange Tuteur November 1st 2015, 10:30 pm

No problem. ^^ We should be able to use some JavaScript to hide both these elements until they reach the specified amount of posts.

Try replacing the stats part of the template with this :
Code:
<!-- BEGIN switch_chatbox_activate -->
  <tr style="display:none;" id="stats_chat_row">
      <td class="row1">
        <span class="gensmall">{TOTAL_CHATTERS_ONLINE}&nbsp;:&nbsp; {CHATTERS_LIST}<br />
            <!-- BEGIN switch_chatbox_popup -->
            <div id="chatbox_popup"></div>
            <script type="text/javascript">
            //<![CDATA[
            insertChatBoxPopup('{disable_viewonline.switch_chatbox_activate.switch_chatbox_popup.U_FRAME_CHATBOX}', '{L_CLICK_TO_JOIN_CHAT}');
            if (_userdata.user_posts >= 30) {
              document.getElementById('stats_chat_row').style.display = '';
            }
            //]]>
            </script>
            <!-- END switch_chatbox_popup -->
        </span>
      </td>
  </tr>
  <!-- END switch_chatbox_activate -->

and replace the chatbox area with this :
Code:
<div id="chatbox_top_div" style="display:none;">
{CHATBOX_TOP}
<!-- BEGIN switch_user_logged_in -->
<div align="center" class="chatRules"><a href="/t8055-chatbox-rules" target="_blank">CHATBOX RULES</a></div>
<!-- END switch_user_logged_in -->
</div>
<script type="text/javascript">//<![CDATA[
if (_userdata.user_posts >= 30) {
  document.getElementById('chatbox_top_div').style.display = '';
}
//]]></script>
Ange Tuteur
Ange Tuteur
Forumaster

Male Posts : 13246
Reputation : 3000
Language : English & 日本語
Location : Pennsylvania

https://fmdesign.forumotion.com

Back to top Go down

Solved Re: Chatbox access by post count

Post by DVAted November 2nd 2015, 8:58 am

Thank you! It worked exactly as you said
You are the grand pharaoh of scripting Bow 2
Much appreciation and respect!
DVAted
DVAted
Forumember

Posts : 61
Reputation : 3
Language : English

http://gunetwork.org

Back to top Go down

Solved Re: Chatbox access by post count

Post by Ange Tuteur November 2nd 2015, 11:53 am

You're welcome ^^

Topic archived

Have a good day. Smile
Ange Tuteur
Ange Tuteur
Forumaster

Male Posts : 13246
Reputation : 3000
Language : English & 日本語
Location : Pennsylvania

https://fmdesign.forumotion.com

Back to top Go down

Back to top

- Similar topics

 
Permissions in this forum:
You cannot reply to topics in this forum