The Development Team: Senior Developer: Wim Albers
Developer/SB Integration: Niels Vandekeybus
Project Management & Testing: Robert Anthony Pitera
Version:
Support: Badwords2 Forums at www.schoolastech.com also
TSMF Badwords2 Forum (Graciously donated by Two Shoes Mambo Factory)
Website: www.schoolastech.com

Badwords2 Text Filtering/Flushing Component - Version
Add-on PHP API Component for Joomla 1.x and Mambo Open Source 4.5.x dynamic portal server and content management engine

Badwords2 Development Team
  • Senior Developer - Wim Albers (walb)
  • Developer/SimpleBoard Integration Assistance - Niels Vandekeybus (progster)
  • Project Management/QA & Testing - Robert Anthony Pitera (rpitera/kaizen)
  • Special thanks to Jan De Graaf and Two Shoes Mambo Factory for Project Assistance and Support.
Based on the original 'Badword Filter' component developed by Pravin Hegde, the Extended version of 'Badword Filter' by Wim Albers
and suggestions by Robert Anthony Pitera.  Badwords2 Text Filtering/Flushing Component is Free Software and is released under the
GNU/GPL License terms.

+ What is it?

The Badwords2 Text Filtering/Flushing Component is an add-on API component for Mambo Open Source 4.5.1 and higher, GNU GPL portal CMS. It is designed as custom component and fully integrated in Mambo.

In addition, special consideration has been made for integrating it into the SimpleBoard Forums Component by Two Shoes Mambo Factory, though instructions are included for integration in other components and modules. Badwords2 integration will be included in future SimpleBoard releases as part of the base package, but integration files are included with this release.

Badwords2 supports the Joomla CMS 1.x and higher Mambo Open Source 4.5.1 and higher.  A Badword Extended version, developed by Wim Albers is also for older versions of Mambo. 

+ What does it do?

