PDA

View Full Version : User setable default BB code formatting for each post


Darth Cow
01-10-2005, 10:00 PM
Allow your users to set default formatting for each of their newpostswith the familiar BB code via the options page in their controlpanel.

This requires one file edit and adding a custom profile field.

There is also the option to allow users to choose not to seeautomaticbb code. This requires another file edit and custom profilefield. (Theaddition of this option is the only change between versions1.0 and1.1.)

First, open up your admincp and find the "User Profile Fields" section in the sidebar and click "Add New User Profile Field".

Click "Continue" with the default Single-Line Text Field option selected. Set the following options:

Title: Automatic BB Code
Description: Enter the opening portion of BB code tags that youwouldlike format all of your posts (e.g. [color=red]). Multiple tagsarefine, but no text outside of the tags. Only single quotation marks(nodouble quotation marks) can be used in this field.
Private Field: Yes
Field Searchable on Members List: No
Show on Members List: No
Regular Expression:
^(\[(b|i|u|color|font|size|left|center|right)(\=\'?(\# \w+\s*)+\'?)?\])*$
Display Page: Options: Other

You can change the BB codes in the regular expression to any othersyouhave added on your forum or customize them in any way you choose.Justkeep the same formatting with the | character dividing each tag.

Once you've customized this page to your satisfaction (every other option can be left as the default), click Add.

Now, note the "Name" field for your new field in the User Profile Field Manager. It should be of the format "field123".

You'll need to edit includes/functions_newpost.php. Find the following line:


// ### PREPARE OPTIONS AND CHECK VALID INPUT ###
$post['parseurl'] = intval($post['parseurl']);
$post['email'] = intval($post['email']);
$post['signature'] = intval($post['signature']);
$post['preview'] = iif($post['preview'], 1, 0);
$post['disablesmilies'] = intval($post['disablesmilies']);
$post['enablesmilies'] = iif($post['disablesmilies'], 0, 1);
$post['rating'] = intval($post['rating']);
$post['iconid'] = intval($post['iconid']);
$post['message'] = trim($post['message']);
$post['title'] = trim(preg_replace('/�*32;/', ' ', $post['title']));
$post['emailupdate'] = intval($post['emailupdate']);
$post['folderid'] = intval($post['folderid']);
$post['username'] = trim($post['username']);
$post['posthash'] = trim($post['posthash']);
$post['poststarttime'] = trim($post['poststarttime']);

AFTER it add,


// Darth Cow's auto BB code hack
$auto_bb_opentag = $bbuserinfo['field123'];

preg_match_all("/\[(\w+)(\=\"?\'?(\w+\s*)+\"?\'?)?\]/",$auto_bb_opentag, $auto_bb_tags, PREG_SET_ORDER);
$auto_bb_closetags = array_reverse($auto_bb_tags);
$auto_bb_closetag = "";
foreach ($auto_bb_closetags as $auto_bb_tag)
{
$auto_bb_closetag .= "[/" . $auto_bb_tag[1] . "]";
}

$post['message'] = $auto_bb_opentag . $post['message'] . $auto_bb_closetag;
// End hack

Be sure to edit field123 in the first line to the name of the field you noted above.

Save and upload the file. That's it!

-------------------------------

You can also choice to allow users the option of seeing no automatic bb code. Keep in mind this part will not work if you have enabled caching of posts(vBulletinOptions > Server Settings and Optimization Options >Cached PostsLifespan should equal 0). If you need to cache posts forperformancereasons, then you're out of luck. (There's no technical wayaround this,without saving this information elsewhere in the database,since cachedposts saved parsed BB code for all users--it can't bechanged on anindividual basis as this hack does.)

To do so, add a "Single-Selection Menu" custom profile field with the following options:

Title: Show Automatic BB Code
Description: Set this to "No" to view the forums without anyone else's automatic BB code.
Options: Yes
No Private Field: Yes
Field Searchable on Members List: No
Show on Members List: No
Display Page: Options: Thread Viewing

Do not change the options from Yes and No (exactly) or the removalofautomatic BB code will not work. You can customize the rest oftheoptions as you choice. Once you're done, hit add it and again notethename of the profile field (it's in the form field123).

Open up /includes/functions_bbcodeparse.php. Find the following line:

// ********************* PARSE BBCODE TAGS ***************************

ABOVE it add:

// Darth Cow's auto BB code hack
$show_auto_bbcode = $bbuserinfo['field123'];

global $stopsaveparsed, $parsed_postcache;

if (($stopsaveparsed OR $parsed_postcache['skip'] == true) AND $show_auto_bbcode == "No")
{
$outer_bbcode_stripped2 = $bbcode;
while (true)
{
$outer_bbcode_stripped=preg_replace("/^\[(\w+)(\=\'?(\w+\s*)+\'?)?\](?!.*\[\/\\1\].+)(.+)\[\/\\1\]$/si","\\4",$outer_bbcode_stripped2);

if ($outer_bbcode_stripped2 == $outer_bbcode_stripped)
{
$bbcode= $outer_bbcode_stripped;
break;
}
else
{
$outer_bbcode_stripped2=$outer_bbcode_stripped;
}
}
}
// End hack

Once again, be sure to edit field123 in the first line to the nameofthe field you noted for the "Show Automatic BB Code" option.

Save and upload the file.

Version 1.2: RegExp fix should allow hex values for colors.

HarryBO
01-11-2005, 02:21 PM
Nice One I´ve installed it!

Troak
01-12-2005, 05:19 PM
I'll have to take a look at this, I think some of my members wanted something like it.

Crapaddict
01-13-2005, 02:30 PM
Installed, but i wonder if there would be some kind of way to make it possible for other users to ignore this formatting...
I can imagine that not all of my users would appreciate this, so if they were able to choose to see other users predefined formatting or just the normal text, I think this would be a great addon!

Oblivion Knight
01-13-2005, 02:50 PM
You should try and limit this to font face and font color if possible.

I for one wouldn't want people to have text aligned to the right, or written in a stupidly large font or even spam a website in every single post that they make.

Darth Cow
01-15-2005, 05:13 AM
Installed, but i wonder if there would be some kind of way to make it possible for other users to ignore this formatting...
I can imagine that not all of my users would appreciate this, so if they were able to choose to see other users predefined formatting or just the normal text, I think this would be a great addon! I thought about this too, but I thought that such a modification would require saving the formatting in the database. Now, it occurs to me that I could simply strip out bb code immediately at the start and end of each post on display. I'll see if I can add this in.

Oblivion Knight - It's already quite possible to limit this to font and color. Just remove the additional tags from the regular expression check as I explained in the hack instructions. It already doesn't allow BB code like URLs. As for alignment and font size changes, it's easy for you to optionally remove tags. I only kept the font tag because sometimes more unusual fonts are especially small and need to be enlarged by a level or so.

Oblivion Knight
01-15-2005, 07:44 AM
Ok, my apologies - I didn't read the full hack description.. :)

ZombieAndy
01-30-2005, 03:30 PM
would it be possible to make this work in a shoutbox aswell as on the forums?

KTBleeding
01-30-2005, 04:24 PM
Very strange. I know there's a hack out there that does something similar to this (I even installed it) but now I can't find it. I wanted to know the difference in how they function so I can decide to switch.

ZombieAndy
01-31-2005, 02:29 AM
also.. sorry to post again but it dosn't seem to accept hex values as colours, it comes up with an error when you press save. is there a way to fix this?

carpefile
02-02-2005, 02:42 AM
Works great ! Thanx! My users love it. Any way to limit this to certain usergroups?

skinny
02-07-2005, 10:34 PM
This works very well on 3.0.6. Thanks for the hack, only takes a few minutes to install also :)

carpefile
02-14-2005, 12:09 AM
Is there a way to make this an option rather than a requirement once installed?
I am having a problem with new people joining and that they must choose a default bbcode when registering. Some of them have no clue even what bbcode is, so its throwing a wrench into my board growing.

Many of my existing users love it to death, so I am hoping something can be done besides uninstalling it.

Darth Cow
02-14-2005, 01:49 AM
Is there a way to make this an option rather than a requirement once installed?
I am having a problem with new people joining and that they must choose a default bbcode when registering. Some of them have no clue even what bbcode is, so its throwing a wrench into my board growing.

Many of my existing users love it to death, so I am hoping something can be done besides uninstalling it.
Yes, edit the option and set "Field Required" to "No."

Limiting it to certain usergroups is beyond the scope of the built in vBulletin options for profile fields.

However, you can only choose to make it actual works for certain usergroups easilly.

Change the line at the end of my code:

$post['message'] = $auto_bb_opentag . $post['message'] . $auto_bb_closetag;

To:


if (is_member_of($bbuserinfo, 123))
{
$post['message'] = $auto_bb_opentag . $post['message'] . $auto_bb_closetag;
}


That should work. Just change 123 to the appropriate usergroup you want to enable it for.

As for not accepting hex values, let me fix that. Replace the regular expression with the updated one in the first post.

Creed
02-19-2005, 10:44 AM
This is what I did with mine, works like a charm, and is much easier on the end user:

I created two User Profile Fields:

Type: Single-Line Text Box
Title: Font Color
Description: Enter your preferred font color for each post
Private Field: Yes
Field Searchable on Members List: No
Show on Members List: No

Type: Singe Selection Menu
Title: Font Face
Description: Select your preferred font face for each post
Options:
{
Arial
Arial Black
Arial Narrow
Book Antiqua
Century Gothic
Comic Sans MS
Courier New
Fixedsys
Franklin Gothic Medium
Garamond
Georgia
Impact
Lucida Console
Lucida Sans Unicode
Microsoft Sans Serif
Palatino Linotype
System
Tahoma
Times New Roman
Trebuchet MS
Verdana
}
Private Field: Yes
Field Searchable on Members List: No
Show on Members List: No

Then in your functions_newpost file edit do this (where fieldx is the field number for font color, and fieldx2 is the field number for font face):

// Darth Cow's auto BB code hack
if ($bbuserinfo['fieldx'] != "" && $bbuserinfo['fieldx2'] != "")
{
$auto_bb_opentag = "[color=" . $bbuserinfo['fieldx'] . "]" . "[FONT=" . $bbuserinfo['fieldx2'] . "]";
}
else if ($bbuserinfo['fieldx'] != "")
{
$auto_bb_opentag = "[color=" . $bbuserinfo['fieldx'] . "]";
}
else if ($bbuserinfo['field16'] != "")
{
$auto_bb_opentag = "[font=" . $bbuserinfo['fieldx2'] . "]";
}
else
{
$auto_bb_opentag ;
}

preg_match_all("/\[(\w+)(\=\"?\'?(\w+\s*)+\"?\'?)?\]/",$auto_bb_opentag, $auto_bb_tags, PREG_SET_ORDER);
$auto_bb_closetags = array_reverse($auto_bb_tags);
$auto_bb_closetag = "";
foreach ($auto_bb_closetags as $auto_bb_tag)
{
$auto_bb_closetag .= "[/" . $auto_bb_tag[1] . "]";
}

$post['message'] = $auto_bb_opentag . $post['message'] . $auto_bb_closetag;
// End hack

It is working absolutely flawlessly for me :)

antialiasis
03-27-2006, 05:19 PM
Could this be converted to 3.5.4?