Removes a plugin, partial user meta implementation
This commit is contained in:
1 parent
4716a57c06
commit
29872fba9e
18 files changed
+104
-5444
No files matched your search
@@ -1,20 +0,0 @@
|
||||
<?php
|
||||
class admin_page_class
|
||||
{
|
||||
static function generate_admin_page()
|
||||
{
|
||||
include('admin_page.php');
|
||||
}
|
||||
static function add_menu_item()
|
||||
{
|
||||
add_submenu_page(
|
||||
'options-general.php',
|
||||
'wp-api',
|
||||
'wp-api',
|
||||
'manage_options',
|
||||
'wp-api',
|
||||
'admin_page_class::generate_admin_page'
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,192 +0,0 @@
|
||||
<div class="wrap">
|
||||
<?php screen_icon(); $dir = network_site_url('/');?>
|
||||
<h2>wp-api administration</h2>
|
||||
<table class="widefat">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width=100>Method</th>
|
||||
<th width=200>Description</th>
|
||||
<th>arguments</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th width=100>Method</th>
|
||||
<th width=200>Description</th>
|
||||
<th>arguments</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
<tbody>
|
||||
<!-- posts -->
|
||||
<tr>
|
||||
|
||||
<td><code><a href="#" id="i_p">get_posts</a></code></td>
|
||||
|
||||
<td id="p">Call this method to get the recent posts/pages or specify the post/page id to get the specified post information.</td>
|
||||
|
||||
<td id="p2">
|
||||
argument: <b>dev</b> (optional)<br>
|
||||
value: <b>1</b> >> pretty output in browser<br>
|
||||
value: <b>0</b> >> default json format to use in your program<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_posts&dev=1" target="_blank"><?php echo $dir ?>?wpapi=get_posts&<b>dev=1</b></a>
|
||||
<hr>
|
||||
|
||||
argument: <b>id</b> (optional)<br>
|
||||
value: <b>post or page id</b> >> show information about the specified post<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_posts&dev=1&id=1" target="_blank"><?php echo $dir ?>?wpapi=get_posts&dev=1&<b>id=1</b></a>
|
||||
<hr>
|
||||
|
||||
argument: <b>count</b> (optional)<br>
|
||||
value: <b>number of items per page</b> >> specify the number of post items to be returned.<br><br>
|
||||
|
||||
argument: <b>page</b> (optional)<br>
|
||||
value: <b>page number</b> >> if <i>count</i> is set, use the <i>page</i> argument to move forward through the rest of the items.<br><br>
|
||||
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_posts&dev=1&count=2&page=1" target="_blank"><?php echo $dir ?>?wpapi=get_posts&dev=1&<b>count=2</b>&<b>page=1</b></a>
|
||||
<hr>
|
||||
|
||||
argument: <b>comment</b> (optional)<br>
|
||||
value: <b>1</b> >> Return comments if available<br>
|
||||
value: <b>0</b> >> Don't return comments<br><br>
|
||||
|
||||
argument: <b>content</b> (optional)<br>
|
||||
value: <b>1</b> >> Return the content<br>
|
||||
value: <b>0</b> >> Don't return the content<br><br>
|
||||
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_posts&dev=1&comment=1&content=1" target="_blank"><?php echo $dir ?>?wpapi=get_posts&dev=1&<b>comment=1</b>&<b>content=1</b></a>
|
||||
<hr>
|
||||
argument: <b>type</b> (optional)<br>
|
||||
value: <b>posts type</b> >> Put post and get only posts, put page and get only pages <br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_posts&dev=1&type=page" target="_blank"><?php echo $dir ?>?wpapi=get_posts&dev=1&<b>type=page</b></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- tags -->
|
||||
<tr>
|
||||
|
||||
<td><code><a href="#" id="i_t">get_tags</a></code></td>
|
||||
|
||||
<td id="t">Call this method to retrieve all tag information</td>
|
||||
|
||||
<td id="t2">
|
||||
argument: <b>dev</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>count</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>page</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_tags&dev=1" target="_blank"><?php echo $dir ?>?wpapi=get_tags&dev=1</a>
|
||||
<hr>
|
||||
argument: <b>id</b> (optional)<br>
|
||||
value: <b>tag id</b> >> return information about the specified tag<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_tags&dev=1&id=1" target="_blank"><?php echo $dir ?>?wpapi=get_tags&dev=1&<b>id=1</b></a>
|
||||
<hr>
|
||||
argument: <b>cat</b> (optional)<br>
|
||||
value: <b>1</b> >> returns those tags with taxonomy of category<br>
|
||||
value: <b>0</b> >> does not return tags with taxonomy of category<br><br>
|
||||
|
||||
argument: <b>tag</b> (optional)<br>
|
||||
value: <b>1</b> >> returns normal tags<br>
|
||||
value: <b>0</b> >> does not return normal tags<br><br>
|
||||
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_tags&dev=1&cat=1&tag=1" target="_blank"><?php echo $dir ?>?wpapi=get_tags&dev=1&<b>cat=1</b>&<b>tag=1</b></a>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<!-- author -->
|
||||
<tr>
|
||||
|
||||
<td><code><a href="#" id="i_a">get_author</a></code></td>
|
||||
|
||||
<td id="a">Call this method to retrieve information about authors registered in the wordpress blog</td>
|
||||
|
||||
<td id="a2">
|
||||
argument: <b>dev</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>count</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>page</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_author&dev=1" target="_blank"><?php echo $dir ?>?wpapi=get_author&dev=1</a>
|
||||
<hr>
|
||||
argument: <b>id</b> (optional)<br>
|
||||
value: <b>author id</b> >> return information about the specified author<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=get_author&dev=1&id=1" target="_blank"><?php echo $dir ?>?wpapi=get_author&dev=1&<b>id=1</b></a>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<!-- gravatar -->
|
||||
<tr>
|
||||
|
||||
<td><code><a href="#" id="i_g">gravatar</a></code></td>
|
||||
|
||||
<td id="g">Call this method to connect to the gravatar api and retrieve the gravatar based on the email address you specify.</td>
|
||||
|
||||
|
||||
<td id="g2">
|
||||
argument: <b>dev</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=gravatar&dev=1" target="_blank"><?php echo $dir ?>?wpapi=gravatar&dev=1</a>
|
||||
<hr>
|
||||
argument: <b>email</b> (required)<br>
|
||||
value: <b>standard email address</b> >> the email address to found its gravatar<br><br>
|
||||
|
||||
argument: <b>size</b> (optional)<br>
|
||||
value: <b>size of the gravatar in pixel</b> >> size of the returned gravatar image, default value is 100 which means the returned gravatar image will be 100X100 pixel<br><br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=gravatar&dev=1&email=email@site.com&size=200" target="_blank"><?php echo $dir ?>?wpapi=gravatar&dev=1&<b>email=email@site.com</b>&<b>size=200</b></a>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<!-- search -->
|
||||
<tr>
|
||||
|
||||
<td><code><a href="#" id="i_s">search</a></code></td>
|
||||
|
||||
<td id="s">Call this method and pass <i>keyword</i> argument to return the search results.</td>
|
||||
|
||||
|
||||
<td id="s2">
|
||||
argument: <b>dev</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>count</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>page</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>comment</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>content</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
argument: <b>type</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=search&dev=1&keyword=post&count=2&page=1&content=1&comment=1&type=post" target="_blank"><?php echo $dir ?>?wpapi=search&dev=1&keyword=post&<b>count=2</b>&<b>page=1</b>&<b>content=1</b>&<b>comment=1</b>&<b>type=post</b></a>
|
||||
<hr>
|
||||
argument: <b>keyword</b> (required)<br>
|
||||
value: <b>search string</b> >> the keyword to be searched.<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=search&dev=1&keyword=something" target="_blank"><?php echo $dir ?>?wpapi=search&dev=1&<b>keyword=something</b></a>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<!-- comment -->
|
||||
<tr>
|
||||
|
||||
<td><code><a href="#" id="i_c">comment</a></code></td>
|
||||
|
||||
<td id="c">Call this method to submit a comment on a post.</td>
|
||||
|
||||
<td id="c2">
|
||||
argument: <b>dev</b> (optional) Read more about it in <i>get_posts</i> method<br>
|
||||
example: <a href="<?php echo $dir?>?wpapi=comment&dev=1" target="_blank"><?php echo $dir ?>?wpapi=comment&dev=1</a>
|
||||
<hr>
|
||||
argument: <b>name</b> (required)<br>
|
||||
value: <b>author name</b> >> name of the person who's leaving the comment<br><br>
|
||||
|
||||
argument: <b>email</b> (required)<br>
|
||||
value: <b>author email address</b> >> email address of the person who's leaving the comment<br><br>
|
||||
|
||||
argument: <b>content</b> (required)<br>
|
||||
value: <b>comment content</b> >> content of the comment<br><br>
|
||||
|
||||
argument: <b>post_id</b> (required)<br>
|
||||
value: <b>post id</b> >> id of the post which you are submitting your comment to<br><br>
|
||||
|
||||
example: <a href="<?php echo $dir?>?wpapi=comment&dev=1&name=Hadi&email=email@site.com&content=some content to comment&post_id=1" target="_blank"><?php echo $dir ?>?wpapi=comment&dev=1&<b>name=Hadi</b>&<b>email=email@site.com</b>&<b>content=some content to comment</b>&<b>post_id=1</b></a>
|
||||
<hr>
|
||||
argument: <b>website</b> (optional)<br>
|
||||
value: <b>www.your-site.com</b> >> Optionally you can pass author's website<br><br>
|
||||
|
||||
argument: <b>parent</b> (optional)<br>
|
||||
value: <b>reply to id</b> >> <i>parent</i> is the id of the comment which this will be a reply to. default value is <i>0</i><br><br>
|
||||
|
||||
example: <a href="<?php echo $dir?>?wpapi=comment&dev=1&name=Hadi&email=email@site.com&content=some content to comment&post_id=1&website=www.your-site.com&parent=0" target="_blank"><?php echo $dir ?>?wpapi=comment&dev=1&name=Hadi&email=email@site.com&content=some content to comment&post_id=1&<b>website=www.your-site.com</b>&<b>parent=0</b></a>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -1,86 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
*************************
|
||||
* Pretty print some JSON*
|
||||
*************************
|
||||
*/
|
||||
class Dev {
|
||||
function json_format($json)
|
||||
{
|
||||
$tab = " ";
|
||||
$new_json = "";
|
||||
$indent_level = 0;
|
||||
$in_string = false;
|
||||
|
||||
$json_obj = json_decode($json);
|
||||
|
||||
if($json_obj === false)
|
||||
return false;
|
||||
|
||||
$json = json_encode($json_obj);
|
||||
$len = strlen($json);
|
||||
|
||||
for($c = 0; $c < $len; $c++)
|
||||
{
|
||||
$char = $json[$c];
|
||||
switch($char)
|
||||
{
|
||||
case '{':
|
||||
case '[':
|
||||
if(!$in_string)
|
||||
{
|
||||
$new_json .= $char . "\n" . str_repeat($tab, $indent_level+1);
|
||||
$indent_level++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$new_json .= $char;
|
||||
}
|
||||
break;
|
||||
case '}':
|
||||
case ']':
|
||||
if(!$in_string)
|
||||
{
|
||||
$indent_level--;
|
||||
$new_json .= "\n" . str_repeat($tab, $indent_level) . $char;
|
||||
}
|
||||
else
|
||||
{
|
||||
$new_json .= $char;
|
||||
}
|
||||
break;
|
||||
case ',':
|
||||
if(!$in_string)
|
||||
{
|
||||
$new_json .= ",\n" . str_repeat($tab, $indent_level);
|
||||
}
|
||||
else
|
||||
{
|
||||
$new_json .= $char;
|
||||
}
|
||||
break;
|
||||
case ':':
|
||||
if(!$in_string)
|
||||
{
|
||||
$new_json .= ": ";
|
||||
}
|
||||
else
|
||||
{
|
||||
$new_json .= $char;
|
||||
}
|
||||
break;
|
||||
case '"':
|
||||
if($c > 0 && $json[$c-1] != '\\')
|
||||
{
|
||||
$in_string = !$in_string;
|
||||
}
|
||||
default:
|
||||
$new_json .= $char;
|
||||
break;
|
||||
}
|
||||
}
|
||||
header('Content-type: text/plain');
|
||||
return $new_json;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,861 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
/**
|
||||
* Converts to and from JSON format.
|
||||
*
|
||||
* JSON (JavaScript Object Notation) is a lightweight data-interchange
|
||||
* format. It is easy for humans to read and write. It is easy for machines
|
||||
* to parse and generate. It is based on a subset of the JavaScript
|
||||
* Programming Language, Standard ECMA-262 3rd Edition - December 1999.
|
||||
* This feature can also be found in Python. JSON is a text format that is
|
||||
* completely language independent but uses conventions that are familiar
|
||||
* to programmers of the C-family of languages, including C, C++, C#, Java,
|
||||
* JavaScript, Perl, TCL, and many others. These properties make JSON an
|
||||
* ideal data-interchange language.
|
||||
*
|
||||
* This package provides a simple encoder and decoder for JSON notation. It
|
||||
* is intended for use with client-side Javascript applications that make
|
||||
* use of HTTPRequest to perform server communication functions - data can
|
||||
* be encoded into JSON notation for use in a client-side javascript, or
|
||||
* decoded from incoming Javascript requests. JSON format is native to
|
||||
* Javascript, and can be directly eval()'ed with no further parsing
|
||||
* overhead
|
||||
*
|
||||
* All strings should be in ASCII or UTF-8 format!
|
||||
*
|
||||
* LICENSE: Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the following
|
||||
* conditions are met: Redistributions of source code must retain the
|
||||
* above copyright notice, this list of conditions and the following
|
||||
* disclaimer. Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
* DAMAGE.
|
||||
*
|
||||
* @category
|
||||
* @package Services_JSON
|
||||
* @author Michal Migurski <mike-json@teczno.com>
|
||||
* @author Matt Knapp <mdknapp[at]gmail[dot]com>
|
||||
* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
|
||||
* @copyright 2005 Michal Migurski
|
||||
* @version CVS: $Id: JSON.php 288200 2009-09-09 15:41:29Z alan_k $
|
||||
* @license http://www.opensource.org/licenses/bsd-license.php
|
||||
* @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
|
||||
*/
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_SLICE', 1);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_STR', 2);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_ARR', 3);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_OBJ', 4);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_CMT', 5);
|
||||
|
||||
/**
|
||||
* Behavior switch for Services_JSON::decode()
|
||||
*/
|
||||
define('SERVICES_JSON_LOOSE_TYPE', 16);
|
||||
|
||||
/**
|
||||
* Behavior switch for Services_JSON::decode()
|
||||
*/
|
||||
define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
|
||||
|
||||
/**
|
||||
* Converts to and from JSON format.
|
||||
*
|
||||
* Brief example of use:
|
||||
*
|
||||
* <code>
|
||||
* // create a new instance of Services_JSON
|
||||
* $json = new Services_JSON();
|
||||
*
|
||||
* // convert a complexe value to JSON notation, and send it to the browser
|
||||
* $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
|
||||
* $output = $json->encode($value);
|
||||
*
|
||||
* print($output);
|
||||
* // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
|
||||
*
|
||||
* // accept incoming POST data, assumed to be in JSON notation
|
||||
* $input = file_get_contents('php://input', 1000000);
|
||||
* $value = $json->decode($input);
|
||||
* </code>
|
||||
*/
|
||||
class Services_JSON
|
||||
{
|
||||
/**
|
||||
* constructs a new JSON instance
|
||||
*
|
||||
* @param int $use object behavior flags; combine with boolean-OR
|
||||
*
|
||||
* possible values:
|
||||
* - SERVICES_JSON_LOOSE_TYPE: loose typing.
|
||||
* "{...}" syntax creates associative arrays
|
||||
* instead of objects in decode().
|
||||
* - SERVICES_JSON_SUPPRESS_ERRORS: error suppression.
|
||||
* Values which can't be encoded (e.g. resources)
|
||||
* appear as NULL instead of throwing errors.
|
||||
* By default, a deeply-nested resource will
|
||||
* bubble up with an error, so all return values
|
||||
* from encode() should be checked with isError()
|
||||
*/
|
||||
function Services_JSON($use = 0)
|
||||
{
|
||||
$this->use = $use;
|
||||
}
|
||||
|
||||
/**
|
||||
* convert a string from one UTF-16 char to one UTF-8 char
|
||||
*
|
||||
* Normally should be handled by mb_convert_encoding, but
|
||||
* provides a slower PHP-only method for installations
|
||||
* that lack the multibye string extension.
|
||||
*
|
||||
* @param string $utf16 UTF-16 character
|
||||
* @return string UTF-8 character
|
||||
* @access private
|
||||
*/
|
||||
function utf162utf8($utf16)
|
||||
{
|
||||
// oh please oh please oh please oh please oh please
|
||||
if(function_exists('mb_convert_encoding')) {
|
||||
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
|
||||
}
|
||||
|
||||
$bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
|
||||
|
||||
switch(true) {
|
||||
case ((0x7F & $bytes) == $bytes):
|
||||
// this case should never be reached, because we are in ASCII range
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0x7F & $bytes);
|
||||
|
||||
case (0x07FF & $bytes) == $bytes:
|
||||
// return a 2-byte UTF-8 character
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0xC0 | (($bytes >> 6) & 0x1F))
|
||||
. chr(0x80 | ($bytes & 0x3F));
|
||||
|
||||
case (0xFFFF & $bytes) == $bytes:
|
||||
// return a 3-byte UTF-8 character
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0xE0 | (($bytes >> 12) & 0x0F))
|
||||
. chr(0x80 | (($bytes >> 6) & 0x3F))
|
||||
. chr(0x80 | ($bytes & 0x3F));
|
||||
}
|
||||
|
||||
// ignoring UTF-32 for now, sorry
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* convert a string from one UTF-8 char to one UTF-16 char
|
||||
*
|
||||
* Normally should be handled by mb_convert_encoding, but
|
||||
* provides a slower PHP-only method for installations
|
||||
* that lack the multibye string extension.
|
||||
*
|
||||
* @param string $utf8 UTF-8 character
|
||||
* @return string UTF-16 character
|
||||
* @access private
|
||||
*/
|
||||
function utf82utf16($utf8)
|
||||
{
|
||||
// oh please oh please oh please oh please oh please
|
||||
if(function_exists('mb_convert_encoding')) {
|
||||
return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
|
||||
}
|
||||
|
||||
switch(strlen($utf8)) {
|
||||
case 1:
|
||||
// this case should never be reached, because we are in ASCII range
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return $utf8;
|
||||
|
||||
case 2:
|
||||
// return a UTF-16 character from a 2-byte UTF-8 char
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0x07 & (ord($utf8{0}) >> 2))
|
||||
. chr((0xC0 & (ord($utf8{0}) << 6))
|
||||
| (0x3F & ord($utf8{1})));
|
||||
|
||||
case 3:
|
||||
// return a UTF-16 character from a 3-byte UTF-8 char
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr((0xF0 & (ord($utf8{0}) << 4))
|
||||
| (0x0F & (ord($utf8{1}) >> 2)))
|
||||
. chr((0xC0 & (ord($utf8{1}) << 6))
|
||||
| (0x7F & ord($utf8{2})));
|
||||
}
|
||||
|
||||
// ignoring UTF-32 for now, sorry
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* encodes an arbitrary variable into JSON format (and sends JSON Header)
|
||||
*
|
||||
* @param mixed $var any number, boolean, string, array, or object to be encoded.
|
||||
* see argument 1 to Services_JSON() above for array-parsing behavior.
|
||||
* if var is a strng, note that encode() always expects it
|
||||
* to be in ASCII or UTF-8 format!
|
||||
*
|
||||
* @return mixed JSON string representation of input var or an error if a problem occurs
|
||||
* @access public
|
||||
*/
|
||||
function encode($var)
|
||||
{
|
||||
header('Content-type: application/json');
|
||||
return $this->_encode($var);
|
||||
}
|
||||
/**
|
||||
* encodes an arbitrary variable into JSON format without JSON Header - warning - may allow CSS!!!!)
|
||||
*
|
||||
* @param mixed $var any number, boolean, string, array, or object to be encoded.
|
||||
* see argument 1 to Services_JSON() above for array-parsing behavior.
|
||||
* if var is a strng, note that encode() always expects it
|
||||
* to be in ASCII or UTF-8 format!
|
||||
*
|
||||
* @return mixed JSON string representation of input var or an error if a problem occurs
|
||||
* @access public
|
||||
*/
|
||||
function encodeUnsafe($var)
|
||||
{
|
||||
return $this->_encode($var);
|
||||
}
|
||||
/**
|
||||
* PRIVATE CODE that does the work of encodes an arbitrary variable into JSON format
|
||||
*
|
||||
* @param mixed $var any number, boolean, string, array, or object to be encoded.
|
||||
* see argument 1 to Services_JSON() above for array-parsing behavior.
|
||||
* if var is a strng, note that encode() always expects it
|
||||
* to be in ASCII or UTF-8 format!
|
||||
*
|
||||
* @return mixed JSON string representation of input var or an error if a problem occurs
|
||||
* @access public
|
||||
*/
|
||||
function _encode($var)
|
||||
{
|
||||
|
||||
switch (gettype($var)) {
|
||||
case 'boolean':
|
||||
return $var ? 'true' : 'false';
|
||||
|
||||
case 'NULL':
|
||||
return 'null';
|
||||
|
||||
case 'integer':
|
||||
return (int) $var;
|
||||
|
||||
case 'double':
|
||||
case 'float':
|
||||
return (float) $var;
|
||||
|
||||
case 'string':
|
||||
// STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
|
||||
$ascii = '';
|
||||
$strlen_var = strlen($var);
|
||||
|
||||
/*
|
||||
* Iterate over every character in the string,
|
||||
* escaping with a slash or encoding to UTF-8 where necessary
|
||||
*/
|
||||
for ($c = 0; $c < $strlen_var; ++$c) {
|
||||
|
||||
$ord_var_c = ord($var{$c});
|
||||
|
||||
switch (true) {
|
||||
case $ord_var_c == 0x08:
|
||||
$ascii .= '\b';
|
||||
break;
|
||||
case $ord_var_c == 0x09:
|
||||
$ascii .= '\t';
|
||||
break;
|
||||
case $ord_var_c == 0x0A:
|
||||
$ascii .= '\n';
|
||||
break;
|
||||
case $ord_var_c == 0x0C:
|
||||
$ascii .= '\f';
|
||||
break;
|
||||
case $ord_var_c == 0x0D:
|
||||
$ascii .= '\r';
|
||||
break;
|
||||
|
||||
case $ord_var_c == 0x22:
|
||||
case $ord_var_c == 0x2F:
|
||||
case $ord_var_c == 0x5C:
|
||||
// double quote, slash, slosh
|
||||
$ascii .= '\\'.$var{$c};
|
||||
break;
|
||||
|
||||
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
|
||||
// characters U-00000000 - U-0000007F (same as ASCII)
|
||||
$ascii .= $var{$c};
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xE0) == 0xC0):
|
||||
// characters U-00000080 - U-000007FF, mask 110XXXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
if ($c+1 >= $strlen_var) {
|
||||
$c += 1;
|
||||
$ascii .= '?';
|
||||
break;
|
||||
}
|
||||
|
||||
$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
|
||||
$c += 1;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xF0) == 0xE0):
|
||||
if ($c+2 >= $strlen_var) {
|
||||
$c += 2;
|
||||
$ascii .= '?';
|
||||
break;
|
||||
}
|
||||
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
@ord($var{$c + 1}),
|
||||
@ord($var{$c + 2}));
|
||||
$c += 2;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xF8) == 0xF0):
|
||||
if ($c+3 >= $strlen_var) {
|
||||
$c += 3;
|
||||
$ascii .= '?';
|
||||
break;
|
||||
}
|
||||
// characters U-00010000 - U-001FFFFF, mask 11110XXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}));
|
||||
$c += 3;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xFC) == 0xF8):
|
||||
// characters U-00200000 - U-03FFFFFF, mask 111110XX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
if ($c+4 >= $strlen_var) {
|
||||
$c += 4;
|
||||
$ascii .= '?';
|
||||
break;
|
||||
}
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}),
|
||||
ord($var{$c + 4}));
|
||||
$c += 4;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xFE) == 0xFC):
|
||||
if ($c+5 >= $strlen_var) {
|
||||
$c += 5;
|
||||
$ascii .= '?';
|
||||
break;
|
||||
}
|
||||
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}),
|
||||
ord($var{$c + 4}),
|
||||
ord($var{$c + 5}));
|
||||
$c += 5;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return '"'.$ascii.'"';
|
||||
|
||||
case 'array':
|
||||
/*
|
||||
* As per JSON spec if any array key is not an integer
|
||||
* we must treat the the whole array as an object. We
|
||||
* also try to catch a sparsely populated associative
|
||||
* array with numeric keys here because some JS engines
|
||||
* will create an array with empty indexes up to
|
||||
* max_index which can cause memory issues and because
|
||||
* the keys, which may be relevant, will be remapped
|
||||
* otherwise.
|
||||
*
|
||||
* As per the ECMA and JSON specification an object may
|
||||
* have any string as a property. Unfortunately due to
|
||||
* a hole in the ECMA specification if the key is a
|
||||
* ECMA reserved word or starts with a digit the
|
||||
* parameter is only accessible using ECMAScript's
|
||||
* bracket notation.
|
||||
*/
|
||||
|
||||
// treat as a JSON object
|
||||
if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
|
||||
$properties = array_map(array($this, 'name_value'),
|
||||
array_keys($var),
|
||||
array_values($var));
|
||||
|
||||
foreach($properties as $property) {
|
||||
if(Services_JSON::isError($property)) {
|
||||
return $property;
|
||||
}
|
||||
}
|
||||
|
||||
return '{' . join(',', $properties) . '}';
|
||||
}
|
||||
|
||||
// treat it like a regular array
|
||||
$elements = array_map(array($this, '_encode'), $var);
|
||||
|
||||
foreach($elements as $element) {
|
||||
if(Services_JSON::isError($element)) {
|
||||
return $element;
|
||||
}
|
||||
}
|
||||
|
||||
return '[' . join(',', $elements) . ']';
|
||||
|
||||
case 'object':
|
||||
$vars = get_object_vars($var);
|
||||
|
||||
$properties = array_map(array($this, 'name_value'),
|
||||
array_keys($vars),
|
||||
array_values($vars));
|
||||
|
||||
foreach($properties as $property) {
|
||||
if(Services_JSON::isError($property)) {
|
||||
return $property;
|
||||
}
|
||||
}
|
||||
|
||||
return '{' . join(',', $properties) . '}';
|
||||
|
||||
default:
|
||||
return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
|
||||
? 'null'
|
||||
: new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* array-walking function for use in generating JSON-formatted name-value pairs
|
||||
*
|
||||
* @param string $name name of key to use
|
||||
* @param mixed $value reference to an array element to be encoded
|
||||
*
|
||||
* @return string JSON-formatted name-value pair, like '"name":value'
|
||||
* @access private
|
||||
*/
|
||||
function name_value($name, $value)
|
||||
{
|
||||
$encoded_value = $this->_encode($value);
|
||||
|
||||
if(Services_JSON::isError($encoded_value)) {
|
||||
return $encoded_value;
|
||||
}
|
||||
|
||||
return $this->_encode(strval($name)) . ':' . $encoded_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* reduce a string by removing leading and trailing comments and whitespace
|
||||
*
|
||||
* @param $str string string value to strip of comments and whitespace
|
||||
*
|
||||
* @return string string value stripped of comments and whitespace
|
||||
* @access private
|
||||
*/
|
||||
function reduce_string($str)
|
||||
{
|
||||
$str = preg_replace(array(
|
||||
|
||||
// eliminate single line comments in '// ...' form
|
||||
'#^\s*//(.+)$#m',
|
||||
|
||||
// eliminate multi-line comments in '/* ... */' form, at start of string
|
||||
'#^\s*/\*(.+)\*/#Us',
|
||||
|
||||
// eliminate multi-line comments in '/* ... */' form, at end of string
|
||||
'#/\*(.+)\*/\s*$#Us'
|
||||
|
||||
), '', $str);
|
||||
|
||||
// eliminate extraneous space
|
||||
return trim($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* decodes a JSON string into appropriate variable
|
||||
*
|
||||
* @param string $str JSON-formatted string
|
||||
*
|
||||
* @return mixed number, boolean, string, array, or object
|
||||
* corresponding to given JSON input string.
|
||||
* See argument 1 to Services_JSON() above for object-output behavior.
|
||||
* Note that decode() always returns strings
|
||||
* in ASCII or UTF-8 format!
|
||||
* @access public
|
||||
*/
|
||||
function decode($str)
|
||||
{
|
||||
$str = $this->reduce_string($str);
|
||||
|
||||
switch (strtolower($str)) {
|
||||
case 'true':
|
||||
return true;
|
||||
|
||||
case 'false':
|
||||
return false;
|
||||
|
||||
case 'null':
|
||||
return null;
|
||||
|
||||
default:
|
||||
$m = array();
|
||||
|
||||
if (is_numeric($str)) {
|
||||
// Lookie-loo, it's a number
|
||||
|
||||
// This would work on its own, but I'm trying to be
|
||||
// good about returning integers where appropriate:
|
||||
// return (float)$str;
|
||||
|
||||
// Return float or int, as appropriate
|
||||
return ((float)$str == (integer)$str)
|
||||
? (integer)$str
|
||||
: (float)$str;
|
||||
|
||||
} elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
|
||||
// STRINGS RETURNED IN UTF-8 FORMAT
|
||||
$delim = substr($str, 0, 1);
|
||||
$chrs = substr($str, 1, -1);
|
||||
$utf8 = '';
|
||||
$strlen_chrs = strlen($chrs);
|
||||
|
||||
for ($c = 0; $c < $strlen_chrs; ++$c) {
|
||||
|
||||
$substr_chrs_c_2 = substr($chrs, $c, 2);
|
||||
$ord_chrs_c = ord($chrs{$c});
|
||||
|
||||
switch (true) {
|
||||
case $substr_chrs_c_2 == '\b':
|
||||
$utf8 .= chr(0x08);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\t':
|
||||
$utf8 .= chr(0x09);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\n':
|
||||
$utf8 .= chr(0x0A);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\f':
|
||||
$utf8 .= chr(0x0C);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\r':
|
||||
$utf8 .= chr(0x0D);
|
||||
++$c;
|
||||
break;
|
||||
|
||||
case $substr_chrs_c_2 == '\\"':
|
||||
case $substr_chrs_c_2 == '\\\'':
|
||||
case $substr_chrs_c_2 == '\\\\':
|
||||
case $substr_chrs_c_2 == '\\/':
|
||||
if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
|
||||
($delim == "'" && $substr_chrs_c_2 != '\\"')) {
|
||||
$utf8 .= $chrs{++$c};
|
||||
}
|
||||
break;
|
||||
|
||||
case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
|
||||
// single, escaped unicode character
|
||||
$utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
|
||||
. chr(hexdec(substr($chrs, ($c + 4), 2)));
|
||||
$utf8 .= $this->utf162utf8($utf16);
|
||||
$c += 5;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
|
||||
$utf8 .= $chrs{$c};
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xE0) == 0xC0:
|
||||
// characters U-00000080 - U-000007FF, mask 110XXXXX
|
||||
//see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 2);
|
||||
++$c;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xF0) == 0xE0:
|
||||
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 3);
|
||||
$c += 2;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xF8) == 0xF0:
|
||||
// characters U-00010000 - U-001FFFFF, mask 11110XXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 4);
|
||||
$c += 3;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xFC) == 0xF8:
|
||||
// characters U-00200000 - U-03FFFFFF, mask 111110XX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 5);
|
||||
$c += 4;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xFE) == 0xFC:
|
||||
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 6);
|
||||
$c += 5;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $utf8;
|
||||
|
||||
} elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
|
||||
// array, or object notation
|
||||
|
||||
if ($str{0} == '[') {
|
||||
$stk = array(SERVICES_JSON_IN_ARR);
|
||||
$arr = array();
|
||||
} else {
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$stk = array(SERVICES_JSON_IN_OBJ);
|
||||
$obj = array();
|
||||
} else {
|
||||
$stk = array(SERVICES_JSON_IN_OBJ);
|
||||
$obj = new stdClass();
|
||||
}
|
||||
}
|
||||
|
||||
array_push($stk, array('what' => SERVICES_JSON_SLICE,
|
||||
'where' => 0,
|
||||
'delim' => false));
|
||||
|
||||
$chrs = substr($str, 1, -1);
|
||||
$chrs = $this->reduce_string($chrs);
|
||||
|
||||
if ($chrs == '') {
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
return $arr;
|
||||
|
||||
} else {
|
||||
return $obj;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//print("\nparsing {$chrs}\n");
|
||||
|
||||
$strlen_chrs = strlen($chrs);
|
||||
|
||||
for ($c = 0; $c <= $strlen_chrs; ++$c) {
|
||||
|
||||
$top = end($stk);
|
||||
$substr_chrs_c_2 = substr($chrs, $c, 2);
|
||||
|
||||
if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
|
||||
// found a comma that is not inside a string, array, etc.,
|
||||
// OR we've reached the end of the character list
|
||||
$slice = substr($chrs, $top['where'], ($c - $top['where']));
|
||||
array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
|
||||
//print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
// we are in an array, so just push an element onto the stack
|
||||
array_push($arr, $this->decode($slice));
|
||||
|
||||
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
|
||||
// we are in an object, so figure
|
||||
// out the property name and set an
|
||||
// element in an associative array,
|
||||
// for now
|
||||
$parts = array();
|
||||
|
||||
if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
|
||||
// "name":value pair
|
||||
$key = $this->decode($parts[1]);
|
||||
$val = $this->decode($parts[2]);
|
||||
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$obj[$key] = $val;
|
||||
} else {
|
||||
$obj->$key = $val;
|
||||
}
|
||||
} elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
|
||||
// name:value pair, where name is unquoted
|
||||
$key = $parts[1];
|
||||
$val = $this->decode($parts[2]);
|
||||
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$obj[$key] = $val;
|
||||
} else {
|
||||
$obj->$key = $val;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
|
||||
// found a quote, and we are not inside a string
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
|
||||
//print("Found start of string at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == $top['delim']) &&
|
||||
($top['what'] == SERVICES_JSON_IN_STR) &&
|
||||
((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
|
||||
// found a quote, we're in a string, and it's not escaped
|
||||
// we know that it's not escaped becase there is _not_ an
|
||||
// odd number of backslashes at the end of the string so far
|
||||
array_pop($stk);
|
||||
//print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($chrs{$c} == '[') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a left-bracket, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
|
||||
//print("Found start of array at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
|
||||
// found a right-bracket, and we're in an array
|
||||
array_pop($stk);
|
||||
//print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($chrs{$c} == '{') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a left-brace, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
|
||||
//print("Found start of object at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
|
||||
// found a right-brace, and we're in an object
|
||||
array_pop($stk);
|
||||
//print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($substr_chrs_c_2 == '/*') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a comment start, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
|
||||
$c++;
|
||||
//print("Found start of comment at {$c}\n");
|
||||
|
||||
} elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
|
||||
// found a comment end, and we're in one now
|
||||
array_pop($stk);
|
||||
$c++;
|
||||
|
||||
for ($i = $top['where']; $i <= $c; ++$i)
|
||||
$chrs = substr_replace($chrs, ' ', $i, 1);
|
||||
|
||||
//print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
return $arr;
|
||||
|
||||
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
|
||||
return $obj;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Ultimately, this should just call PEAR::isError()
|
||||
*/
|
||||
function isError($data, $code = null)
|
||||
{
|
||||
if (class_exists('pear')) {
|
||||
return PEAR::isError($data, $code);
|
||||
} elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
|
||||
is_subclass_of($data, 'services_json_error'))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (class_exists('PEAR_Error')) {
|
||||
|
||||
class Services_JSON_Error extends PEAR_Error
|
||||
{
|
||||
function Services_JSON_Error($message = 'unknown error', $code = null,
|
||||
$mode = null, $options = null, $userinfo = null)
|
||||
{
|
||||
parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
/**
|
||||
* @todo Ultimately, this class shall be descended from PEAR_Error
|
||||
*/
|
||||
class Services_JSON_Error
|
||||
{
|
||||
function Services_JSON_Error($message = 'unknown error', $code = null,
|
||||
$mode = null, $options = null, $userinfo = null)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
$(document).ready(function() {
|
||||
$('#p,#p1,#p2,#p3').hide();
|
||||
$('#t,#t1,#t2,#t3').hide();
|
||||
$('#a,#a1,#a2,#a3').hide();
|
||||
$('#g,#g1,#g2,#g3').hide();
|
||||
$('#s,#s1,#s2,#s3').hide();
|
||||
$('#c,#c1,#c2,#c3').hide();
|
||||
$('#i_p').click(function() {
|
||||
$('#p,#p1,#p2,#p3').show();
|
||||
$('#t,#t1,#t2,#t3').hide();
|
||||
$('#a,#a1,#a2,#a3').hide();
|
||||
$('#g,#g1,#g2,#g3').hide();
|
||||
$('#s,#s1,#s2,#s3').hide();
|
||||
$('#c,#c1,#c2,#c3').hide();
|
||||
});
|
||||
$('#i_t').click(function() {
|
||||
$('#p,#p1,#p2,#p3').hide();
|
||||
$('#t,#t1,#t2,#t3').show();
|
||||
$('#a,#a1,#a2,#a3').hide();
|
||||
$('#g,#g1,#g2,#g3').hide();
|
||||
$('#s,#s1,#s2,#s3').hide();
|
||||
$('#c,#c1,#c2,#c3').hide();
|
||||
});
|
||||
$('#i_a').click(function() {
|
||||
$('#p,#p1,#p2,#p3').hide();
|
||||
$('#t,#t1,#t2,#t3').hide();
|
||||
$('#a,#a1,#a2,#a3').show();
|
||||
$('#g,#g1,#g2,#g3').hide();
|
||||
$('#s,#s1,#s2,#s3').hide();
|
||||
$('#c,#c1,#c2,#c3').hide();
|
||||
});
|
||||
$('#i_g').click(function() {
|
||||
$('#p,#p1,#p2,#p3').hide();
|
||||
$('#t,#t1,#t2,#t3').hide();
|
||||
$('#a,#a1,#a2,#a3').hide();
|
||||
$('#g,#g1,#g2,#g3').show();
|
||||
$('#s,#s1,#s2,#s3').hide();
|
||||
$('#c,#c1,#c2,#c3').hide();
|
||||
});
|
||||
$('#i_s').click(function() {
|
||||
$('#p,#p1,#p2,#p3').hide();
|
||||
$('#t,#t1,#t2,#t3').hide();
|
||||
$('#a,#a1,#a2,#a3').hide();
|
||||
$('#g,#g1,#g2,#g3').hide();
|
||||
$('#s,#s1,#s2,#s3').show();
|
||||
$('#c,#c1,#c2,#c3').hide();
|
||||
});
|
||||
$('#i_c').click(function() {
|
||||
$('#p,#p1,#p2,#p3').hide();
|
||||
$('#t,#t1,#t2,#t3').hide();
|
||||
$('#a,#a1,#a2,#a3').hide();
|
||||
$('#g,#g1,#g2,#g3').hide();
|
||||
$('#s,#s1,#s2,#s3').hide();
|
||||
$('#c,#c1,#c2,#c3').show();
|
||||
});
|
||||
});
|
||||
@@ -1,281 +0,0 @@
|
||||
<?php
|
||||
@include_once('JSON.php');
|
||||
@include_once ('DEV.php');
|
||||
class comment_api
|
||||
{
|
||||
function __construct()
|
||||
{
|
||||
add_filter('rewrite_rules_array','comment_api::insertRules');
|
||||
add_filter('query_vars','comment_api::insertQueryVars');
|
||||
add_action('parse_query','comment_api::insertParseQuery');
|
||||
}
|
||||
static function comment_send($dev,$name,$email,$website,$comment,$post_id,$parent)
|
||||
{
|
||||
global $wpdb;
|
||||
if(empty($name) or empty($email) or empty($comment) or empty($post_id))
|
||||
{
|
||||
$err_msg = "required arguments are 'name', 'email', 'content', 'post_id' and optional arguments are 'website', 'parent'";
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$check = true;
|
||||
if((int) $name)
|
||||
{
|
||||
$err_msg = 'name argument can not be a number';
|
||||
$status = 'error';
|
||||
$check = false;
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email))
|
||||
{
|
||||
$err_msg = 'please insert a valid email address';
|
||||
$status = 'error';
|
||||
$check = false;
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(!(int) $post_id or is_float($post_id))
|
||||
{
|
||||
$err_msg = 'post id must be an integer number';
|
||||
$status = 'error';
|
||||
$check = false;
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(!(int) $parent and !empty($parent))
|
||||
{
|
||||
$err_msg = 'parent argument must be an integer number';
|
||||
$status = 'error';
|
||||
$check = false;
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if($parent == null or empty($parent))
|
||||
{
|
||||
$parent = 0;
|
||||
}
|
||||
if($check)
|
||||
{
|
||||
$sql = 'SELECT DISTINCT * FROM '.$wpdb->posts.' AS POSTS WHERE POSTS.post_status="publish"';
|
||||
$obj = $wpdb->get_results($sql);
|
||||
$check_comment_status = true;
|
||||
$is_post = false;
|
||||
foreach ($obj as $key => $value)
|
||||
{
|
||||
if($value->ID == $post_id)
|
||||
{
|
||||
$is_post = true;
|
||||
if($value->comment_status == 'closed') $check_comment_status = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$sql_c = 'SELECT * FROM '.$wpdb->comments;
|
||||
$obj_c = $wpdb->get_results($sql_c);
|
||||
$check_p = true;
|
||||
foreach ($obj_c as $value_c)
|
||||
{
|
||||
if($parent == $value_c->comment_ID and $post_id == $value_c->comment_post_ID)
|
||||
{
|
||||
$check_p = true;
|
||||
$parent = $value_c->comment_ID;
|
||||
break;
|
||||
}
|
||||
if($parent != $value_c->comment_ID)
|
||||
{
|
||||
$check_p = false;
|
||||
}
|
||||
}
|
||||
if($check_p == false)
|
||||
{
|
||||
$parent = 0;
|
||||
}
|
||||
if($is_post == false)
|
||||
{
|
||||
$err_msg = "post id not found";
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
exit();
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
if($check_comment_status == false)
|
||||
{
|
||||
$check = false;
|
||||
$err_msg = "comments are closed for this post id";
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
exit();
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
$time = current_time('mysql');
|
||||
$user_ip = $_SERVER['REMOTE_ADDR'];
|
||||
$user_agent = $_SERVER['HTTP_USER_AGENT'];
|
||||
$comment_type = 'comment';
|
||||
$data = array(
|
||||
'comment_post_ID' => $post_id,
|
||||
'comment_author' => $name,
|
||||
'comment_author_email' => $email,
|
||||
'comment_author_url' => $website,
|
||||
'comment_author_IP' => $user_ip,
|
||||
'comment_content' => $comment,
|
||||
'comment_type' => $comment_type,
|
||||
'comment_parent' => $parent,
|
||||
'comment_date' => $time,
|
||||
'comment_approved' => 0,
|
||||
'comment_agent' => $user_agent
|
||||
);
|
||||
if(wp_insert_comment($data))
|
||||
{
|
||||
$err_msg = "the comment has been sent";
|
||||
$status = 'pending';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
static function insertRules($rules){
|
||||
$newrules = array();
|
||||
$newrules['redirect/url/(.+)$']='index.php?wpapi=comment&dev&name&email&website&content&post_id&parent';
|
||||
return $newrules+$rules;
|
||||
}
|
||||
static function insertQueryVars($vars){
|
||||
array_push($vars, 'wpapi','name','dev','email','website','content','post_id','parent');
|
||||
return $vars;
|
||||
}
|
||||
static function insertParseQuery($query)
|
||||
{
|
||||
if(!empty($query->query_vars['wpapi']) and $query->query_vars['wpapi'] == 'comment')
|
||||
{
|
||||
$dev = $_GET['dev'];
|
||||
$name = $_GET['name'];
|
||||
$email = $_GET['email'];
|
||||
$website = $_GET['website'];
|
||||
$comment = $_GET['content'];
|
||||
$post_id = $_GET['post_id'];
|
||||
$parent = $_GET['parent'];
|
||||
comment_api::comment_send($dev,$name,$email,$website,$comment,$post_id,$parent);
|
||||
header('Content-type: text/plain');
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,560 +0,0 @@
|
||||
<?php
|
||||
include_once('JSON.php');
|
||||
include_once('DEV.php');
|
||||
class get_author
|
||||
{
|
||||
function __construct()
|
||||
{
|
||||
add_filter('rewrite_rules_array','get_author::insertRules');
|
||||
add_filter('query_vars','get_author::insertQueryVars');
|
||||
add_action('parse_query','get_author::insertParseQuery');
|
||||
}
|
||||
static function author_info($dev)
|
||||
{
|
||||
global $wpdb;
|
||||
$sql = 'SELECT * FROM '.$wpdb->users;
|
||||
$obj = $wpdb->get_results($sql);
|
||||
$count_total = 0;
|
||||
foreach($obj as $num)
|
||||
{
|
||||
$count_total++;
|
||||
}
|
||||
$count = $count_total;
|
||||
$page = get_author::_numpage($count_total,$count);
|
||||
$check_err = true;
|
||||
$err_msg = '';
|
||||
$status = 'ok';
|
||||
if (!$obj)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'query can not connect to database';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(empty($obj))
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'the table is empty';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if($check_err)
|
||||
{
|
||||
foreach($obj as $key => $value)
|
||||
{
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'slug' => $value->user_nicename,
|
||||
'name' => $value->display_name,
|
||||
'first_name' => get_user_meta($value->ID, 'first_name', true),
|
||||
'last_name' => get_user_meta($value->ID, 'last_name', true),
|
||||
'nickname' => $value->user_nicename,
|
||||
'url' => $value->user_url,
|
||||
'description' => get_user_meta($value->ID, 'description', true),
|
||||
'gravatar' => get_author::get_gravatar($value->user_email)
|
||||
);
|
||||
$authors[] = $obj[$key];
|
||||
}
|
||||
if(empty($authors))
|
||||
{
|
||||
$authors = array();
|
||||
}
|
||||
@rsort($authors);
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'count' => $count,
|
||||
'count_total' => $count_total,
|
||||
'pages' => $page,
|
||||
'authors' => $authors
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
static function get_id_info($dev,$ID)
|
||||
{
|
||||
global $wpdb;
|
||||
$sql = 'SELECT * FROM '.$wpdb->users;
|
||||
$obj = $wpdb->get_results($sql);
|
||||
$check_err = true;
|
||||
$err_msg = '';
|
||||
$status = 'ok';
|
||||
if(!(int) $ID)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'id should be an integer number';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if (!$obj)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'query can not connect to database';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(empty($obj))
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'the table is empty';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if($check_err)
|
||||
{
|
||||
$check = '';
|
||||
foreach($obj as $key => $value)
|
||||
{
|
||||
if($ID == $value->ID)
|
||||
{
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'slug' => $value->user_nicename,
|
||||
'name' => $value->display_name,
|
||||
'first_name' => get_user_meta($value->ID, 'first_name', true),
|
||||
'last_name' => get_user_meta($value->ID, 'last_name', true),
|
||||
'nickname' => $value->user_nicename,
|
||||
'url' => $value->user_url,
|
||||
'description' => get_user_meta($value->ID, 'description', true),
|
||||
'gravatar' => get_author::get_gravatar($value->user_email)
|
||||
);
|
||||
$authors[] = $obj[$key];
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'authors' => $authors
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
$check = true;
|
||||
}
|
||||
if($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
$check = true;
|
||||
}
|
||||
}
|
||||
if($check == true)
|
||||
{
|
||||
exit();
|
||||
}
|
||||
if($ID !== $value->ID)
|
||||
{
|
||||
$check = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($check == false and (int) $ID)
|
||||
{
|
||||
$status = 'error';
|
||||
$err_msg = 'this id is not available';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
static function _numpage($co_tot,$co)
|
||||
{
|
||||
if($co > $co_tot)
|
||||
{
|
||||
$co_tot = $co;
|
||||
$page = $co_tot / $co;
|
||||
return $page;
|
||||
}
|
||||
else
|
||||
{
|
||||
$page = $co_tot / $co;
|
||||
if ($page > 0 and $page < 1)
|
||||
{
|
||||
$page = 2;
|
||||
return $page;
|
||||
}
|
||||
else if ($page > 1 and $page < 2)
|
||||
{
|
||||
$page = 2;
|
||||
return $page;
|
||||
}
|
||||
return ceil($page);
|
||||
}
|
||||
}
|
||||
static function get_count_page($dev,$co,$pa) {
|
||||
global $wpdb;
|
||||
$sql = 'SELECT * FROM '.$wpdb->users;
|
||||
$obj = $wpdb->get_results($sql);
|
||||
$count_total = 0;
|
||||
foreach($obj as $num)
|
||||
{
|
||||
$count_total++;
|
||||
}
|
||||
$check_err = true;
|
||||
$err_msg = '';
|
||||
$status = 'ok';
|
||||
if(!(int) $co)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'the value of count should be an integer number';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(!empty($pa) and !(int) $pa)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'the value of page should be an integer number';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if($co > $count_total)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'count should be lower than count_total';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if (!$obj)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'query can not connect to database';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(empty($obj))
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'the table is empty';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if($check_err)
|
||||
{
|
||||
$page = get_author::_numpage($count_total,$co);
|
||||
foreach($obj as $key => $value)
|
||||
{
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'slug' => $value->user_nicename,
|
||||
'name' => $value->display_name,
|
||||
'first_name' => get_user_meta($value->ID, 'first_name', true),
|
||||
'last_name' => get_user_meta($value->ID, 'last_name', true),
|
||||
'nickname' => $value->user_nicename,
|
||||
'url' => $value->user_url,
|
||||
'description' => get_user_meta($value->ID, 'description', true),
|
||||
'gravatar' => get_author::get_gravatar($value->user_email)
|
||||
);
|
||||
$authors[] = $obj[$key];
|
||||
}
|
||||
@rsort($authors);
|
||||
if(empty($pa) or $pa == 1 or $page == 1)
|
||||
{
|
||||
for($i=0;$i<$co;$i++)
|
||||
{
|
||||
$author[] = $authors[$i];
|
||||
}
|
||||
@rsort($author);
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'count' => $co,
|
||||
'count_total' => $count_total,
|
||||
'pages' => $page,
|
||||
'currPage' => 1,
|
||||
'authors' => $author
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(!empty($pa) and $pa != 1 and $page != 1)
|
||||
{
|
||||
if($pa >= $page and $page != 1)
|
||||
{
|
||||
$pa = $page;
|
||||
$count = 0;
|
||||
$begin = $co*($pa-1);
|
||||
$end = $begin + ($co - 1);
|
||||
for($i=$begin;$i<=$end;$i++)
|
||||
{
|
||||
if($authors[$i] == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$count++;
|
||||
$co = $count;
|
||||
}
|
||||
}
|
||||
}
|
||||
$begin = $co*($pa-1);
|
||||
$end = $begin + ($co - 1);
|
||||
for($i=$begin;$i<=$end;$i++)
|
||||
{
|
||||
if($authors[$i] == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$author[] = $authors[$i];
|
||||
}
|
||||
}
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'count' => $co,
|
||||
'count_total' => $count_total,
|
||||
'pages' => $page,
|
||||
'currPage' => $pa,
|
||||
'authors' => $author
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
static function get_gravatar( $email, $s = 100, $d = 'mm', $r = 'g', $img = false, $atts = array() )
|
||||
{
|
||||
$url = 'http://www.gravatar.com/avatar/';
|
||||
$url .= md5( strtolower( trim( $email ) ) );
|
||||
$url .= "?s=$s&d=$d&r=$r";
|
||||
if ( $img )
|
||||
{
|
||||
$url = '<img src="' . $url . '"';
|
||||
foreach ( $atts as $key => $val )
|
||||
$url .= ' ' . $key . '="' . $val . '"';
|
||||
$url .= ' />';
|
||||
}
|
||||
return $url;
|
||||
}
|
||||
static function insertRules($rules){
|
||||
$newrules = array();
|
||||
$newrules['redirect/url/(.+)$']='index.php?wpapi=get_author&dev&id&count&page';
|
||||
return $newrules+$rules;
|
||||
}
|
||||
static function insertQueryVars($vars){
|
||||
array_push($vars, 'wpapi','dev','id','count','page');
|
||||
return $vars;
|
||||
}
|
||||
static function insertParseQuery($query)
|
||||
{
|
||||
if(!empty($query->query_vars['wpapi']) and $query->query_vars['wpapi'] == 'get_author')
|
||||
{
|
||||
$dev = $_GET['dev'];
|
||||
$id = $_GET['id'];
|
||||
$page = $_GET['page'];
|
||||
$count = $_GET['count'];
|
||||
if(!empty($query->query_vars['id']) and $query->query_vars['id'] == $id)
|
||||
{
|
||||
get_author::get_id_info($dev,$id);
|
||||
header('Content-type: text/plain');
|
||||
exit();
|
||||
|
||||
}
|
||||
else if(!empty($query->query_vars['count']) and $query->query_vars['count'] == $count and $query->query_vars['page'] == $page)
|
||||
{
|
||||
get_author::get_count_page($dev,$count,$page);
|
||||
header('Content-type: text/plain');
|
||||
exit();
|
||||
}
|
||||
get_author::author_info($dev);
|
||||
header('Content-type: text/plain');
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,116 +0,0 @@
|
||||
<?php
|
||||
@include_once('JSON.php');
|
||||
@include_once ('DEV.php');
|
||||
class get_gravatar
|
||||
{
|
||||
function __construct()
|
||||
{
|
||||
add_filter('rewrite_rules_array','get_gravatar::insertRules');
|
||||
add_filter('query_vars','get_gravatar::insertQueryVars');
|
||||
add_action('parse_query','get_gravatar::insertParseQuery');
|
||||
}
|
||||
static function get_gravatar($dev,$email,$s)
|
||||
{
|
||||
if(!(int) $s and !empty($s))
|
||||
{
|
||||
$err_msg = "the size must an be integer number";
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
exit();
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
$gravatar = get_gravatar::_get_gravatar($email,$s);
|
||||
if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email))
|
||||
{
|
||||
$err_msg = "please insert a valid email address in 'email' ";
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$status = 'ok';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'gravatar' => $gravatar
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
}
|
||||
static function _get_gravatar( $email, $s, $d = 'mm', $r = 'g', $img = false, $atts = array() )
|
||||
{
|
||||
$url = 'http://www.gravatar.com/avatar/';
|
||||
$url .= md5( strtolower( trim( $email ) ) );
|
||||
$url .= "?s=$s&d=$d&r=$r";
|
||||
if ( $img )
|
||||
{
|
||||
$url = '<img src="' . $url . '"';
|
||||
foreach ( $atts as $key => $val )
|
||||
$url .= ' ' . $key . '="' . $val . '"';
|
||||
$url .= ' />';
|
||||
}
|
||||
return $url;
|
||||
}
|
||||
static function insertRules($rules){
|
||||
$newrules = array();
|
||||
$newrules['redirect/url/(.+)$']='index.php?wpapi=gravatar&dev&email&size';
|
||||
return $newrules+$rules;
|
||||
}
|
||||
static function insertQueryVars($vars){
|
||||
array_push($vars, 'wpapi','dev','email','size');
|
||||
return $vars;
|
||||
}
|
||||
static function insertParseQuery($query)
|
||||
{
|
||||
if(!empty($query->query_vars['wpapi']) and $query->query_vars['wpapi'] == 'gravatar')
|
||||
{
|
||||
$email = $_GET['email'];
|
||||
$dev = $_GET['dev'];
|
||||
$s = $_GET['size'];
|
||||
get_gravatar::get_gravatar($dev,$email,$s);
|
||||
header('Content-type: text/plain');
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -1,746 +0,0 @@
|
||||
<?php
|
||||
@include_once('JSON.php');
|
||||
@include_once ('DEV.php');
|
||||
class search_api
|
||||
{
|
||||
function __construct()
|
||||
{
|
||||
add_filter('rewrite_rules_array','search_api::insertRules');
|
||||
add_filter('query_vars','search_api::insertQueryVars');
|
||||
add_action('parse_query','search_api::insertParseQuery');
|
||||
}
|
||||
|
||||
static function get_result_search($dev,$s,$co,$pa,$con,$comm,$type)
|
||||
{
|
||||
global $wpdb;
|
||||
$status = 'ok';
|
||||
$check_err = true;
|
||||
$sql = 'SELECT DISTINCT * FROM '.$wpdb->posts.' AS POSTS WHERE POSTS.post_status="publish"';
|
||||
$obj = $wpdb->get_results($sql);
|
||||
/**
|
||||
* This file is an independent controller, used to query the WordPress database
|
||||
* and provide search results for Ajax requests.
|
||||
*
|
||||
* @return string Either return nothing (i.e. no results) or return some formatted results.
|
||||
*/
|
||||
if (!defined('WP_PLUGIN_URL'))
|
||||
{
|
||||
require_once( realpath('../../../').'/wp-config.php' );
|
||||
}
|
||||
$WP_Query_object = new WP_Query();
|
||||
$WP_Query_object->query(array('s' => $_GET['keyword']));
|
||||
if((int) $type)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'type can not an integer number';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
exit();
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
foreach($WP_Query_object->posts as $result)
|
||||
{
|
||||
if(empty($type))
|
||||
{
|
||||
foreach($obj as $key => $value)
|
||||
{
|
||||
$cat = get_the_category($value->ID);
|
||||
$tag = get_the_tags($value->ID);
|
||||
$author = get_posts::return_author($value->post_author);
|
||||
$com = get_posts::return_comment($value->ID);
|
||||
if($com == null)
|
||||
{
|
||||
$com = array();
|
||||
}
|
||||
if($tag == false)
|
||||
{
|
||||
$tag = array();
|
||||
}
|
||||
if($result->ID == $value->ID and (($comm == null and $con == null) or ($comm == 0 and $con == 0)))
|
||||
{
|
||||
$exp = explode("\n",$value->post_content);
|
||||
if(empty($value->post_excerpt))
|
||||
{
|
||||
if(count($exp) > 1)
|
||||
{
|
||||
@$value->post_excerpt = explode(" ",strrev(substr(strip_tags($value->post_content), 0, 175)),2);
|
||||
@$value->post_excerpt = strrev($value->post_excerpt[1]).' '.'… <a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@$value->post_excerpt = $value->post_content;
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
}
|
||||
else @$value->post_excerpt = $value->post_excerpt.' '.'<a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'type' => $value->post_type,
|
||||
'slug' => $value->post_name,
|
||||
'url' => $value->guid,
|
||||
'status' => $value->post_status,
|
||||
'title' => $value->post_title,
|
||||
'title_plain' => $value->post_title,
|
||||
'date' => $value->post_date,
|
||||
'modified' => $value->post_modified,
|
||||
'excerpt' => $value->post_excerpt,
|
||||
'parent' => $value->post_parent,
|
||||
'category' => $cat,
|
||||
'tag' => $tag,
|
||||
'author' => $author,
|
||||
'comment_count' => $value->comment_count,
|
||||
'comment_status' => $value->comment_status
|
||||
);
|
||||
$posts[] = $obj[$key];
|
||||
}
|
||||
if($result->ID == $value->ID and ($comm == 1 and $con == 1))
|
||||
{
|
||||
$exp = explode("\n",$value->post_content);
|
||||
if(empty($value->post_excerpt))
|
||||
{
|
||||
if(count($exp) > 1)
|
||||
{
|
||||
@$value->post_excerpt = explode(" ",strrev(substr(strip_tags($value->post_content), 0, 175)),2);
|
||||
@$value->post_excerpt = strrev($value->post_excerpt[1]).' '.'… <a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@$value->post_excerpt = $value->post_content;
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
}
|
||||
else @$value->post_excerpt = $value->post_excerpt.' '.'<a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'type' => $value->post_type,
|
||||
'slug' => $value->post_name,
|
||||
'url' => $value->guid,
|
||||
'status' => $value->post_status,
|
||||
'title' => $value->post_title,
|
||||
'title_plain' => $value->post_title,
|
||||
'content' => $value->post_content,
|
||||
'date' => $value->post_date,
|
||||
'modified' => $value->post_modified,
|
||||
'excerpt' => $value->post_excerpt,
|
||||
'parent' => $value->post_parent,
|
||||
'category' => $cat,
|
||||
'tag' => $tag,
|
||||
'author' => $author,
|
||||
'comment_count' => $value->comment_count,
|
||||
'comment_status' => $value->comment_status,
|
||||
'comments' => $com
|
||||
);
|
||||
$posts[] = $obj[$key];
|
||||
}
|
||||
if($result->ID == $value->ID and (($comm == 1 and $con == null) or ($comm == 1 and $con == 0)))
|
||||
{
|
||||
$exp = explode("\n",$value->post_content);
|
||||
if(empty($value->post_excerpt))
|
||||
{
|
||||
if(count($exp) > 1)
|
||||
{
|
||||
@$value->post_excerpt = explode(" ",strrev(substr(strip_tags($value->post_content), 0, 175)),2);
|
||||
@$value->post_excerpt = strrev($value->post_excerpt[1]).' '.'… <a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@$value->post_excerpt = $value->post_content;
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
}
|
||||
else @$value->post_excerpt = $value->post_excerpt.' '.'<a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'type' => $value->post_type,
|
||||
'slug' => $value->post_name,
|
||||
'url' => $value->guid,
|
||||
'status' => $value->post_status,
|
||||
'title' => $value->post_title,
|
||||
'title_plain' => $value->post_title,
|
||||
'date' => $value->post_date,
|
||||
'modified' => $value->post_modified,
|
||||
'excerpt' => $value->post_excerpt,
|
||||
'parent' => $value->post_parent,
|
||||
'category' => $cat,
|
||||
'tag' => $tag,
|
||||
'author' => $author,
|
||||
'comment_count' => $value->comment_count,
|
||||
'comment_status' => $value->comment_status,
|
||||
'comments' => $com
|
||||
);
|
||||
$posts[] = $obj[$key];
|
||||
}
|
||||
if($result->ID == $value->ID and (($con == 1 and $comm == null) or ($con == 1 and $comm == 0)))
|
||||
{
|
||||
$exp = explode("\n",$value->post_content);
|
||||
if(empty($value->post_excerpt))
|
||||
{
|
||||
if(count($exp) > 1)
|
||||
{
|
||||
@$value->post_excerpt = explode(" ",strrev(substr(strip_tags($value->post_content), 0, 175)),2);
|
||||
@$value->post_excerpt = strrev($value->post_excerpt[1]).' '.'… <a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@$value->post_excerpt = $value->post_content;
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
}
|
||||
else @$value->post_excerpt = $value->post_excerpt.' '.'<a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'type' => $value->post_type,
|
||||
'slug' => $value->post_name,
|
||||
'url' => $value->guid,
|
||||
'status' => $value->post_status,
|
||||
'title' => $value->post_title,
|
||||
'title_plain' => $value->post_title,
|
||||
'content' => $value->post_content,
|
||||
'date' => $value->post_date,
|
||||
'modified' => $value->post_modified,
|
||||
'excerpt' => $value->post_excerpt,
|
||||
'parent' => $value->post_parent,
|
||||
'category' => $cat,
|
||||
'tag' => $tag,
|
||||
'author' => $author,
|
||||
'comment_count' => $value->comment_count,
|
||||
'comment_status' => $value->comment_status
|
||||
);
|
||||
$posts[] = $obj[$key];
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(!empty($type) and !(int) $type)
|
||||
{
|
||||
foreach($obj as $key => $value)
|
||||
{
|
||||
if($result->ID == $value->ID and $value->post_type == $type)
|
||||
{
|
||||
$cat = get_the_category($value->ID);
|
||||
$tag = get_the_tags($value->ID);
|
||||
$author = get_posts::return_author($value->post_author);
|
||||
$com = get_posts::return_comment($value->ID);
|
||||
if($com == null)
|
||||
{
|
||||
$com = array();
|
||||
}
|
||||
if($tag == false)
|
||||
{
|
||||
$tag = array();
|
||||
}
|
||||
if($result->ID == $value->ID and (($comm == null and $con == null) or ($comm == 0 and $con == 0)))
|
||||
{
|
||||
$exp = explode("\n",$value->post_content);
|
||||
if(empty($value->post_excerpt))
|
||||
{
|
||||
if(count($exp) > 1)
|
||||
{
|
||||
@$value->post_excerpt = explode(" ",strrev(substr(strip_tags($value->post_content), 0, 175)),2);
|
||||
@$value->post_excerpt = strrev($value->post_excerpt[1]).' '.'… <a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@$value->post_excerpt = $value->post_content;
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
}
|
||||
else @$value->post_excerpt = $value->post_excerpt.' '.'<a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'type' => $value->post_type,
|
||||
'slug' => $value->post_name,
|
||||
'url' => $value->guid,
|
||||
'status' => $value->post_status,
|
||||
'title' => $value->post_title,
|
||||
'title_plain' => $value->post_title,
|
||||
'date' => $value->post_date,
|
||||
'modified' => $value->post_modified,
|
||||
'excerpt' => $value->post_excerpt,
|
||||
'parent' => $value->post_parent,
|
||||
'category' => $cat,
|
||||
'tag' => $tag,
|
||||
'author' => $author,
|
||||
'comment_count' => $value->comment_count,
|
||||
'comment_status' => $value->comment_status
|
||||
);
|
||||
$posts[] = $obj[$key];
|
||||
}
|
||||
if($result->ID == $value->ID and ($comm == 1 and $con == 1))
|
||||
{
|
||||
$exp = explode("\n",$value->post_content);
|
||||
if(empty($value->post_excerpt))
|
||||
{
|
||||
if(count($exp) > 1)
|
||||
{
|
||||
@$value->post_excerpt = explode(" ",strrev(substr(strip_tags($value->post_content), 0, 175)),2);
|
||||
@$value->post_excerpt = strrev($value->post_excerpt[1]).' '.'… <a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@$value->post_excerpt = $value->post_content;
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
}
|
||||
else @$value->post_excerpt = $value->post_excerpt.' '.'<a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'type' => $value->post_type,
|
||||
'slug' => $value->post_name,
|
||||
'url' => $value->guid,
|
||||
'status' => $value->post_status,
|
||||
'title' => $value->post_title,
|
||||
'title_plain' => $value->post_title,
|
||||
'content' => $value->post_content,
|
||||
'date' => $value->post_date,
|
||||
'modified' => $value->post_modified,
|
||||
'excerpt' => $value->post_excerpt,
|
||||
'parent' => $value->post_parent,
|
||||
'category' => $cat,
|
||||
'tag' => $tag,
|
||||
'author' => $author,
|
||||
'comment_count' => $value->comment_count,
|
||||
'comment_status' => $value->comment_status,
|
||||
'comments' => $com
|
||||
);
|
||||
$posts[] = $obj[$key];
|
||||
}
|
||||
if($result->ID == $value->ID and (($comm == 1 and $con == null) or ($comm == 1 and $con == 0)))
|
||||
{
|
||||
$exp = explode("\n",$value->post_content);
|
||||
if(empty($value->post_excerpt))
|
||||
{
|
||||
if(count($exp) > 1)
|
||||
{
|
||||
@$value->post_excerpt = explode(" ",strrev(substr(strip_tags($value->post_content), 0, 175)),2);
|
||||
@$value->post_excerpt = strrev($value->post_excerpt[1]).' '.'… <a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@$value->post_excerpt = $value->post_content;
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
}
|
||||
else @$value->post_excerpt = $value->post_excerpt.' '.'<a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'type' => $value->post_type,
|
||||
'slug' => $value->post_name,
|
||||
'url' => $value->guid,
|
||||
'status' => $value->post_status,
|
||||
'title' => $value->post_title,
|
||||
'title_plain' => $value->post_title,
|
||||
'date' => $value->post_date,
|
||||
'modified' => $value->post_modified,
|
||||
'excerpt' => $value->post_excerpt,
|
||||
'parent' => $value->post_parent,
|
||||
'category' => $cat,
|
||||
'tag' => $tag,
|
||||
'author' => $author,
|
||||
'comment_count' => $value->comment_count,
|
||||
'comment_status' => $value->comment_status,
|
||||
'comments' => $com
|
||||
);
|
||||
$posts[] = $obj[$key];
|
||||
}
|
||||
if($result->ID == $value->ID and (($con == 1 and $comm == null) or ($con == 1 and $comm == 0)))
|
||||
{
|
||||
$exp = explode("\n",$value->post_content);
|
||||
if(empty($value->post_excerpt))
|
||||
{
|
||||
if(count($exp) > 1)
|
||||
{
|
||||
@$value->post_excerpt = explode(" ",strrev(substr(strip_tags($value->post_content), 0, 175)),2);
|
||||
@$value->post_excerpt = strrev($value->post_excerpt[1]).' '.'… <a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@$value->post_excerpt = $value->post_content;
|
||||
$order = array("\r\n", "\n", "\r");
|
||||
$replace = ' ';
|
||||
@$value->post_excerpt = str_replace($order, $replace, $value->post_excerpt);
|
||||
}
|
||||
}
|
||||
else @$value->post_excerpt = $value->post_excerpt.' '.'<a href="'.$value->guid.'"> Continue reading <span class="meta-nav">→</span></a>';
|
||||
$obj[$key] = array(
|
||||
'id' => $value->ID,
|
||||
'type' => $value->post_type,
|
||||
'slug' => $value->post_name,
|
||||
'url' => $value->guid,
|
||||
'status' => $value->post_status,
|
||||
'title' => $value->post_title,
|
||||
'title_plain' => $value->post_title,
|
||||
'content' => $value->post_content,
|
||||
'date' => $value->post_date,
|
||||
'modified' => $value->post_modified,
|
||||
'excerpt' => $value->post_excerpt,
|
||||
'parent' => $value->post_parent,
|
||||
'category' => $cat,
|
||||
'tag' => $tag,
|
||||
'author' => $author,
|
||||
'comment_count' => $value->comment_count,
|
||||
'comment_status' => $value->comment_status
|
||||
);
|
||||
$posts[] = $obj[$key];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(empty($posts))
|
||||
{
|
||||
$posts = array();
|
||||
}
|
||||
@rsort($posts);
|
||||
$count_tot = count($posts);
|
||||
if (!$obj)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'query can not connect to database';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(!(int) $co and !empty($co))
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'the value of count should be an integer number';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(!empty($pa) and !(int) $pa)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'the value of page should be an integer number';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if($co > $count_tot and $count_tot != 0)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'count should be lower than count_total';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if($count_tot == 0 and !empty($co) and (int) $co)
|
||||
{
|
||||
$check_err = false;
|
||||
$err_msg = 'no result found';
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if($co != null)
|
||||
{
|
||||
$page = search_api::_numpage($count_tot, $co);
|
||||
}
|
||||
if ($co == null)
|
||||
{
|
||||
$page = search_api::_numpage($count_tot, $count_tot);
|
||||
$co = $count_tot;
|
||||
}
|
||||
if($pa == null)
|
||||
{
|
||||
$curr_page = 1;
|
||||
}
|
||||
if($pa != null)
|
||||
{
|
||||
$curr_page = $pa;
|
||||
}
|
||||
if($check_err)
|
||||
{
|
||||
if(empty($pa) or $pa == 1 or $page == 1)
|
||||
{
|
||||
for($i=0;$i<$co;$i++)
|
||||
{
|
||||
$post[] = $posts[$i];
|
||||
}
|
||||
@rsort($post);
|
||||
if(empty($post))
|
||||
{
|
||||
$post = array();
|
||||
}
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'count' => $co,
|
||||
'count_total' => $count_tot,
|
||||
'pages' => $page,
|
||||
'currPage' => 1,
|
||||
'posts' => $post
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
if(!empty($pa) and $pa != 1 and $page != 1)
|
||||
{
|
||||
if($pa >= $page and $page != 1)
|
||||
{
|
||||
$pa = $page;
|
||||
$count = 0;
|
||||
$begin = $co*($pa-1);
|
||||
$end = $begin + ($co - 1);
|
||||
for($i=$begin;$i<=$end;$i++)
|
||||
{
|
||||
if($posts[$i] == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$count++;
|
||||
$co = $count;
|
||||
}
|
||||
}
|
||||
}
|
||||
$begin = $co*($pa-1);
|
||||
$end = $begin + ($co - 1);
|
||||
for($i=$begin;$i<=$end;$i++)
|
||||
{
|
||||
if($posts[$i] == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$post[] = $posts[$i];
|
||||
}
|
||||
}
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'count' => $co,
|
||||
'count_total' => $count_tot,
|
||||
'pages' => $page,
|
||||
'currPage' => $pa,
|
||||
'posts' => $post
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static function search_info($dev)
|
||||
{
|
||||
$err_msg = "Include 'keyword' var in your request";
|
||||
$status = 'error';
|
||||
$info = array(
|
||||
'status' => $status,
|
||||
'msg' => $err_msg,
|
||||
);
|
||||
$json = new Services_JSON();
|
||||
$encode = $json->encode($info);
|
||||
if($dev == 1)
|
||||
{
|
||||
$dev = new Dev();
|
||||
$output = $dev-> json_format($encode);
|
||||
print($output);
|
||||
}
|
||||
if ($dev != 1)
|
||||
{
|
||||
print ($encode);
|
||||
}
|
||||
}
|
||||
static function _numpage($co_tot,$co)
|
||||
{
|
||||
if($co > $co_tot)
|
||||
{
|
||||
$co_tot = $co;
|
||||
$page = $co_tot / $co;
|
||||
return $page;
|
||||
}
|
||||
else
|
||||
{
|
||||
@$page = $co_tot / $co;
|
||||
if ($page > 0 and $page < 1)
|
||||
{
|
||||
$page = 2;
|
||||
return $page;
|
||||
}
|
||||
else if ($page > 1 and $page < 2)
|
||||
{
|
||||
$page = 2;
|
||||
return $page;
|
||||
}
|
||||
return ceil($page);
|
||||
}
|
||||
}
|
||||
static function insertRules($rules){
|
||||
$newrules = array();
|
||||
$newrules['redirect/url/(.+)$']='index.php?wpapi=search&dev&keyword&count&page&content&comment&type';
|
||||
return $newrules+$rules;
|
||||
}
|
||||
static function insertQueryVars($vars){
|
||||
array_push($vars, 'wpapi','keyword','dev','count','page','content','comment','type');
|
||||
return $vars;
|
||||
}
|
||||
static function insertParseQuery($query)
|
||||
{
|
||||
if(!empty($query->query_vars['wpapi']) and $query->query_vars['wpapi'] == 'search')
|
||||
{
|
||||
$dev = $_GET['dev'];
|
||||
$key = $_GET['keyword'];
|
||||
$count = $_GET['count'];
|
||||
$page = $_GET['page'];
|
||||
$con = $_GET['content'];
|
||||
$comm = $_GET['comment'];
|
||||
$type = $_GET['type'];
|
||||
if(!empty($query->query_vars['keyword']) and $query->query_vars['keyword'] == $key)
|
||||
{
|
||||
search_api::get_result_search($dev,$key,$count,$page,$con,$comm,$type);
|
||||
header('Content-type: text/plain');
|
||||
exit();
|
||||
}
|
||||
search_api::search_info($dev);
|
||||
header('Content-type: text/plain');
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
Plugin Name: wp-api
|
||||
Plugin URI: http://wordpress.org/extend/plugins/wp-api/
|
||||
Description: Wordpress api in JSON format
|
||||
Author: Peyman Aslani
|
||||
Version: 1.0.3
|
||||
Author URI: http://www.myappsnippet.com/
|
||||
*/
|
||||
//includes
|
||||
@include_once('admin/admin.php');
|
||||
@include_once ('includes/get_author.php');
|
||||
@include_once ('includes/get_tags.php');
|
||||
@include_once ('includes/get_posts.php');
|
||||
@include_once ('includes/search_api.php');
|
||||
@include_once ('includes/comment_api.php');
|
||||
@include_once ('includes/get_gravatar.php');
|
||||
//hooks
|
||||
add_action('admin_menu', 'admin_page_class::add_menu_item');
|
||||
new get_author();
|
||||
new get_tags();
|
||||
new get_posts();
|
||||
new search_api();
|
||||
new comment_api();
|
||||
new get_gravatar();
|
||||
?>
|
||||
@@ -1,74 +0,0 @@
|
||||
=== WP API ===
|
||||
Contributors: myflashlab
|
||||
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=payments%40premierweb%2enet%2eau&lc=US&item_name=wp%2dapi&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest
|
||||
Tags: mobile, air, app, json, cms, api
|
||||
Requires at least: 2.8
|
||||
Tested up to: 3.2.1
|
||||
Stable tag: 1.0.3
|
||||
License: GPLv2 or later
|
||||
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Wordpress api in JSON format
|
||||
|
||||
== Description ==
|
||||
|
||||
wp-api translates your whole wordpress blog into a JSON formatted api. you can use many different methods to retrieve
|
||||
information about posts, pages, authors, tags and categories. You may also use the api methods to submit new comments.
|
||||
|
||||
We had to write this plugin from ground up because we were working on an adobe air mobile project that required us to
|
||||
show posts from a wordpress site! we're still upgrading the app and we need to upgrade this api even more also. so we
|
||||
decided to put it up on wordpress directory for everyone to use and have fun :)
|
||||
|
||||
to get detailed description on how to use the api, go to wp-api page from the 'settings' menu to see the methods and examples.
|
||||
|
||||
== Installation ==
|
||||
|
||||
1. Upload the `wp-api` folder to `/wp-content/plugins/` directory
|
||||
2. Activate the plugin through the 'Plugins' menu in WordPress
|
||||
3. Go to `wp-api` page in the `Settings` menu
|
||||
|
||||
== Frequently Asked Questions ==
|
||||
|
||||
= Are you going to upgrade this plugin to do more stuff? =
|
||||
|
||||
Yes, there are many features that we're hoping to add to the api. it's just a matter of time. please feel free to follow us on
|
||||
<a href='https://www.facebook.com/myflashlab'>facebook</a> for the latest news and updates to the plugin.
|
||||
|
||||
== Screenshots ==
|
||||
|
||||
1. Sample JSON output by wp-api
|
||||
|
||||
== Changelog ==
|
||||
|
||||
= 1.0.3 =
|
||||
|
||||
* fixed comment parents. you can chooes which parent to post your comment to.
|
||||
|
||||
= 1.0.2 =
|
||||
* set type argument for get_posts and search method
|
||||
* create Continue reading for post_excerpt
|
||||
* change nicename to nickname in all methods
|
||||
|
||||
= 1.0.1 =
|
||||
* removed the jQuery for better performance in the control panel
|
||||
|
||||
= 1.0 =
|
||||
* uploaded to wordpress directory
|
||||
|
||||
|
||||
== Upgrade Notice ==
|
||||
|
||||
= 1.0.3 =
|
||||
|
||||
* fixed comment parents. you can chooes which parent to post your comment to.
|
||||
|
||||
= 1.0.2 =
|
||||
* set type argument for get_posts and search method
|
||||
* create Continue reading for post_excerpt
|
||||
* change nicename to nickname in all methods
|
||||
|
||||
= 1.0.1 =
|
||||
* removed the jQuery for better performance in the control panel
|
||||
|
||||
= 1.0 =
|
||||
Fresh installation
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB |
@@ -137,6 +137,40 @@ function load_initial_values() {
|
||||
do_search();
|
||||
}
|
||||
}
|
||||
function save_user_meta(key, value) {
|
||||
console.log(key, value);
|
||||
var url = $('meta[name=x-siteurl]').attr('content') + '/wp-admin/admin-ajax.php';
|
||||
var params = {
|
||||
action: 'neuf_save_user_meta',
|
||||
meta_key: key,
|
||||
meta_value: value,
|
||||
unique: true,
|
||||
user_id: $('meta[name=x-user-id]').attr('content'),
|
||||
_wpnonce: $('meta[name=x-user-meta-nonce]').attr('content')
|
||||
};
|
||||
$.post(url, params, function() {
|
||||
localStorage.setItem(key, value);
|
||||
});
|
||||
}
|
||||
function get_user_meta(key, callback) {
|
||||
// TODO you are here
|
||||
try {
|
||||
var value = localStorage.getItem(key);
|
||||
callback({result:value});
|
||||
return;
|
||||
} catch(err) {
|
||||
console.log('no '+ key);
|
||||
}
|
||||
var url = $('meta[name=x-siteurl]').attr('content') + '/wp-admin/admin-ajax.php';
|
||||
var params = {
|
||||
action: 'neuf_get_user_meta',
|
||||
meta_key: key,
|
||||
single: true,
|
||||
user_id: $('meta[name=x-user-id]').attr('content'),
|
||||
_wpnonce: $('meta[name=x-user-meta-nonce]').attr('content')
|
||||
};
|
||||
$.get(url, params, callback);
|
||||
}
|
||||
|
||||
jQuery(document).ready(function() {
|
||||
moment.lang('nb');
|
||||
@@ -158,14 +192,18 @@ jQuery(document).ready(function() {
|
||||
var menu = $('#menu .user-menu');
|
||||
menu.toggleClass('visible');
|
||||
});
|
||||
|
||||
/* User intro dismiss and save */
|
||||
$('[data-toggle-introduction]').on('click', function() {
|
||||
$(this).parent().fadeOut(600);
|
||||
$.cookie('introduction-dismissed', '1');
|
||||
//$(this).parent().fadeOut(600);
|
||||
save_user_meta('introduction_dismissed', true);
|
||||
});
|
||||
if( $.cookie('introduction-dismissed') !== '1' ) {
|
||||
$('.introduction').show();
|
||||
$('.introduction').addClass('fadein');
|
||||
if( $('.introduction').length ) {
|
||||
get_user_meta('introduction_dismissed', function(data) {
|
||||
if(data.hasOwnProperty('result') && data.result !== 'true') {
|
||||
$('.introduction').show();
|
||||
$('.introduction').addClass('fadein');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* Program */
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
"use strict";function getParameterByName(e){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)"),a=t.exec(location.search);return null===a?"":decodeURIComponent(a[1].replace(/\+/g," "))}function format_posts(e){var t="",a=0;if(0===e.length)return"Idag er det stille på huset :-/";for(a=0;a<e.length;a++){var r=e[a];t+='<li class="fadein">',t+='<span class="entry-starttime">'+moment.unix(r.custom_fields._neuf_events_starttime).utc().format("HH.mm")+"</span>: ",t+='<a href="'+r.url+'">'+r.title+"</a>",t+=' <span class="entry-venue">'+r.custom_fields._neuf_events_venue+"</span>",t+="</li>"}return t}function format_results(e){var t="<table><thead><tr><th>Navn</th><th>Brukernavn</th><th>Epost</th><th>Telefon</th><th>Har medlemskap</th><th>Grupper</th></tr></thead>";if(e.error)return console.log(e.error),$(".search-result-list").html(""),void $(".search-results .meta").html("");if(0===e.meta.num_results)return $(".search-result-list").html("Uffda, ingen treff."),void $(".search-results .meta").html("");var a='<tbody><% _.each(results, function(u) { %><tr><td><a href="'+inside_url+'/?page=display-user&userid=<%= u.id %>"><%= u.firstname %> <%= u.lastname %></a></td><td><%= u.username %></td><td><a href="mailto:<%= u.email %>"><%= u.email %></a></td><td><a href="tlf:<%= u.number %>"><%= u.number %></a></td><td><% if(u.is_member != 0) { %>Ja<% } else { %>Nei<% } %></td><td class="groups"><% _.each(u.groups, function(g, i) { %><%= g.name %><% if(u.groups.length !== i +1){ %>, <% } %><% }); %></td></tr> <% }); %></tbody></table>',r=t+_.template(a,e);$(".search-result-list").html(r);var s="Antall treff: <%= meta.num_results %>";$(".search-results .meta").html(_.template(s,e))}function do_search(){var e=$('.filters [data-search-filter="has_valid_membership"]'),t="",a=$(".groups-select").val();null!==a&&(t=a.join());var r={q:$(".search-field").val(),filter_groups:t};e.hasClass("active")&&(r.has_valid_membership=!0);var s=$.param(r);window.History.pushState(null,null,"?"+s),r._wpnonce=$("meta[name=x-inside-api-nonce]").attr("content"),$.getJSON(user_search_endpoint,r,format_results)}function load_initial_values(){var e=!1,t=getParameterByName("q");t&&t.length>0&&($(".search-field").val(t),e=!0);var a=getParameterByName("has_valid_membership");a&&"true"===a&&($('.filters [data-search-filter="has_valid_membership"]').addClass("active"),e=!0);var r=getParameterByName("filter_groups"),s=[];if(r&&r.length>0){s=-1!==r.indexOf(",")?r.split(","):[r];var n=!1,i=0;for(i=0;i<s.length;i++){var l=s[i];$.isNumeric(l)||(n=!0)}n||(e=!0,$(".groups-select").val(s),$(".groups-select").trigger("chosen:updated"))}e&&do_search()}var program_endpoint="https://studentersamfundet.no/api/events/get_today/",inside_url="https://inside.studentersamfundet.no",inside_groups_url=inside_url+"/api/groups.php",user_search_endpoint="/inside-api/",email_search_endpoint="/email-api/",query_params={};jQuery(document).ready(function(){moment.lang("nb");var e=jQuery;e("#menu .menu-toggle").on("click",function(t){t.preventDefault();var a=e("#menu .main-menu, #menu .user-menu-wrap");a.toggleClass("visible")}),e("#menu a.profile-badge").on("click",function(t){t.preventDefault();var a=e("#menu .user-menu");a.toggleClass("visible")}),e("[data-toggle-introduction]").on("click",function(){e(this).parent().fadeOut(600),e.cookie("introduction-dismissed","1")}),"1"!==e.cookie("introduction-dismissed")&&(e(".introduction").show(),e(".introduction").addClass("fadein"));var t=".program-list";if(e(t).length&&e.getJSON(program_endpoint+"?callback=?",query_params,function(a){if(a&&a.events){var r=format_posts(a.events);e(t).html(r)}}),e(".search-form").length&&(e.getJSON(inside_groups_url,function(t){var a='<select multiple class="groups-select" data-placeholder="Velg en gruppe..."><option value=""></option><% _.each(results, function(g) { %><option value="<%=g.group_id %>"><%= g.group_name %></option><% }); %></select>',r=_.template(a,t);e(".groups-select-wrap").html(r),e(".groups-select").chosen({no_results_text:"Uffda, ingen treff!",allow_single_deselect:!0}).change(function(){do_search()}),load_initial_values()}),e(".search-field").on("keyup keypress",function(e){(10===e.keyCode||13===e.keyCode)&&e.preventDefault()}),e(".search-field").on("keyup keypress",_.debounce(function(){do_search()},300)),e(".roles a").on("click",function(t){t.preventDefault(),e(this).toggleClass("active"),do_search()})),e(".profile").length){var a={q:e("meta[name=x-username]").attr("content"),exact:!0,_wpnonce:e("meta[name=x-inside-api-nonce]").attr("content")};e.getJSON(user_search_endpoint,a,function(t){if(t.hasOwnProperty("results")&&1===t.results.length){var a=t.results[0];console.log(a);for(var r="",s=0;s<a.groups.length;s++)r+="<li>"+a.groups[s].name+"</li>";e(".group-list").html(r);var n=e(".is-member");n.html("1"===a.is_member?"Gyldig medlemskap.":'Du har ikke et gyldig medlemskap. Du kan forny medlemskapet ditt via SMS, via <a href="http://snapporder.com"Line truncated
|
||||
"use strict";function getParameterByName(e){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)"),a=t.exec(location.search);return null===a?"":decodeURIComponent(a[1].replace(/\+/g," "))}function format_posts(e){var t="",a=0;if(0===e.length)return"Idag er det stille på huset :-/";for(a=0;a<e.length;a++){var r=e[a];t+='<li class="fadein">',t+='<span class="entry-starttime">'+moment.unix(r.custom_fields._neuf_events_starttime).utc().format("HH.mm")+"</span>: ",t+='<a href="'+r.url+'">'+r.title+"</a>",t+=' <span class="entry-venue">'+r.custom_fields._neuf_events_venue+"</span>",t+="</li>"}return t}function format_results(e){var t="<table><thead><tr><th>Navn</th><th>Brukernavn</th><th>Epost</th><th>Telefon</th><th>Har medlemskap</th><th>Grupper</th></tr></thead>";if(e.error)return console.log(e.error),$(".search-result-list").html(""),void $(".search-results .meta").html("");if(0===e.meta.num_results)return $(".search-result-list").html("Uffda, ingen treff."),void $(".search-results .meta").html("");var a='<tbody><% _.each(results, function(u) { %><tr><td><a href="'+inside_url+'/?page=display-user&userid=<%= u.id %>"><%= u.firstname %> <%= u.lastname %></a></td><td><%= u.username %></td><td><a href="mailto:<%= u.email %>"><%= u.email %></a></td><td><a href="tlf:<%= u.number %>"><%= u.number %></a></td><td><% if(u.is_member != 0) { %>Ja<% } else { %>Nei<% } %></td><td class="groups"><% _.each(u.groups, function(g, i) { %><%= g.name %><% if(u.groups.length !== i +1){ %>, <% } %><% }); %></td></tr> <% }); %></tbody></table>',r=t+_.template(a,e);$(".search-result-list").html(r);var n="Antall treff: <%= meta.num_results %>";$(".search-results .meta").html(_.template(n,e))}function do_search(){var e=$('.filters [data-search-filter="has_valid_membership"]'),t="",a=$(".groups-select").val();null!==a&&(t=a.join());var r={q:$(".search-field").val(),filter_groups:t};e.hasClass("active")&&(r.has_valid_membership=!0);var n=$.param(r);window.History.pushState(null,null,"?"+n),r._wpnonce=$("meta[name=x-inside-api-nonce]").attr("content"),$.getJSON(user_search_endpoint,r,format_results)}function load_initial_values(){var e=!1,t=getParameterByName("q");t&&t.length>0&&($(".search-field").val(t),e=!0);var a=getParameterByName("has_valid_membership");a&&"true"===a&&($('.filters [data-search-filter="has_valid_membership"]').addClass("active"),e=!0);var r=getParameterByName("filter_groups"),n=[];if(r&&r.length>0){n=-1!==r.indexOf(",")?r.split(","):[r];var s=!1,i=0;for(i=0;i<n.length;i++){var l=n[i];$.isNumeric(l)||(s=!0)}s||(e=!0,$(".groups-select").val(n),$(".groups-select").trigger("chosen:updated"))}e&&do_search()}function save_user_meta(e,t){console.log(e,t);var a=$("meta[name=x-siteurl]").attr("content")+"/wp-admin/admin-ajax.php",r={action:"neuf_save_user_meta",meta_key:e,meta_value:t,unique:!0,user_id:$("meta[name=x-user-id]").attr("content"),_wpnonce:$("meta[name=x-user-meta-nonce]").attr("content")};$.post(a,r,function(){localStorage.setItem(e,t)})}function get_user_meta(e,t){try{var a=localStorage.getItem(e);return void t({result:a})}catch(r){console.log("no "+e)}var n=$("meta[name=x-siteurl]").attr("content")+"/wp-admin/admin-ajax.php",s={action:"neuf_get_user_meta",meta_key:e,single:!0,user_id:$("meta[name=x-user-id]").attr("content"),_wpnonce:$("meta[name=x-user-meta-nonce]").attr("content")};$.get(n,s,t)}var program_endpoint="https://studentersamfundet.no/api/events/get_today/",inside_url="https://inside.studentersamfundet.no",inside_groups_url=inside_url+"/api/groups.php",user_search_endpoint="/inside-api/",email_search_endpoint="/email-api/",query_params={};jQuery(document).ready(function(){moment.lang("nb");var e=jQuery;e("#menu .menu-toggle").on("click",function(t){t.preventDefault();var a=e("#menu .main-menu, #menu .user-menu-wrap");a.toggleClass("visible")}),e("#menu a.profile-badge").on("click",function(t){t.preventDefault();var a=e("#menu .user-menu");a.toggleClass("visible")}),e("[data-toggle-introduction]").on("click",function(){save_user_meta("introduction_dismissed",!0)}),e(".introduction").length&&get_user_meta("introduction_dismissed",function(t){t.hasOwnProperty("result")&&"true"!==t.result&&(e(".introduction").show(),e(".introduction").addClass("fadein"))});var t=".program-list";if(e(t).length&&e.getJSON(program_endpoint+"?callback=?",query_params,function(a){if(a&&a.events){var r=format_posts(a.events);e(t).html(r)}}),e(".search-form").length&&(e.getJSON(inside_groups_url,function(t){var a='<select multiple class="groups-select" data-placeholder="Velg en gruppe..."><option value=""></option><% _.each(results, function(g) { %><option value="<%=g.group_id %>"><%= g.group_name %></option><% }); %></select>',r=_.template(a,t);e(".groups-select-wrap").html(r),e(".groups-select").chosen({no_results_text:"Uffda, ingen treff!",allow_single_deselect:!0}).change(function(){do_search()}),load_initial_values()}),e(".search-field").on("keyup keypress",function(e){(10===e.keyCodeLine truncated
|
||||
@@ -402,4 +402,59 @@ function neuf_excerpt_more( $more ) {
|
||||
}
|
||||
add_filter( 'excerpt_more', 'neuf_excerpt_more' );
|
||||
|
||||
/* Save user meta options */
|
||||
function neuf_save_user_meta() {
|
||||
global $wpdb;
|
||||
|
||||
$user_id = (int) $_POST['user_id']; // TODO: sanitize
|
||||
$meta_key = $_POST['meta_key']; // TODO: sanitize
|
||||
$meta_value = $_POST['meta_value']; // TODO: sanitize
|
||||
$unique = (bool) $_POST['unique'];
|
||||
|
||||
if( !get_userdata($user_id) ) {
|
||||
die(json_encode(array('error' => 'Invalid user_id'.$_POST['user_id'])));
|
||||
}
|
||||
if( !is_user_logged_in() ) {
|
||||
die(json_encode(array('error' => 'Log in first')));
|
||||
}
|
||||
|
||||
if( !wp_verify_nonce( $_POST['_wpnonce'], 'user-meta' ) ) {
|
||||
die(json_encode(array('error' => 'Invalid nonce')));
|
||||
}
|
||||
|
||||
$meta_id = add_user_meta($user_id, $meta_key, $meta_value, $unique);
|
||||
|
||||
if( !$meta_id ) {
|
||||
die(json_encode(array('result' => 'User meta NOT updated!')));
|
||||
}
|
||||
else{
|
||||
die(json_encode(array('result' => 'User meta updated.')));
|
||||
}
|
||||
}
|
||||
/* Save user meta options */
|
||||
function neuf_get_user_meta() {
|
||||
global $wpdb;
|
||||
|
||||
$user_id = (int) $_POST['user_id']; // TODO: sanitize
|
||||
$meta_key = $_POST['meta_key']; // TODO: sanitize
|
||||
$single = (bool) $_POST['single']; // TODO: sanitize
|
||||
|
||||
if( !get_userdata($user_id) ) {
|
||||
die(json_encode(array('error' => 'Invalid user_id'.$_POST['user_id'])));
|
||||
}
|
||||
if( !is_user_logged_in() ) {
|
||||
die(json_encode(array('error' => 'Log in first')));
|
||||
}
|
||||
|
||||
if( !wp_verify_nonce( $_POST['_wpnonce'], 'user-meta' ) ) {
|
||||
die(json_encode(array('error' => 'Invalid nonce')));
|
||||
}
|
||||
|
||||
$meta_value = get_user_meta($user_id, $meta_key, $single);
|
||||
die(json_encode(array('result' => $meta_value)));
|
||||
|
||||
}
|
||||
|
||||
add_action( 'wp_ajax_neuf_save_user_meta', 'neuf_save_user_meta' );
|
||||
add_action( 'wp_ajax_neuf_get_user_meta', 'neuf_get_user_meta' );
|
||||
?>
|
||||
@@ -6,7 +6,11 @@
|
||||
<meta name="robots" content="index,follow" />
|
||||
<meta name="x-stylesheet-directory" content="<?php bloginfo( 'stylesheet_directory' ); ?>" />
|
||||
<meta name="x-inside-api-nonce" content="<?php echo wp_create_nonce( 'inside-api' ); ?>" />
|
||||
<meta name="x-user-meta-nonce" content="<?php echo wp_create_nonce( 'user-meta' ); ?>" />
|
||||
<meta name="x-username" content="<?php $user = wp_get_current_user(); echo $user->user_login; ?>" />
|
||||
<meta name="x-user-id" content="<?php echo $user->ID; ?>" />
|
||||
|
||||
<meta name="x-siteurl" content="<?php echo get_option('siteurl'); ?>" />
|
||||
<?php neuf_doctitle(); ?>
|
||||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
<link rel="alternate" type="application/rss+xml" href="<?php bloginfo('url'); ?>/feed/" title="Aktiv-nyheter" />
|
||||
|
||||
Reference in new issue
Block a user