/**********************************************************************************
* nWordPress is an automated migration of WordPress 2.5.1 performed by Numiton.
*
* copyright : (C) 2008 Numiton - www.numiton.com
* email : numiton@users.sourceforge.net
*
* $Id: PluginPage.java,v 1.4 2008/10/14 13:15:49 numiton Exp $
*
**********************************************************************************/
/**********************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
**********************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
package org.numiton.nwp.wp_includes;
import static com.numiton.VarHandling.*;
import static com.numiton.generic.PhpWeb.DEFAULT_VAL;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.numiton.nwp.NumitonController;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.numiton.ClassHandling;
import com.numiton.FunctionHandling;
import com.numiton.array.Array;
import com.numiton.array.ArrayEntry;
import com.numiton.generic.*;
import com.numiton.ntile.til.libraries.php.quercus.QRegExPerl;
import com.numiton.string.Strings;
@Controller
@Scope("request")
public class PluginPage extends NumitonController {
protected static final Logger LOG = Logger.getLogger(PluginPage.class.getName());
public Array<Object> merged_filters = new Array<Object>();
public Array<Object> wp_current_filter = new Array<Object>();
public Object wp_actions;
/* Do not change type */ @Override
@RequestMapping("/wp-includes/plugin.php")
public ModelAndView execute(HttpServletRequest javaRequest, HttpServletResponse javaResponse)
throws IOException {
return super.execute(javaRequest, javaResponse);
}
@Override
public String getViewName() {
return "wp_includes/plugin";
}
public boolean add_filter(String tag, Array<Object> function_to_add) {
return add_filter(tag, function_to_add, 10, 1);
}
/**
* The plugin API is located in this file, which allows for creating actions
* and filters and hooking functions, and methods. The functions or methods will
* then be run when the action or filter is called.
*
* The API callback examples reference functions, but can be methods of classes.
* To hook methods, you'll need to pass an array one of two ways.
*
* Any of the syntaxes explained in the PHP documentation for the
* {@link http://us2.php.net/manual/en/language.pseudo-types.php#language.types.callback 'callback'}
* type are valid.
*
* Also see the {@link http://codex.wordpress.org/Plugin_API Plugin API} for more information
* and examples on how to use a lot of these functions.
*
* @package WordPress
* @subpackage Plugin
* @since 1.5
*/
/**
* add_filter() - Hooks a function or method to a specific filter action.
*
* Filters are the hooks that WordPress launches to modify text of various types
* before adding it to the database or sending it to the browser screen. Plugins
* can specify that one or more of its PHP functions is executed to
* modify specific types of text at these times, using the Filter API.
*
* To use the API, the following code should be used to bind a callback to the filter
* <code>
* function example_hook($example) { echo $example; }
*
* add_filter('example_filter', 'example_hook');
* </code>
*
* In WordPress 1.5.1+, hooked functions can take extra arguments that are set when
* the matching do_action() or apply_filters() call is run. The <tt>$accepted_args
* allow for calling functions only when the number of args match. Hooked functions
* can take extra arguments that are set when the matching <tt>do_action()</tt> or
* <tt>apply_filters()</tt> call is run. For example, the action <tt>comment_id_not_found</tt>
* will pass any functions that hook onto it the ID of the requested comment.
*
* <strong>Note:</strong> the function will return true no matter if the function was hooked
* fails or not. There are no checks for whether the function exists beforehand and no checks
* to whether the <tt>$function_to_add is even a string. It is up to you to take care and
* this is done for optimization purposes, so everything is as quick as possible.
*
* @package WordPress
* @subpackage Plugin
* @since 0.71
* @global array $wp_filter Stores all of the filters added in the form of
* wp_filter['tag']['array of priorities']['array of functions serialized']['array of ['array (functions, accepted_args)]']
* @global array $merged_filters Tracks the tags that need to be merged for later. If the hook is added, it doesn't need to run through that process.
*
* @param string $tag The name of the filter to hook the <tt>$function_to_add</tt> to.
* @param callback $function_to_add The name of the function to be called when the filter is applied.
* @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action.
* @param int $accepted_args optional. The number of arguments the function accept (default 1).
* @return boolean true
*/
public boolean add_filter(String tag, Array<Object> function_to_add, int priority, int accepted_args) {
String idx = null;
idx = _wp_filter_build_unique_id(tag, function_to_add, priority);
gVars.wp_filter.getArrayValue(tag).getArrayValue(priority).putValue(
idx,
new Array<Object>(new ArrayEntry<Object>("function", function_to_add), new ArrayEntry<Object>("accepted_args", accepted_args)));
merged_filters.arrayUnset(tag);
return true;
}
/**
* has_filter() - Check if any filter has been registered for a hook.
*
* @package WordPress
* @subpackage Plugin
* @since 2.5
* @global array $wp_filter Stores all of the filters
*
* @param string $tag The name of the filter hook.
* @param callback $function_to_check optional. If specified, return the priority of that function on this hook or false if not attached.
* @return int|boolean Optionally returns the priority on that hook for the specified function.
*/
public Object has_filter(Object tag, Object function_to_check) {
boolean has = false;
String idx = null;
Object priority = null;
has = !empty(gVars.wp_filter.getValue(tag));
if (equal(false, function_to_check) || equal(false, has)) {
return has;
}
if (!booleanval(idx = _wp_filter_build_unique_id(tag, function_to_check, intval(false)))) {
return false;
}
for (Map.Entry javaEntry518 : (Set<Map.Entry>) Array.array_keys(gVars.wp_filter.getArrayValue(tag)).entrySet()) {
priority = javaEntry518.getValue();
if (isset(gVars.wp_filter.getArrayValue(tag).getArrayValue(priority).getValue(idx))) {
return priority;
}
}
return false;
}
/**
* apply_filters() - Call the functions added to a filter hook.
*
* The callback functions attached to filter hook <tt>$tag</tt> are invoked by
* calling this function. This function can be used to create a new filter hook
* by simply calling this function with the name of the new hook specified using
* the <tt>$tag</a> parameter.
*
* The function allows for additional arguments to be added and passed to hooks.
* <code>
* function example_hook($string, $arg1, $arg2)
* {
* //Do stuff
* return $string;
* }
* $value = apply_filters('example_filter', 'filter me', 'arg1', 'arg2');
* </code>
*
* @package WordPress
* @subpackage Plugin
* @since 0.71
* @global array $wp_filter Stores all of the filters
* @global array $merge_filters Merges the filter hooks using this function.
* @global array $wp_current_filter stores the list of current filters with the current one last
*
* @param string $tag The name of the filter hook.
* @param mixed $value The value on which the filters hooked to <tt>$tag</tt> are applied on.
* @param mixed $var,... Additional variables passed to the functions hooked to <tt>$tag</tt>.
* @return mixed The filtered value after all hooked functions are applied to it.
*/
public Object apply_filters(String tag, Object value, Object... vargs) {
Array<Object> args = new Array<Object>();
Array<Object> the_ = new Array<Object>();
args = new Array<Object>();
wp_current_filter.putValue(tag);
// Do 'all' actions first
if (isset(gVars.wp_filter.getValue("all"))) {
args = FunctionHandling.func_get_args(FunctionHandling.buildTotalArgs(tag, value, vargs));
_wp_call_all_hook(args);
}
if (!isset(gVars.wp_filter.getValue(tag))) {
Array.array_pop(wp_current_filter);
return value;
}
// Sort
if (!isset(merged_filters.getValue(tag))) {
Array.ksort(gVars.wp_filter.getArrayValue(tag));
merged_filters.putValue(tag, true);
}
Array.reset(gVars.wp_filter.getArrayValue(tag));
if (empty(args)) {
args = FunctionHandling.func_get_args(FunctionHandling.buildTotalArgs(tag, value, vargs));
}
do {
for (Map.Entry javaEntry519 : new Array<Object>(Array.current(gVars.wp_filter.getArrayValue(tag))).entrySet()) {
the_ = (Array<Object>) javaEntry519.getValue();
if (!is_null(the_.getValue("function"))) {
args.putValue(1, value);
value = FunctionHandling.call_user_func_array(new Callback(the_.getArrayValue("function")), Array.array_slice(args, 1, intval(the_.getValue("accepted_args"))));
}
}
} while (!strictEqual(Array.next(gVars.wp_filter.getArrayValue(tag)), null));
Array.array_pop(wp_current_filter);
return value;
}
/**
* remove_filter() - Removes a function from a specified filter hook.
* This function removes a function attached to a specified filter hook.
* This method can be used to remove default functions attached to a
* specific filter hook and possibly replace them with a substitute.
* To remove a hook, the <tt>$function_to_remove</tt> and
* <tt>$priority</tt> arguments must match when the hook was added. This
* goes for both filters and actions. No warning will be given on removal
* failure.
*
* @subpackage Plugin
* @since 1.2
* @param string $tag The filter hook to which the function to be removed is
* hooked.
* @param callback $function_to_remove The name of the function which should
* be removed.
* @param int $priority optional. The priority of the function (default:
* 10).
* @param int $accepted_args optional. The number of arguments the function
* accpets (default: 1).
* @return boolean Whether the function existed before it was removed.
*/
public boolean remove_filter(String tag, Object function_to_remove, int priority, int accepted_args) {
boolean r = false;
function_to_remove = _wp_filter_build_unique_id(tag, function_to_remove, priority);
r = isset(gVars.wp_filter.getArrayValue(tag).getArrayValue(priority).getValue(function_to_remove));
if (strictEqual(true, r)) {
gVars.wp_filter.getArrayValue(tag).getArrayValue(priority).arrayUnset(function_to_remove);
if (empty(gVars.wp_filter.getArrayValue(tag).getValue(priority))) {
gVars.wp_filter.getArrayValue(tag).arrayUnset(priority);
}
merged_filters.arrayUnset(tag);
}
return r;
}
/**
* current_filter() - Return the name of the current filter or action.
*
* @subpackage Plugin
* @since 2.5
* @return string Hook name of the current filter or action.
*/
public Object current_filter() {
return Array.end(wp_current_filter);
}
public boolean add_action(String tag, Array<Object> function_to_add) {
return add_action(tag, function_to_add, 10, 1);
}
public boolean add_action(String tag, Array<Object> function_to_add, int priority) {
return add_action(tag, function_to_add, priority, 1);
}
/**
* add_action() - Hooks a function on to a specific action.
* Actions are the hooks that the WordPress core launches at specific points
* during execution, or when specific events occur. Plugins can specify that
* one or more of its PHP functions are executed at these points, using the
* Action API.
* @uses add_filter() Adds an action. Parameter list and functionality are
* the same.
*
* @subpackage Plugin
* @since 1.2
* @param string $tag The name of the action to which the
* <tt>$function_to-add</tt> is hooked.
* @param callback $function_to_add The name of the function you wish to be
* called.
* @param int $priority optional. Used to specify the order in which the
* functions associated with a particular action are executed
* (default: 10). Lower numbers correspond with earlier
* execution, and functions with the same priority are executed
* in the order in which they were added to the action.
* @param int $accepted_args optional. The number of arguments the function
* accept (default 1).
*/
public boolean add_action(String tag, Array<Object> function_to_add, int priority, int accepted_args) {
return add_filter(tag, function_to_add, priority, accepted_args);
}
public void do_action(String tag) {
do_action(tag, "");
}
/**
* do_action() - Execute functions hooked on a specific action hook.
* This function invokes all functions attached to action hook <tt>$tag</tt>.
* It is possible to create new action hooks by simply calling this
* function, specifying the name of the new hook using the <tt>$tag</tt>
* parameter.
* You can pass extra arguments to the hooks, much like you can with
* apply_filters().
* @see apply_filters() This function works similar with the exception that
* nothing is returned and only the functions or methods are called.
*
* @subpackage Plugin
* @since 1.2
* @global array $wp_filter Stores all of the filters
* @global array $wp_actions Increments the amount of times action was
* triggered.
* @param string $tag The name of the action to be executed.
* @param mixed $arg,... Optional additional arguments which are passed on
* to the functions hooked to the action.
* @return null Will return null if $tag does not exist in $wp_filter array
*/
public void do_action(String tag, Object arg, /* Do not change type */
Object... vargs) {
Array<Object> all_args = new Array<Object>();
Array<Object> args = new Array<Object>();
int a = 0;
Array<Object> the_ = new Array<Object>();
if (is_array(wp_actions)) {
((Array) wp_actions).putValue(tag);
} else {
wp_actions = new Array<Object>(new ArrayEntry<Object>(tag));
}
wp_current_filter.putValue(tag);
Object[] totalArgs = FunctionHandling.buildTotalArgs(tag, arg, vargs);
// Do 'all' actions first
if (isset(gVars.wp_filter.getValue("all"))) {
all_args = FunctionHandling.func_get_args(totalArgs);
_wp_call_all_hook(all_args);
}
if (!isset(gVars.wp_filter.getValue(tag))) {
Array.array_pop(wp_current_filter);
return;
}
args = new Array<Object>();
if (is_array(arg) && equal(1, Array.count(arg)) && is_object(((Array) arg).getValue(0))) { // array(&$this)
args.putValue(((Array) arg).getRef(0));
} else {
args.putValue(arg);
}
// Modified by Numiton
for (a = 2; a < FunctionHandling.func_num_args(totalArgs); a++)
args.putValue(FunctionHandling.func_get_arg(totalArgs, a));
// Sort
if (!isset(merged_filters.getValue(tag))) {
Array.ksort(gVars.wp_filter.getArrayValue(tag));
merged_filters.putValue(tag, true);
}
Array.reset(gVars.wp_filter.getArrayValue(tag));
do {
for (Map.Entry javaEntry520 : new Array<Object>(Array.current(gVars.wp_filter.getArrayValue(tag))).entrySet()) {
the_ = (Array<Object>) javaEntry520.getValue();
if (!is_null(the_.getValue("function"))) {
FunctionHandling.call_user_func_array(new Callback(the_.getArrayValue("function")), Array.array_slice(args, 0, intval(the_.getValue("accepted_args"))));
}
}
} while (!strictEqual(Array.next(gVars.wp_filter.getArrayValue(tag)), null));
Array.array_pop(wp_current_filter);
}
/**
* did_action() - Return the number times an action is fired.
*
* @subpackage Plugin
* @since 2.1
* @global array $wp_actions Increments the amount of times action was
* triggered.
* @param string $tag The name of the action hook.
* @return int The number of times action hook <tt>$tag</tt> is fired
*/
public int did_action(String tag) {
if (empty(wp_actions)) {
return 0;
}
return Array.count(Array.array_keys((Array) wp_actions, tag));
}
/**
* do_action_ref_array() - Execute functions hooked on a specific action
* hook, specifying arguments in an array.
* @see do_action() This function is identical, but the arguments passed to
* the functions hooked to <tt>$tag</tt> are supplied using an array.
*
* @subpackage Plugin
* @since 2.1
* @global array $wp_filter Stores all of the filters
* @global array $wp_actions Increments the amount of times action was
* triggered.
* @param string $tag The name of the action to be executed.
* @param array $args The arguments supplied to the functions hooked to
* <tt>$tag</tt>
* @return null Will return null if $tag does not exist in $wp_filter array
*/
public void do_action_ref_array(String tag, Array<Object> args) {
Array<Object> all_args = new Array<Object>();
Array<Object> the_ = new Array<Object>();
if (!is_array(wp_actions)) {
wp_actions = new Array<Object>(new ArrayEntry<Object>(tag));
} else {
((Array) wp_actions).putValue(tag);
}
wp_current_filter.putValue(tag);
// Do 'all' actions first
if (isset(gVars.wp_filter.getValue("all"))) {
all_args = FunctionHandling.func_get_args(new Object[] { tag, args });
_wp_call_all_hook(all_args);
}
if (!isset(gVars.wp_filter.getValue(tag))) {
Array.array_pop(wp_current_filter);
return;
}
// Sort
if (!isset(merged_filters.getValue(tag))) {
Array.ksort(gVars.wp_filter.getArrayValue(tag));
merged_filters.putValue(tag, true);
}
Array.reset(gVars.wp_filter.getArrayValue(tag));
do {
for (Map.Entry javaEntry521 : new Array<Object>(Array.current(gVars.wp_filter.getArrayValue(tag))).entrySet()) {
the_ = (Array<Object>) javaEntry521.getValue();
if (!is_null(the_.getValue("function"))) {
FunctionHandling.call_user_func_array(new Callback(the_.getArrayValue("function")), Array.array_slice(args, 0, intval(the_.getValue("accepted_args"))));
}
}
} while (!strictEqual(Array.next(gVars.wp_filter.getArrayValue(tag)), null));
Array.array_pop(wp_current_filter);
}
/**
* has_action() - Check if any action has been registered for a hook.
*
* @subpackage Plugin
* @since 2.5
* @see has_filter() has_action() is an alias of has_filter().
* @param string $tag The name of the action hook.
* @param callback $function_to_check optional. If specified, return the
* priority of that function on this hook or false if not
* attached.
* @return int|boolean Optionally returns the priority on that hook for the
* specified function.
*/
public Object has_action(Object tag, Object function_to_check) {
return has_filter(tag, function_to_check);
}
/**
* remove_action() - Removes a function from a specified action hook.
* This function removes a function attached to a specified action hook.
* This method can be used to remove default functions attached to a
* specific filter hook and possibly replace them with a substitute.
*
* @subpackage Plugin
* @since 1.2
* @param string $tag The action hook to which the function to be removed is
* hooked.
* @param callback $function_to_remove The name of the function which should
* be removed.
* @param int $priority optional The priority of the function (default: 10).
* @param int $accepted_args optional. The number of arguments the function
* accpets (default: 1).
* @return boolean Whether the function is removed.
*/
public boolean remove_action(String tag, Object function_to_remove, int priority, int accepted_args) {
return remove_filter(tag, function_to_remove, priority, accepted_args);
}
/**
* Functions for handling plugins. Functions for handling plugins.
* plugin_basename() - Gets the basename of a plugin.
* This method extract the name of a plugin from its filename.
*
* @subpackage Plugin
* @since 1.5
* @access private
* @param string $file The filename of plugin.
* @return string The name of a plugin.
*/
public String plugin_basename(String file) {
file = Strings.str_replace("\\", "/", file); // sanitize for Win32 installs
file = QRegExPerl.preg_replace("|/+|", "/", file); // remove any duplicate slash
file = QRegExPerl.preg_replace("|^.*/" + gConsts.getPLUGINDIR() + "/|", "", file); // get relative path from plugins dir
return file;
}
/**
* register_activation_hook() - Hook a function on a plugin activation
* action hook.
* When a plugin is activated, the action 'activate_PLUGINNAME' hook is
* activated. In the name of this hook, PLUGINNAME is replaced with the name
* of the plugin, including the optional subdirectory. For example, when the
* plugin is located in <tt>wp-content/plugin/sampleplugin/sample.php</tt>,
* then the name of this hook will become 'activate_sampleplugin/sample.php'
* When the plugin consists of only one file and is (as by default) located
* at <tt>wp-content/plugin/sample.php</tt> the name of this hook will be
* 'activate_sample.php'.
*
* @subpackage Plugin
* @since 2.0
* @access private
* @param string $file The filename of the plugin including the path.
* @param string $function the function hooked to the 'activate_PLUGIN'
* action.
*/
public void register_activation_hook(String file, Array<Object> function) {
file = plugin_basename(file);
add_action("activate_" + file, function, 10, 1);
}
/**
* register_deactivation_hook() - Hook a function on a plugin deactivation
* action hook.
* When a plugin is deactivated, the action 'deactivate_PLUGINNAME' hook is
* deactivated. In the name of this hook, PLUGINNAME is replaced with the
* name of the plugin, including the optional subdirectory. For example,
* when the plugin is located in
* <tt>wp-content/plugin/sampleplugin/sample.php</tt>, then the name of
* this hook will become 'activate_sampleplugin/sample.php'. When the plugin
* consists of only one file and is (as by default) located at
* <tt>wp-content/plugin/sample.php</tt> the name of this hook will be
* 'activate_sample.php'.
*
* @subpackage Plugin
* @since 2.0
* @access private
* @param string $file The filename of the plugin including the path.
* @param string $function the function hooked to the 'activate_PLUGIN'
* action.
*/
public void register_deactivation_hook(String file, Array<Object> function) {
file = plugin_basename(file);
add_action("deactivate_" + file, function, 10, 1);
}
/**
* _wp_call_all_hook() - Calls the 'all' hook, which will process the
* functions hooked into it.
* The 'all' hook passes all of the arguments or parameters that were used
* for the hook, which this function was called for.
* This function is used internally for apply_filters(), do_action(), and
* do_action_ref_array() and is not meant to be used from outside those
* functions. This function does not check for the existence of the all
* hook, so it will fail unless the all hook exists prior to this function
* call.
*
* @subpackage Plugin
* @since 2.5
* @access private
* @uses $wp_filter Used to process all of the functions in the 'all' hook
* @param array $args The collected parameters from the hook that was
* called.
* @param string $hook Optional. The hook name that was used to call the
* 'all' hook.
*/
public void _wp_call_all_hook(Array<Object> args) {
Array<Object> the_ = new Array<Object>();
Array.reset(gVars.wp_filter.getArrayValue("all"));
do {
for (Map.Entry javaEntry522 : new Array<Object>(Array.current(gVars.wp_filter.getArrayValue("all"))).entrySet()) {
the_ = (Array<Object>) javaEntry522.getValue();
if (!is_null(the_.getValue("function"))) {
FunctionHandling.call_user_func_array(new Callback(the_.getArrayValue("function")), args);
}
}
} while (!strictEqual(Array.next(gVars.wp_filter.getArrayValue("all")), null));
}
/**
* _wp_filter_build_unique_id() - Build Unique ID for storage and
* retrieval
* The old way to serialize the callback caused issues and this function is
* the solution. It works by checking for objects and creating an a new
* property in the class to keep track of the object and new objects of the
* same class that need to be added.
* It also allows for the removal of actions and filters for objects after
* they change class properties. It is possible to include the property
* $wp_filter_id in your class and set it to "null" or a number to bypass
* the workaround. However this will prevent you from adding new classes and
* any new classes will overwrite the previous hook by the same class.
* Functions and static method callbacks are just returned as strings and
* shouldn't have any speed penalty.
*
* @subpackage Plugin
* @since 2.2.3
* @link http://trac.wordpress.org/ticket/3875
* @access private
* @global array $wp_filter Storage for all of the filters and actions
* @param string $tag Used in counting how many hooks were applied
* @param string|array $function Used for creating unique id
* @param int|bool $priority Used in counting how many hooks were applied.
* If === false and $function is an object reference, we return
* the unique id only if it already has one, false otherwise.
* @param string $type filter or action
* @return string Unique ID for usage as array key
*/
public String _wp_filter_build_unique_id(Object tag, Object function, int priority) {
String obj_idx = null;
Integer count = null;
// If function then just skip all of the tests and not overwrite the following.
if (is_string(function)) {
return strval(function);
}
// Object Class Calling
else if (function instanceof Array && ((Array) function).getValue(0) instanceof WebPageInterface) {
// Modified by Numiton. Regular PHP functions have been encapsulated in WebPageInterface subclasses.
return strval(((Array) function).getValue(1));
} else {
Object instance = ((Array) function).getValue(0);
if (is_object(instance)) {
obj_idx = ClassHandling.get_class(instance) + strval(((Array) function).getValue(1));
if (!isset(getFieldValue(instance, "wp_filter_id"))) {
if (equal(false, priority)) {
return strval(false);
}
count = Array.count(new Array<Object>(gVars.wp_filter.getArrayValue(tag).getValue(priority)));
setFieldValue(instance, "wp_filter_id", count);
obj_idx = obj_idx + strval(count);
count = null;
} else {
obj_idx = obj_idx + getFieldValue(instance, "wp_filter_id");
}
return obj_idx;
}
// Static Calling
else if (is_string(instance)) {
return strval(instance) + strval(((Array) function).getValue(1));
}
}
LOG.warn("Could not build unique ID for: tag=" + tag + ", function=" + var_export_internal(function));
return "";
}
// Added by Numiton
protected Object getFieldValue(Object instance, String fieldName) {
if (instance instanceof StdClass) {
return ((StdClass) instance).fields.getValue(fieldName);
}
try {
Field field = instance.getClass().getField(fieldName);
return field.get(instance);
} catch (Exception ex) {
return null;
}
}
// Added by Numiton
protected void setFieldValue(Object instance, String fieldName, Object value) {
if (instance instanceof StdClass) {
((StdClass) instance).fields.putValue(fieldName, value);
return;
}
try {
Field field = instance.getClass().getField(fieldName);
field.set(instance, value);
} catch (Exception ex) {
// LOG.warn("Field with name " + fieldName + " not found in instance of class " + instance.getClass());
}
}
public Object generateContent(PhpWebEnvironment webEnv)
throws IOException, ServletException {
gVars.webEnv = webEnv;
return DEFAULT_VAL;
}
}