142c134e by Chris Boden

Added ShortCodes components, updated wp_funs for password reset

1 parent 6dbd4043
<?php
class ShortCodes extends Singleton {
private static $registered = Array();
private static $private = Array();
public static function make() {
add_actions('ShortCodes_Actions');
}
public static function registerClass($class) {
if (!class_exists($class)) {
throw new Exception("$class does not exist");
}
$ref = new ReflectionClass($class);
$methods = $ref->getMethods(ReflectionMethod::IS_STATIC);
foreach ($methods as $method) {
self::add($method->name, Array($class, $method->name));
}
}
public static function add($code, $callback) {
$fn = (function_exists('wp_add_shortcode') ? 'wp_add_shortcode' : 'add_shortcode');
call_user_func($fn, $code, $callback);
if (is_admin()) {
self::$registered[$code] = Array('code' => $code, 'title' => $code, 'params' => Array(), 'uses_content' => 0);
if (is_array($callback)) {
$ref = new ReflectionMethod($callback[0], $callback[1]);
} else {
$ref = new ReflectionFunction($callback);
}
$api = $ref->getDocComment();
$api = explode("\n", $api);
array_shift($api);
array_pop($api);
foreach ($api as $key => &$comment) {
$comment = trim($comment, ' *');
if (substr($comment, 0, 1) == '@') {
$tag = trim(substr($comment, 1, strpos($comment, ' ')));
if (empty($tag)) {
$tag = trim($comment, '@');
}
if (method_exists(__CLASS__, 'parseTag_' . $tag)) {
call_user_func_array(Array(__CLASS__, 'parseTag_' . $tag), Array($code, $comment));
}
}
}
}
}
public static function parseTag_display($code, $string) {
$string = trim(str_replace('@display', '', $string));
self::$registered[$code]['title'] = $string;
}
public static function parseTag_param($code, $string) {
$regex = '.*?@param {((?:[a-z][a-z]+))(\\(.*?\\))?} (.*?) (.*?)$'; // Awww yeah!
if ($num = preg_match_all("/" . $regex . "/is", $string, $matches)) {
self::$registered[$code]['params'][] = Array('name' => $matches[3][0], 'type' => $matches[1][0], 'options' => explode(',', trim($matches[2][0], ')(')), 'desc' => $matches[4][0]);
}
}
public static function parseTag_private($code, $string) {
self::$private[$code] = 1;
}
public static function uses_content($code) {
self::$registered[$code]['uses_content'] = 1;
}
public static function getRegistered() {
$return = self::$registered;
foreach (self::$private as $key => $one) {
unset($return[$key]);
}
return $return;
}
public static function drawMetaBox() {
?>
<label for="TzShortCodeList">Tag:</label>
<select id="TzShortCodeList" name="TzShortCodeList">
<?php
$options = ShortCodes::getRegistered();
ksort($options);
foreach ($options as $tag => $data) {
echo '<option value="' . $tag . '">' . $data['title'] . '</option>';
}
?>
</select>
<p class="submit">
<input type="button" id="TzInsertSC" value="<?php _e('Insert into post'); ?>" />
</p>
<?php
}
}
class ShortCodes_Actions {
public static function admin_menu() {
add_meta_box('TzShortCodes', 'Code Helper', Array('ShortCodes', 'drawMetaBox'), 'post', 'normal');
add_meta_box('TzShortCodes', 'Code Helper', Array('ShortCodes', 'drawMetaBox'), 'page', 'normal');
}
public static function admin_print_scripts() {
if ($GLOBALS['editing']) {
_enqueue_script('shortcoder', plugins_url('shortcoder.js', __FILE__), Array('jquery'));
echo "<script type=\"text/javascript\">\n/* <![CDATA[ */\n";
echo 'var TzRegisteredShortCodes = ' . json_encode(ShortCodes::getRegistered());
echo "\n/* ]]> */</script>\n";
}
}
}
/**
* @deprecated
*/
function add_shortcodes($class) {
call_user_func(Array('ShortCodes', 'registerClass'), $class);
}
if (function_exists('rename_function')) {
rename_function('add_shortcode', 'wp_add_shortcode');
function add_shortcode() {
$args = func_get_args();
call_user_func_array(Array('ShortCodes', 'add'), $args);
}
}
ShortCodes::make();
?>
\ No newline at end of file
var ShortCoder = function() {
var dLookup = TzRegisteredShortCodes;
var $SCList;
var api = {
insert: function() {
var strKey = $SCList[0][$SCList[0].selectedIndex].value;
var strCode = dLookup[strKey]['code'];
console.log(dLookup[strCode]);
send_to_editor('[' + strCode + ']');
}
, getCode: function() {
var strKey = $SCList[0][$SCList[0].selectedIndex].value;
return dLookup[strKey]['code'];
// I almost certainly can just return strKey...
}
}
var init = function() {
jQuery('#TzInsertSC').click(api.insert);
$SCList = jQuery('#TzShortCodeList').change(tagChange);
}
var generateCode = function() {
// if uses_content, send a close tag
}
var tagChange = function($o) {
}
/*
var create = {
string: function() {
}
, boolean: function() {
}
, enum: function() {
}
}
*/
jQuery(document).ready(init);
return api;
}();
/*
onclick="return wpYourPluginAdmin.sendToEditor(this.form);"
sendToEditor : function(f) {
var collection = jQuery(f).find("input[id^=wpYourPluginName]:not(input:checkbox),input[id^=wpYourPluginName]:checkbox:checked");
var $this = this;
collection.each(function () {
var name = this.name.substring(13, this.name.length-1);
$this['options'][name] = this.value;
});
send_to_editor(this.generateShortCode());
return false;
}
*/
\ No newline at end of file
......@@ -16,13 +16,14 @@ class TzTools {
public static function load() {
spl_autoload_register(Array(__CLASS__, 'autoloader'));
require_once(dirname(__FILE__) . '/wp_functions.php');
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wp_functions.php');
_register_script('addEvent', plugins_url('addEvent.js', __FILE__));
_register_script('xmlhttpHandler', plugins_url('xmlhttpHandler.js', __FILE__));
_register_script('fireEvent', plugins_url('fireEvent.js', __FILE__));
add_action('widgets_init', Array('MenuWidget', 'init'));
self::import('ShortCodes');
}
public static function import($com) {
......@@ -53,18 +54,6 @@ function add_actions($class) {
}
}
function add_shortcodes($class) {
if (!class_exists($class)) {
throw new Exception("$class does not exist");
}
$ref = new ReflectionClass($class);
$methods = $ref->getMethods(ReflectionMethod::IS_STATIC);
foreach ($methods as $method) {
add_shortcode($method->name, Array($class, $method->name));
}
}
function add_filters($class) {
if (!class_exists($class)) {
throw new Exception("$class does not exist");
......@@ -89,25 +78,6 @@ function get_custom_data($name, $post_id = false) {
}
return $raw_data;
/* @deprecated
if (is_array($raw_data)) {
return $raw_data;
}
return $raw_data
/* @deprecated
if (null === $maybe_data = json_decode($raw_data, true)) {
return $raw_data;
} else {
return $maybe_data;
}
*/
}
function _custom_attachment($post_id, $custom_name) {
......@@ -122,19 +92,6 @@ function _custom_attachment($post_id, $custom_name) {
function _custom_page($post_id, $custom_name) {
$custom = get_post_meta($post_id, $custom_name);
return array_shift($custom);
// @deprecated
static $custom = Array();
if (!isset($custom[$post_id])) {
$custom[$post_id] = get_post_custom($post_id);
if (!isset($custom[$post_id][$custom_name])) {
$custom[$post_id][$custom_name] = Array('');
}
}
return array_shift($custom[$post_id][$custom_name]);
}
function _custom_post() {
......
......@@ -138,4 +138,15 @@ function _insert_user() {
$params = func_get_args();
return call_user_func_array('wp' . __FUNCTION__, $params);
}
function _generate_password() {
$params = func_get_args();
return call_user_func_array('wp' . __FUNCTION__, $params);
}
function _update_user() {
require_once(ABSPATH . WPINC . DIRECTORY_SEPARATOR . 'registration.php');
$params = func_get_args();
return call_user_func_array('wp' . __FUNCTION__, $params);
}
?>
......
......@@ -3,6 +3,8 @@
* @author Chris Boden
* @version 1.0b
* @todo Figure out if/why blnLoading is needed
I don't think it's being used properly; should be used in conjunction
with a buffer if call() is called multiple times before a return
* @todo Some of the private variables need to be changable maybe just make all public
* @todo More testing
* @todo Make distinction between data error and exception
......@@ -18,9 +20,7 @@
*/
var xmlhttpHandler = function(strURL) {
var xhrHandle = new XMLHttpRequest();
var strMethod = 'POST';
var blnAsync = true;
var strServer = strURL;
var headerLabel = 'Content-Type';
var headerValue = 'application/x-www-form-urlencoded';
......@@ -28,47 +28,18 @@ var xmlhttpHandler = function(strURL) {
var fnCallHandle;
var fnCallError;
var receiver = function(rsc) {
if (xhrHandle.readyState != 4 || !blnLoading) {
return;
}
blnLoading = false;
try {
var objResult = eval('(' + xhrHandle.responseText + ')');
var api = {
url: strURL
, method: 'POST'
, async: true
if (objResult['status'] != 0) {
fnCallError(objResult['data']);
return false;
}
} catch (e) {
fnCallError({message: xhrHandle.responseText});
return false;
}
if (typeof fnCallHandle == 'function') {
fnCallHandle(objResult.data);
}
}
var catcher = function(o) {
var msg = 'Unable to complete your request: "' + o.message + '"';
if (console && console.warn) {
console.warn(msg);
} else {
alert(msg);
}
}
return {
/**
* Make a POST or GET call to the server
* @param {function} fnHandle The function to call after the server returns
* @param {Object} oData the data object to send to the server
* @param {function} fnError The function to call if an error occurs (optional)
*/
call: function(fnHandle, oData, fnError) {
, call: function(fnHandle, oData, fnError) {
var sData = this.stringify(oData);
fnCallHandle = fnHandle;
......@@ -76,7 +47,7 @@ var xmlhttpHandler = function(strURL) {
blnLoading = true;
xhrHandle.open(strMethod, strServer, blnAsync);
xhrHandle.open(api.method, api.url, api.async);
xhrHandle.setRequestHeader(headerLabel, headerValue);
xhrHandle.onreadystatechange = receiver;
xhrHandle.send(sData);
......@@ -101,4 +72,39 @@ var xmlhttpHandler = function(strURL) {
return str.substr(1, str.length);
}
}
}
var receiver = function(rsc) {
if (xhrHandle.readyState != 4 || !blnLoading) {
return;
}
blnLoading = false;
try {
var objResult = eval('(' + xhrHandle.responseText + ')');
if (objResult['status'] != 0) {
fnCallError(objResult['data']);
return false;
}
} catch (e) {
fnCallError({message: xhrHandle.responseText});
return false;
}
if (typeof fnCallHandle == 'function') {
fnCallHandle(objResult.data);
}
}
var catcher = function(o) {
var msg = 'Unable to complete your request:\n\n' + o.message;
if (console && console.warn) {
console.warn(msg);
} else {
alert(msg);
}
}
return api;
}
\ No newline at end of file
......