License
Quick Chat is released under GPLv2 license.
Quick Chat Demo
Description
WordPress has given a lot to the Linux community and to me personally so I've decided to give something back by making WordPress plugin for all of us to use. We all like to chat so I've decided to extend WordPress with quick and lightweight Ajax chat plugin. I've also decided to name this WordPress plugin "Quick Chat".
Features
Here are some of the features of Quick Chat WordPress chat plugin:
- New in v4.10: Implement automatic private messages and chat rooms daily cleanup using WordPress cron API
- Add PHP caching WordPress plugins like WP Super Cache or W3 Total Cache compatibility (See FAQ for more)
- Add feature to configure which WordPress user role has Quick Chat moderator capability
- Avoid losing CSS customizations after Quick Chat update (See FAQ for more)
- Supports Quick Flag WordPress plugin to display country flag icons next to chat nicknames
- You can set timeout for disabling updates to inactive user
- Supports multiple private 1 on 1 chat sessions
- Can filter bad words from your chat rooms
- Admin users can easily download chat room transcripts
- Besides gravatar.com avatars, local avatar plugins are also supported
- Includes admin dashboard widget to chat with other admin users from your site backend
- Has message input box character counter to limit message size
- Allows admin users to instantly ban chat participant IP from chat
- Has chat participants list for both sidebar and embedded chat
- Site registered users can have their chat nicknames reserved
- Site admins can reserve additional list of chat nicknames
- Supports incoming messages sound notification for modern browsers
- Supports unlimited number of separate chat rooms
- User interface is translation friendly (translation template, Croatian, Italian, Czech, Romanian, Spanish, Dutch, Chinese, Russian, Brazilian Portuguese, Danish, German, Slovenian, Ukrainian, Estonian, French, Finnish and Welsh (some partial) translation files provided)
- Integrates with WordPress user accounts to use login name as chat nickname
- Comes with quality set of emoticons to spice up your chat experience
- Saves your website bandwidth by sending AJAX requests only when there are new messages
Requirements
- PHP 5
- Requires at least: WordPress 3.3
- Tested up to: WordPress 3.6
- Current version: Quick Chat 4.13
Installation
You can find up to date installation instructions on Quick Chat WordPress.org installation page.
FAQ
You can find up to date FAQ on Quick Chat WordPress.org FAQ page.
Changelog
You can find up to date change log on Quick Chat WordPress.org changelog page.
Your donations
Quick Chat is open source web application created by single person and released under GPLv2 license. This means that you can use or even modify Quick Chat free of charge. Open source development and user support for my WordPress plugins takes at least few hours of my every day so if you find Quick Chat useful you can donate to help it's development. Thanks in advance.
Your feedback
Your feedback would be very appreciated. If you discover any bugs please describe your problem here or using Contact form and I will do my best to resolve it. Feature requests and comments are also welcome and I will try to fulfill any feature requests.
Quick Chat stable version
Quick Chat is hosted by official WordPress plugin directory so that is where you can get it:
Quick Chat next version
If you have time and want to help making Quick Chat better you can test Quick Chat testing versions on your server and post feedback. Quick Chat version posted here will be uploaded to WordPress.org once it is reasonably stable.
Not yet available.
Changelog:
- Not yet available.
Download:
- Not yet available.
Quick Chat old versions
If latest Quick Chat version isn't working for you, here you can find download links to some of the older Quick Chat versions. I recommend that you use latest version if possible:
thanks Marko…I will change the data base and let you know the results…Hope you have a great day tomorrow…
@fastharry
Wish all best to you π
Hi!
The number one request from the users there is to display a list of chat users
@jl
Hi, I agree. I’m one of those users wanting list of chat users:) But now I don’t have time to start something like that, maybe in a few days. If anyone is interested to assist please do π WP useronline is great and can be used until then. The bad thing is that list of chat users will increase Quick Chat bandwidth consumption and strain on server but there will be an option to turn it off. Cheers!
@Marko Hello Again, Marko Can you please give me the code you used to print the username of the user who posted that message. I want to replace the default link of the user name (that reply feature @username) with a link to Buddypress profile of the user. I tried the Current_user->User_login thing but it printed the username of the current logged in member instead of the user posted the message… If I get that code then I’ll be able to complete Quick Chat for Buddypress user.. Or I( should Say a Buddypress Edition)
Thanks!
@Austin
Hi Austin, I’m gonna reply you using email if it’s ok with you because my reply is a bit longer …
Hi Marko…
looks like 7000 in the value was the sweet spot….The website loads in 4 seconds and has been great all morning. I will continue testing but I don’t foresee any problem…
If anyone is having that spinning wheel problem with Chrome, even after updating to the latest plug in version, try the advice Marko gave me a few posts back…
Thanks for the great support!….do me a favor, try the site on your end and let me know what you think…
@Marko
No problem! π
@fastharry
Great you got it working! Lets hope Google resolves this problem with Chrome / Chromium for good ;). Cheers!
@Marko
Thanks for the help via email, I need to tell you that the line number you told me and the line number I see are completely different, I have figured out most of the lines that needs to be edited except the one you refereed as line 332, after which the ‘foreach’ variable is to be given, I think it is after the ‘exit;’ command of the quick-chat.php file, but not sure. Can you please tell me the line after which the Variable is to be defined.
Thank you!
Here are the lines 329 to 334 from quick-chat.php 1.72:
// there is an update
foreach($history as $v){
$v->timestring = date_i18n(...);
}
echo json_encode(array('success'=>1,'updates'=>$history));
exit;
echo json_encode
sends the array of message updates called $history. You need to modify $history array with your url string before being sent to the browser. So you should place your in the existing foreach I’m using for time display, all like this:// there is an update
foreach($history as $v){
$v->timestring = date_i18n(...);
// YOUR CODE HERE
$v->profilelink = link to this users profile using BP functions;
}
echo json_encode(array('success'=>1,'updates'=>$history));
exit;
Just tested it again, works like a charm….It is a shame about google, but I think that is the way of the world. I notice google browser takes longer to load than FF and X, and the favicons in the bookmarks take even longer.
I have been playing with other sites besides mine and there are some that take longer to load with over 1 meg of info. And these are modern popular sites.There is definitely a trend in designing sites that is favoring high speed connections and PC’s that have up to date modern processors. You can see it with browsers, pages with a ton of graphics, even the anti virus software is written with modern specs in mind…Heck, xbox live takes 3 times longer to load than my site with all the graphics on display…and MS is a software company.
I tell you something else I learned. All the facebook like buttons and social media connects are slowing sites down too….They all have to connect to the source page so it is almost like you are loading 20 pages when you are really loading one…
The way of the world I guess…
@fastharry Harry I have a Gzip code to be placed in .htaccess of your WordPress Blog that will magically speed up your website, if you want then I can give it to you.
@Marko
And Can I Echo codes in the ‘Profilelink’ variable? or should I first store the echo in a function and then call the function in Profilelink variable?
@fastharry
Yes all those like buttons slow page drastically. That is why TechyTalk have none of them. Yesterday I’ve added Google plusone (manually, no bloated plugin) but I’m considering to remove it. Also the problem is that people are using say 10 WP plugins that have say 100 features and they use 15 of those features. But everything has to load every time. So the best way is to avoid unnecessary stuff and if you need some functionality to make your own plugin or strip existing plugins of excess functionality. Cheers!
@Austin
$v->profilelink
is nothing more than string containing url if that is what you ask? For example$v->profilelink = 'http://www.techytalk.info';
could be example of string you send to the browser and access it usingupdates[i].profilelink
from javascript part. Your job is to construct that string using BuddyPress functions or manually if you can find regular pattern in BP user profile URLs (I don’t know how those BP urls look like). In this process you will probably need$v->alias
or something unique to be a part of this string.Hi Austin…I read up on gzip…but I am not real savvy when it comes to code. I went into my file manager on hostgator and found this file under hta access…
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
is that the right file and where exactly do I place the gzip code…..Thanks
@fastharry
Yo have that option in Cpanel, something like Gzip compression, sniff around. It will ad that code to the appropriate place…
Thanks marko…I saw their are also plug ins for WP too….I have to tell you, all this stuff is amazing!
@fastharry
Yeah that’s the one, it’s the Htaccess file or simply you can find it in the root directory of your WordPess install via FTP (Not Cpanel File manager). The code you see in this file is actually code placed by WordPress for Permalink structure and you can paste the code after the #END WordPress line after pressing enter.
@Marko
The option in Cpanel is actually for compressing the site content, which is like very slow and Lzip compression, which is not better then Gzip.
help i get this error
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in /homepages/33/d356211435/htdocs/wp-pesoexchanger/wp-content/plugins/quick-chat/quick-chat.php on line 119
@bien
Have you tried deactivating the plugin and re-installing it? Or Maybe you have edited the original coding of your QC version, that is causing the problem.
Try Re-installing it.
@bien
@Austin
Bien it might also be that you are running PHP4?
Hi Marko,
I just installed the latest quick chat, and wow! It’s great! My little jQuery issue is resolved, and the new features are great. Thanks again for all your hard work.
I hope all is well…
Regards,
Mike.
@mike
Hi Mike, nice to hear from you. And it is also nice to hear Quick Chat is working great π
Hello, I was hoping you could help me resolve that footer issue you were talking about where the chat window doesn’t show text entered until I refresh the page, and then it’s okay. The site is linked above, and I tried to paste the
but it didn’t work.
Thanks much,
-Dave
I love the looks and feel – but it has slowed my site down considerably – is there a fix or tweek. I would love to keep it on my site….
@Shep
Hi Shep, can you please elaborate? Are the pages loading longer? Every browser or just one of them? Can you post link or send it to me using contact form if it is private site? Thanks
I am using Chrome – theme is compatible (footer etc). When I activate Quick Chat (widget) – which by-the-way is beautiful on my site – it slows down every page because it appears with every page in the sidebar.
When disabled – speed is back up. I am a bit bummed because I have tried just about every chat out there and by far your is the slickest.
The site is very private and I don’t want to activate the widget unless I am sure you will be right on the site to check it out. I can create a “test account” but it would have limited access. Let me know what to do next π
Thanks,
Shep
@Shep
I don’t understand what you mean by slow down? If you count Google Chrome loading circle spinning for a long time as slow down, this is a Google Chrome bug with types of web applications like QC that use long polling technique (http://code.google.com/p/chromium/issues/detail?id=77060). The fact that Google Chrome is spinning its loading indicator doesn’t mean that your page hasn’t loaded, just that Google Chrome has a little bug that I hope will be fixed soon. Is this the problem?
@Marko
Thanks Marko for trying to help. What I mean is that each and every page takes longer to load. My index page alone takes 2-3times as long to load as it does without the plugin. Once I disable the widget – quick load time come right back.
@Shep
This behavior isn’t typical. Maybe if you send me your page link using contact form I might be able to help. I’ve got reports of Quick Chat working fine on sites with as much as 100 concurrent users chatting, does your site has more than that?
Marko,
I have been using the plugin with good success on my website. I have one important suggestion that I believe would improve page load times, and thus Google Page rankings. This would be to load all of Quick Chat’s JavaScript asynchronously, and only on the pages it needs.
Right now, all the Quick Chat JS is loaded on *every* page on a site, even if only one page actually has the quick chat widget or shortcode. For high performance sites, this is not ideal. Here is my suggested remedy:
1. Remove all the wp_enqueque_script calls for the 3 JavaScript files. This will eliminate the loading on every page problem.
2. In whatever function you are using to write out the “quick_chat_js_vars” add this type of code right below that:
===========
// Load JavaScript asynchronously and only when needed
jQuery(document).ready(function() {
jQuery.getScript( “script1-url” );
jQuery.getScript( “script2-url” );
jQuery.getScript( “script1-url” );
));
===========
This will ensure the JS only gets loaded when needed (only on a page with the shortcode/widget) and will be loaded asynchronously.
@A Fan
Hi! I thought about this a lot. In the “next” version I’m loading all scripts with wp_enqueue but I’m not doing any processing if there isn’t any chat on page. This what you have recommend sounds even better. I will do some goggling and if I manage to integrate async js loading it would be great. You always have good tips, thanks for helping out i appreciate it π
@Marko
I’m happy to help, Marko. I have been learning about the power of asynchronous JavaScript recently and have been trying to put it to good use.
With WordPress, it is so easy to load up a site on plugins, but I find that then the clients end up loading all these JavaScript files they don’t need all the time. One factor is Google page ranking is the page load speed, so anything we can do to decrease that should improve not only the user experience, but also the site’s ranking. It’s a win-win.
@A Fan
All you write is true. The problem with wp_enqueue is that it must go very early during page load and at that time I can’t know is there QC on the page or not. To pull Js from the client side looks like brilliant idea but I must work out the details. I’m puzzled that I must wp_equeue one little script that checks is there QC on the page and then pulls the real thing from the server, am I correct? Thanks
@Marko
Marko,
You shouldn’t need to use wp_enqueue_script at all. I would simply manually code up the sample I provided in your Quick_Chat::widget() PHP function. You could actually print out the script anywhere in your function. It might make sense to do so around line 410, right before you print out the widget.
Also, you may want to look into displaying all the emoticons as a CSS sprite rather than a bunch of individual images. That would speed up load time as well by reducing the number of HTTP requests (probably the #1 factor in page load time).
@Anonymous
Isn’t echoing jQuery.getScript jQuery calls in my JS php function practically same as WP enqueueing little script named like qcjsloader.js with the same jQuery.getScript stuff that loads real QC logic? Also I’m afraid that the speed difference would be small and pause between loading page and QC becoming operational would increase because of .getScript ajax calls? About using CSS sprite I totally agree and I will implement this for sure.
Thanks for your comments and ideas π
@Marko
Marko,
I was looking at an older version of your code, so the line number was incorrect. Sorry for any confusion. This code should go on line 718 of the quick_chat_display_chat() function. Here is the PHP code for you:
======
echo ‘
jQuery(document).ready(function() {
jQuery.getScript( “‘ . $quick_chat_url. ‘js/modernizr.min.js’ . ‘” );
jQuery.getScript( “‘ . $quick_chat_url. ‘js/quickchat.js’ . ‘” );
));
‘;
======
To the point you bring up above, by default, all calls to wp_enqueue_script generate a tag in the HTML . This means the browser will “block” and download these scripts in a synchronous manner before loading all the remaining page elements such as images and other scripts. You seem to load the Quick Chat JS in the footer, which is good. But the browser still has to wait to load that JavaScript before the page load is complete.
In practical purposes, this means the more plugins that use wp_enqueue_script, the slower each WordPress site becomes. And by slower, I mean the page loading takes more time.
Having any script loaded by wp_enqueue_script will slow down page load by increasing the number of blocking HTTP requests. Essentially, no matter how small your “qcjsloader.js” script would be, it would still be preventing the browser from performing another more important task, such as the page load event.
Quick Chat doesn’t need to be loaded immediately upon page load. Or you could have an administration option that says “Load Quick Chat Asynchronously” that would enable asynchronous loading.
Asynchronous loading does not block the browser from downloading any other elements. The Quick Chat JavaScript loading can take place after the page load event, hence the use of jQuery(document).ready(). This means that the page will load faster since it won’t download your three JS files before this event takes place. Which also means better user experience and better search rankings.
See additional details on improving performance here:
http://developer.yahoo.com/performance/rules.html
You may also want to look into minifying your JavaScript before you distribute it with your plugin. This may help with performance slightly by reducing the JS file size. I know it’s a nit-picky detail, but then you would really be adhering to the best practices.
You can use Google’s awesome Closure Compiler to minify JS. Here is a link to the online version of it:
http://closure-compiler.appspot.com/home
Just copy and paste all your JS in there and it will spit out the optimized version.
@A Fan
Thanks for detailed instructions. I totaly agree about providing minified version of JS, I have a few minifies at hand and I will decide which one to use. What I haven’t decided yet is to use async JS loading or not because I don’t know the degree of performance improvement and does it justify added complexity. If the getscript ajax call fails for any reason QC is dead in the water without JS. I must think about it, anyways thanks again and wish you all best.
Quick Chat development update – littleantz user from WP.org forum proposed something like following Quick Chat options: “Disallow logged in users user names to be used by other users” and I plan to add “Reserved chat user names list (comma separated)”. Thanks littleantz for your input π If anyone have any suggestions about this features feel free to share. For the “Reserved chat user names list” I’ve planed to add “admin” and “moderator” by the default, anything else to add?
Hi Marko,
The users at the site are chatting up a storm every day and night, which is writing an enormous log. If I don’t go in the once a day and delete all the messages, peopel report long load times. What do you guys do? Do you have to delete the contents of the chat rooms manually, or do you have something else in place to do this. Seems like that might be useful to have something that deletes the messages at a specified interval.
Many people that use to chat there are returning to the site and since they can chat on iPads, etc. even better. I implemented the WP users plugin as a temp fix for a list of people on the page, but that does not keep track in real time. You hae to reload the page once in a while. A user list in quick chat would be the best.
@jl
Hi jl. If you look at Quick Chat admin options in the “General options” section you will find option named “Keep number of messages(all rooms combined) automatically around this value”. There you enter number of messages and QC will keep message count around this number.
As for user list I’m doing it all in my free time so I can’t promise timing but this feature will find its way into QC in not so distant future. Wish you all best π
Hi people. After spending three days, 8-10 hours a day working on it, here on TechyTalk info you can see beta for Quick Chat v1.80. Code-wise it is one of the biggest changes in QC history so it requires little testing before I upload it to WordPress.org. Here is short changelog:
* Add “Protect registered users user names from being used by other users” admin option
* Add “Restricted chat user names list (comma separated)” admin option
* Additional steps to protect chat against malicious users
* Ajax logic rewritten to use admin-ajax.php
* Ajax calls secured using WordPress nounces
Please test and report here on your findings. You can try to use usernames “admin”, “moderator” that are on the “Restricted chat user names list” by default. This way you can test how it works. Also you can try to use name “marko” (registered user), note that all names are not case sensitive so if “marko” is restricted so is “mArKo”. If new logic works fine, you shouldn’t be allowed to use those names. Thanks for any donation, it would be appreciated π
Hi!
I want to use QC widget, but in my case I need different “room” for each page/post.
I tried to customize your php-code, by replace “default” room by $url, but I have failed.
Do you have any opinion how I can do different “room” for each page/post?
@Dmitriy
Hi! Using url for room name would be the best approach. Try to replace “$content = quick_chat_display_chat($height, $room);” from line 891 in Quick Chat 1.73 with “$content = quick_chat_display_chat($height, the_permalink());” but this is not the most efficient way tho go. I might implement this the proper way in one of the next QC versions π
Enjoy!
Edit: Using $post->ID might be a better idea, more on WP codex http://codex.wordpress.org/Template_Tags/the_ID π
@Dmitriy
Hi, I’ve added this functionality to the Quick Chat 1.80 that I will publish today or tomorrow. I’ve implemented this in a way that if you put string “unique” as sidebar widget chat room name it triggers the behavior that this sidebar chat widget shows unique chat rooms for every post/page. When in home page it shows the “default” chat π
ola sou a meyre
Hello! I have a problem: the administrator can delete the messages of other users! It seems as if the Delete button does not work! What would it be??
@IgorOkCJ
Hi Igor, administrators should be able to delete messages, that is normal. Delete button not working, that isn’t normal. Can you please explain some more?
@Marko
Administrator can not delete other posts! It seems everything is being done correctly: marked messages that I want to remove – Press “Delete” and as a result nothing happens! Messages are not deleted!
@IgorOkCJ
Hi! Unfortunately I can’t debug this without admin account on your site. I suppose you can’t provide me with one and I understand if you can’t. But I don’t know how else to see what goes wrong when you try to delete messages?
Edit:Currently your page layout is totally broken. Also you should update Quick Chat to the latest version 1.82 uploaded today because you might be affected by QC CSS layout bug I’ve fixed today. Cheers