53f8033a by Chris Boden

Adding current code to repository

0 parents
<?php
/**
* Handles data preparation for XMLHTTP responses to xmlhttpHandler script
*
* @author Chris Boden
* @version 0.3
*/
class Ajaxdata {
private $_data = Array();
private static $exception = false;
/**
* @private
*/
final public function __destruct() {
if (self::$exception) {
return false;
}
$output = Array();
$output['status'] = 0;
$output['data'] = $this->_data;
echo json_encode($output);
}
/**
* @private
*/
final public function __set($var, $val) {
// is this going to work for arrays?
$this->_data[$var] = $val;
}
/**
* @private
*/
final public function &__get($var) {
if (isset($this->_data[$var])) {
return $this->_data[$var];
} else {
return '';
}
}
/**
* @private
* possibly obsolete
*/
final public static function ExceptionThrown() {
self::$exception = true;
}
}
/**
* Only 1 is declared at a time
* This exception is generated when doing an XHR
*
* @author Chris Boden
* @version 0.2
*/
class JSONException extends Exception {
/**
* @private
*/
public function __construct($message=NULL, $code=0) {
parent::__construct($message, $code);
// die instead?
Ajaxdata::ExceptionThrown();
}
/**
* @private
*/
public function __destruct() {
$output = Array();
$output['status'] = 1;
$output['data'] = Array('message' => $this->getMessage());
echo json_encode($output);
}
}
?>
<?php
class WP_Option implements ArrayAccess, Countable {
private $_ns;
private $_data = Array();
public function __construct($ns) {
$this->_ns = $ns;
$this->_data = get_option($ns);
}
public function offsetExists($var) {
return (isset($this->_data[$var]) ? true : false);
}
public function offsetGet($var) {
return ($this->offsetExists($var) ? $this->_data[$var] : '');
}
public function offsetSet($var, $val) {
$this->_data[$var] = $val;
$this->save();
}
public function offsetUnset($var) {
unset($this->_data[$var]);
$this->save();
}
public function count() {
return count($this->_data);
}
public function save() {
update_option($this->_ns, $this->_data);
}
public function multiSet(Array $data) {
array_merge($this->_data, $data);
$this->save();
}
}
?>
\ No newline at end of file
<?php
/*
Plugin Name: Tenzing Tools
Version: 0.1
Description: Various classes to help out with stuff
Author: Tenzing
*/
if (phpversion() < '5.2.2') {
die('PHP version 5.2.2 or greater is required');
}
new TzTools();
class TzTools {
public function __construct() {
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__));
spl_autoload_register(Array('TzTools', 'loader'));
require_once(dirname(__FILE__) . '/wp_functions.php');
add_action('wp_print_scripts', Array('TzTools', 'registerScripts'));
}
public static function registerScripts() {
_register_script('xmlhttpHandler', plugins_url('xmlhttpHandler.js', __FILE__));
}
public static function loader($class) {
$file = dirname(__FILE__) . '/' . $class . '.php';
if (is_file($file)) {
require($file);
}
}
}
?>
\ No newline at end of file
<?php
/**
* WordPress strongly advises against using functions that start with "wp_"
* as they are reserved for the core of WordPress and can change with any
* new release without providing backwards compatability.
* Any time a wp_ function needs to be called it is added here without the "wp"
* which calls the actual function. This way if WordPress changes a function
* the call only needs to be adjusted here, not the x# of times used else where
*/
function _register_script() {
$params = func_get_args();
return call_user_func_array('wp_register_script', $params);
}
function _localize_script() {
$params = func_get_args();
return call_user_func_array('wp_localize_script', $params);
}
function _enqueue_script() {
$params = func_get_args();
return call_user_func_array('wp_enqueue_script', $params);
}
function _enqueue_style() {
$params = func_get_args();
return call_user_func_array('wp_enqueue_style', $params);
}
function _die() {
$params = func_get_args();
return call_user_func_array('wp_die', $params);
}
function _get_current_user() {
$params = func_get_args();
return call_user_func_array('wp_get_current_user', $params);
}
function _insert_post() {
$params = func_get_args();
return call_user_func_array('wp_insert_post', $params);
}
function _new_comment($commentdata) {
$params = func_get_args();
return call_user_func_array('wp_new_comment', $params);
}
function _nonce_field() {
$params = func_get_args();
return call_user_func_array('wp_nonce_field', $params);
}
?>
\ No newline at end of file
/**
* An easy class to make Ajax requests with the xmlhttp object
* @author Chris Boden
* @version 1.0b
* @todo Figure out if/why blnLoading is needed
* @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
*/
/*@cc_on @if (@_win32 && @_jscript_version >= 5) if (!window.XMLHttpRequest)
window.XMLHttpRequest = function() { return new ActiveXObject('Microsoft.XMLHTTP') }
@end @*/
/**
* @constructor
* @param {String} strURL This is the URL to pass requests to
*/
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';
var blnLoading = false;
var fnCallHandle;
var fnCallError;
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: "' + 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) {
var sData = this.stringify(oData);
fnCallHandle = fnHandle;
fnCallError = (fnError && typeof fnError == 'function' ? fnError : catcher);
blnLoading = true;
xhrHandle.open(strMethod, strServer, blnAsync);
xhrHandle.setRequestHeader(headerLabel, headerValue);
xhrHandle.onreadystatechange = receiver;
xhrHandle.send(sData);
}
/**
* Turns a Javascript data object into a string for the server to read
* @param {Object} obj The object to stringify
* @param {Boolean} child If there is further nesting
* @returns The string to send to the server
* @type String
*/
, stringify: function(obj, child) {
var str = '';
for (var strKey in obj) {
if (typeof obj[strKey] == 'object') {
str += '&' + this.stringify(obj[strKey], (child ? child + '[' + strKey + ']' : strKey));
} else {
str += '&' + (child ? child + '[' : '') + strKey + (child ? ']' : '') + '=' + encodeURIComponent(obj[strKey]);
}
}
return str.substr(1, str.length);
}
}
}