Basic Features
  • Replaces words listed in the admin configurable badwords list with asterisks, (i.e. "badword1" becomes "********" in views
  • Case insensitive and finds badwords within strings for thorough filtering/flushing
  • Supports the use of a 'wild card' character (*) in the badwords entries for alternative word form detection
  • Completely NON DESTRUCTIVE; original text remains unchanged in the database
  • Complete administration through Mambo Admin Panel
  • One line of API call to perform badword filtering/flushing for any of your Mambo components
  • Ability to turn Badwords2 filtering/flushing on/off at will
  • Configuration of the language independant badwords list through the admin panel
  • Options to configure regular expressions for advanced filtering/flushing through the admin panel
  • Options to allow special access to users by username through the admin panel
+ SimpleBoard integration features (SB 1.1.0 Stable *only*)
  • Flushes badwords in ALL views, including RSS and PDF and emails
  • Automatically detects admins and moderators and shows UNFILTERED views
  • Moderator emails show both filtered and unfiltered views
  • Option to filter searches and either show filtered results or deny searching for badwords.
  • Allows for configurable end user denied search message or simply shows 0 result.
  • Includes custom "Last 5 Posts" module with filtering/flushing
+ AkoComment integration features (AkoComment 2.0 *only*)
  • Flushes badwords in Commentary entries
  • Automatically detects admins and moderators and shows UNFILTERED views
  • Configurable message support
  • BW2 Integration Tab on AkoComment config to turn filtering on or off
+ AkoBook integration features (AkoBook 3.4.2 *only*)
  • Flushes badwords in GuestBook entries
  • Automatically detects admins and moderators and shows UNFILTERED views
  • Responder emails show filtered views
  • Configurable message support
  • BW2 Integration Tab on AkoBook config to turn filtering on or off
+ CommunityBuilder integration features (CommunityBuilder 1.0 RC1 *only*)
  • Flushes badwords in SimpleBoard forum view tab for subject and username
  • Automatically detects admins and moderators and shows UNFILTERED views

+ How do I install it?

To get the basic features of Badwords2 operating, follow the standard component install procedure; and upload the zip package through the Mambo Component installation section in the admin portal.
  • Browse to the location of the zip package through Mambo component installer.
  • Choose upload and install
To get the Third Party integrations working, follow the instructions in the README.TXT file in the appropriate integration zip file. IMPORTANT: Read each integration instruction file VERY CAREFULLY! In each case, you will be replacing an original distribution file with a Badwords2 version - if you have made any special modifications, you may wish to do the integration MANUALLY by comparing the differences. In all cases, our modified code is commented so just search for the word "badword" to find the modifications.

+ How do I use it?

Actually, 'using' it is quite transparent; Badwords2 works in the background when it is enabled without any admin intervention but there are a few things to setup in the configuration to customize it for your specific needs.
+ Badwords list

Two sample words ("badword1" and "badword2") are already in the list for testing purposes. It is advised that you attempt to make a post using these words to determine if Badwords2 is functional before adding words to the list. To add a word, simply choose 'New' from the options and enter the word in the blank provided. You can edit an existing word by clicking directly on it or checking the box next to the word and choosing "Edit". To delete a word from the list, check the box next to the word or words you wish to delete and choose the "Delete" option above.

Give some thought to your word choices and forms here; Badwords2 can find words no matter the case or within a string, but it is easier (and more accurate) to use multiple forms of a offending word. Also some 'creative' users may substitute a letter with one that looks similar in an effort to bypass censoring, replacing a "U" with a "V" for example, so you may want to consider this when making your list up.

The badword entry is just a string to Badwords2 so you can use it with any language. In addition, the interface supports English and Dutch language options; If you are interested in doing a translation into your native language, please contact us! We'd love to include your language and we'll credit you appropriately!

Badwords2 supports the use of wildcards in the badwords field entry for alternative word form detection; this can be a very powerful way of flushing various forms of a word with a single entry. The easiest way to see this in action is with the examples below, which show the effects of using a badword and the wild card character "*" in either the beginning or end of our badword "funk" and the results of flushing compared to the original.

NOTE: ONLY THE ASTERISK WILDCARD IS SUPPORTED!!! If you need more specific flexibility, then consider using the regular expressions feature.

+ Wildcard Examples

If the badword entry = "funk" (Literally, the string "funk" all by itself), then the flushing results would be as follows;

  • funk = ****
  • Funky = Funky
  • Motherfunker = Motherfunker
  • motherfunk = motherfunk
  • funkster = funkster
  • funk you = **** you
If the badword entry = "*funk" (Literally, the string "funk" all by itself AND/OR with characters PRECEDING it), then the flushing results would be as follows;
  • funk = ****
  • Funky = Funky
  • Motherfunker = Motherfunker
  • motherfunk = mother****
  • funkster = funkster
  • funk you = **** you
If the badword entry = "funk*" (Literally, the string "funk" all by itself AND/OR with characters AFTER it), then the flushing results would be as follows;
  • funk = ****
  • Funky = ****y
  • Motherfunker = Motherfunker
  • motherfunk = motherfunk
  • funkster = ****ster
  • funk you = **** you
If the badword entry = "*funk*" (Literally, the string "funk" all by itself AND/OR with characters PRECEDING AND/OR AFTER it), then the flushing results would be as follows;
  • funk = ****
  • Funky = ****y
  • Motherfunker = Mother****er
  • motherfunk = mother****
  • funkster = ****ster
  • funk you = **** you
+ Regular expressions

A regular expression (regex or regexp for short) is a special text string for describing a search pattern. You can think of regular expressions as wildcards on steroids. You are probably familiar with wildcard notations such as *.txt to find all text files in a file manager. The regex equivalent would be .*\.txt

While not required for operation, regular expressions can be used to fine tune Badwords2 detection. If you are not familiar with the use of regular expression and their syntax, we'd advise you to leave the sample entry as it is. You can find a great Regular Expressions reference at here explains the basics and includes additional help and references.

To add a new regular expression, simply choose "New" from the options and put the expression in the blank provided. You can edit or delete a regular expression using the same instructions as the badwords listing.

+ Special User Access

Badwords2 provides a facility to allow specific users to post and see words in the badwords list. Note that you will need to use the *EXACT* username as it appears in the Mambo registered user list and it is advisable to test to make sure that the username matches. Add a new user by choosing "New" from the options above the list and put the MAMBO USER NAME in the blank provided. Again, You can edit or delete a special user using the same instructions as the badwords listing.

+ Settings

Settings are pretty self explanatory, but let's go over them anyway...

  • Perform Filtering - Turn on Badwords2 filtering. ("Yes" turned on by default, NOTE: "No" turns off ALL filtering throughout Mambo!!)
  • Apply RegExp - Turn on Badwords2 filtering using regular expressions. ("No" turned on by default, Yes - Turn on Badwords2 filtering using regular expressions)
  • Allow Special User Exceptions for Badwords2 - Allows specified users in the Special Users List to use listed badwords ("Yes" turned on by default, No - Do not allow any listed badwords by ANY user)
+ About Badwords 2

Shows the version number, credits/contact/support info and this file

+ How can I add Badwords2 Flushing/filtering to "Application XYZ"?

The Badword Extended Filter is an API component which provides an API for badword filtering that can be invoked through any of your Mambo components
  • Include the components/com_badword/class.badword.filter.php in your php files
  • Invoke the Badword::Filter(text, user) API which returns
    • 1 - if the text includes a bad word
    • 0 - if the text passes the badword test
The Badwords2 Text Filtering/Flushing Component is an API component which provides an API for badword filtering that can be invoked through any of your Mambo components
  • Include the components/com_badwords2/class.badwords2.filter.php in your php files
  • Invoke the Badword::Flush(text, user) API which returns
  • A moderated string with a string of "*" replacing the badwords (case insensitive) found.
+ Sample usage
Include the following lines at appropriate places in your php file require_once( 'components/com_badwords2/class.badwords2.php' );

// $msg is the text to be filtered
// $my is Mambo user variable available as a global

$expletivesExist = Badword::filter($msg, $my);
if ($expletivesExist == 0)
{
// do something
}
else
{

// throw error
}

 

An example of content flushing. Frontend in components/com_content.php before the content is stored in the database
Mambo 4.5.2.3 function saveContent (line 1269).

Insert before or after $isNew = $row->id < 1; (line 1278)

// Search for bad words and replace by ****
require_once( 'components/com_badwords2/class.badwords2.php' );

// e.g. $row->title is the text to be filtered
// $my is Mambo user variable available as a global

$row->title = Badword::flush($row->title, $my);
$row->introtext = Badword::flush($row->introtext, $my);
$row->fulltext = Badword::flush($row->fulltext, $my);

// End bad words

And for the backend, locate in administrator/components/com_content/admin.content.php
Mambo 4.5.2.3 function saveContent (line 560).

Insert after or before statement $isNew = ( $row->id < 1 ); (line 572)

// Search for bad words and replace by ****
require_once( $GLOBALS['mosConfig_absolute_path'] . '/components/com_badwords2/class.badwords2.php' );

// e.g. $row->title is the text to be filtered
// $my is Mambo user variable available as a global

$row->title = Badword::flush($row->title, $my);
$row->introtext = Badword::flush($row->introtext, $my);
$row->fulltext = Badword::flush($row->fulltext, $my);

// End bad words

The results will be saved as cleaned content.