$val) if (! isset($GLOBALS[$name])) $GLOBALS[$name] = $val; } // Same as getopt for plugins function get_plugin_option($args, &$params, $tolower=TRUE, $separator=':') { if (empty($args)) { $params['_done'] = TRUE; return TRUE; } $keys = array_keys($params); foreach($args as $val) { list($_key, $_val) = array_pad(split($separator, $val, 2), 2, TRUE); if ($tolower === TRUE) $_key = strtolower($_key); $_key = trim($_key); $_val = trim($_val); if (in_array($_key, $keys)) { $params[$_key] = $_val; // Exist keys } else { $params['_args'][] = $val; // Not exist keys, in '_args' } } $params['_done'] = TRUE; return TRUE; } // Check arguments for plugins function check_plugin_option($val, &$params, $tolower=TRUE) { if ($val != '') { if ($tolower === TRUE) $_val = strtolower($val); foreach (array_keys($params) as $key) { if (strpos($key, $_val) === 0) { $params[$key] = TRUE; return; } } } $params['_args'][] = $val; } // Check plugin '$name' is here function exist_plugin($name) { global $vars; global $exclude_plugin; static $exist = array(), $count = array(); $name = strtolower($name); if(isset($exist[$name])) { if (++$count[$name] > PKWK_PLUGIN_CALL_TIME_LIMIT) die('Alert: plugin "' . htmlspecialchars($name) . '" was called over ' . PKWK_PLUGIN_CALL_TIME_LIMIT . ' times. SPAM or someting?
' . "\n" . 'Try to edit this page
' . "\n" . 'Return to frontpage'); return $exist[$name]; } //miko - Added exclude plugin spec. if (in_array($name, $exclude_plugin)) { $exist[$name] = FALSE; $count[$name] = 1; return FALSE; } //miko if (preg_match('/^\w{1,64}$/', $name) && file_exists(PLUGIN_DIR . $name . '.inc.php')) { $exist[$name] = TRUE; $count[$name] = 1; require_once(PLUGIN_DIR . $name . '.inc.php'); return TRUE; } else { $exist[$name] = FALSE; $count[$name] = 1; return FALSE; } } // Check if plugin API 'action' exists function exist_plugin_action($name) { return function_exists('plugin_' . $name . '_action') ? TRUE : exist_plugin($name) ? function_exists('plugin_' . $name . '_action') : FALSE; } // Check if plugin API 'convert' exists function exist_plugin_convert($name) { return function_exists('plugin_' . $name . '_convert') ? TRUE : exist_plugin($name) ? function_exists('plugin_' . $name . '_convert') : FALSE; } // Check if plugin API 'inline' exists function exist_plugin_inline($name) { return function_exists('plugin_' . $name . '_inline') ? TRUE : exist_plugin($name) ? function_exists('plugin_' . $name . '_inline') : FALSE; } // Do init the plugin function do_plugin_init($name) { static $checked = array(); if (isset($checked[$name])) return $checked[$name]; $func = 'plugin_' . $name . '_init'; if (function_exists($func)) { // TRUE or FALSE or NULL (return nothing) $checked[$name] = call_user_func($func); } else { $checked[$name] = NULL; // Not exist } return $checked[$name]; } // Call API 'action' of the plugin function do_plugin_action($name) { if (! exist_plugin_action($name)) return array(); if(do_plugin_init($name) === FALSE) die_message('Plugin init failed: ' . $name); $retvar = call_user_func('plugin_' . $name . '_action'); // Insert a hidden field, supports idenrtifying text enconding if (PKWK_ENCODING_HINT != '') $retvar = preg_replace('/(]*>)(?!\n
', $retvar); return $retvar; } // Call API 'convert' of the plugin function do_plugin_convert($name, $args = '') { global $digest; if(do_plugin_init($name) === FALSE) return '[Plugin init failed: ' . $name . ']'; if (! PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK) { // Multiline plugin? $pos = strpos($args, "\r"); // "\r" is just a delimiter if ($pos !== FALSE) { $body = substr($args, $pos + 1); $args = substr($args, 0, $pos); } } if ($args === '') { $aryargs = array(); // #plugin() } else { $aryargs = csv_explode(',', $args); // #plugin(A,B,C,D) } if (! PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK) { if (isset($body)) $aryargs[] = & $body; // #plugin(){{body}} } $_digest = $digest; $retvar = call_user_func_array('plugin_' . $name . '_convert', $aryargs); $digest = $_digest; // Revert if ($retvar === FALSE) { return htmlspecialchars('#' . $name . ($args != '' ? '(' . $args . ')' : '')); } else if (PKWK_ENCODING_HINT != '') { // Insert a hidden field, supports idenrtifying text enconding return preg_replace('/(]*>)(?!\n
', $retvar); } else { return $retvar; } } // Call API 'inline' of the plugin function do_plugin_inline($name, $args, & $body) { global $digest; if(do_plugin_init($name) === FALSE) return '[Plugin init failed: ' . $name . ']'; if ($args !== '') { $aryargs = csv_explode(',', $args); } else { $aryargs = array(); } // NOTE: A reference of $body is always the last argument $aryargs[] = & $body; // func_num_args() != 0 $_digest = $digest; $retvar = call_user_func_array('plugin_' . $name . '_inline', $aryargs); $digest = $_digest; // Revert if($retvar === FALSE) { // Do nothing return htmlspecialchars('&' . $name . ($args ? '(' . $args . ')' : '') . ';'); } else { return $retvar; } } ?>