View Single Post
  #8  
Old 03-26-2004, 04:10 AM
Velocd's Avatar
Velocd Velocd is offline
 
Join Date: Mar 2002
Location: CA University
Posts: 1,696
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

This hack is underway, and works in the following.

In the ACP, there is a new category called BB Code Functions in the left navbar, underneath Custom BB Codes.

The administrator can add functions to be used in bbcode that are user-defined or internal (built in PHP functions, like rand(), str_replace(), and hundreds of others).

Functions are added by specifying a title for the function, the handle of the function (which is how the function is called), a description, and optional file path to a PHP file containing a user defined function.

If no path is specified to a custom PHP file containing your function, the script will check to see if the handle name is an internal function. If it isn't, an error is outputted.

If the path specified points to an empty file, OR non PHP file, OR a correct PHP file but it doesn't contain the function by the handle name, OR the correct function is present but incorrect number of arguments (there must be AT LEAST 1 argument), then an error will be outputted.

Once a function is added, you can edit a bbcode in the bbcode manager, and there is a drop-down list for selection a function the bbcode applies to. There can be a max of 2 user-defined arguments passed in any function, and those are the normal bbcode arguments: {param} and {option}. The bbcode tag itself doesn't have to have the same name as the function handle.

An example of the whole script:

1. User creates a bbcode function that points to the internal function rand()
2. User create a bbcode that is applied to the function rand, one that takes 2 paramters: {param} and {option}.

3.

Usage: [random="100"]200[/random]
Masked: [random="{option}"]{param}[/random]
PHP: rand({option}, {param});

This whole tag when used inside a post would return a random number between 100-200, and uses the PHP function rand() to perform the operation.

4. If by chance you create a tag for the function rand, but with one argument, which would have to be {param}, then you may or may not be lucky about getting a PHP error.

By default the hack substitutes the value 0 for any empty parameter of a function not specified by the user.

In the case with rand(), one is lucky, because {option} which is the left out parameter is replaced with 0 and still functions.

There are some other loop holes with this hack I've yet to address, but will give more thought into solutions as I work on the hack tomorrow (hopefully finishing by saturday).
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01148 seconds
  • Memory Usage 1,767KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete