Skip to content

Instantly share code, notes, and snippets.

@gemmadlou
Last active April 4, 2017 10:47
Show Gist options
  • Select an option

  • Save gemmadlou/60e30234d154396fc38a00c0e9ac0daf to your computer and use it in GitHub Desktop.

Select an option

Save gemmadlou/60e30234d154396fc38a00c0e9ac0daf to your computer and use it in GitHub Desktop.
Using Guzzle With Events Plugin
<?php namespace Helper;
// This calculates the offset indexes for the Plugin
class CollectionOffset
{
private $postsPerPage;
private $page;
public function __construct($postsPerPage = 10, $page = 1)
{
if (!is_numeric($postsPerPage) || !is_numeric($page)) {
throw new \Exception("parameters should be numeric");
}
$this->postsPerPage = $postsPerPage;
$this->page = $page;
return $this;
}
public function start()
{
return $this->postsPerPage * ($this->page - 1);
}
public function end()
{
return ($this->postsPerPage * ($this->page - 1)) + $this->postsPerPage;
}
}
<?php
namespace Example\Query;
use \GuzzleHttp\Client;
use \GuzzleHttp\Psr7;
use \GuzzleHttp\Exception\RequestException;
use \Helper\CollectionOffset;
class EventQueries
{
use \Helper\QueryHelper;
/**
* $dateOptions should be 'Past or Future'
*/
public static function getFiltered($numberOfPosts = 1, $page = 1, $dateOptions = [], $tags = [])
{
$url = '/wp-json/events/v1/getEventsFiltered';
if (!empty($dateOptions)) {
$url = self::addParameter('date', self::getDateParamValue($dateOptions), $url);
}
if (!empty($tags)) {
$url = self::addParameter('tags', self::getEventTagsParaValue($taxonomyQueries), $url);
}
$url = self::addParameter('startIndex', (new CollectionOffset($numberOfPosts, $page))->start(), $url);
$url = self::addParameter('endIndex', (new CollectionOffset($numberOfPosts, $page))->end(), $url);
$events = self::requestAPI('GET', $url, []);
return collect($events)->map(function($event) {
return self::eventDTO($event);
})->take($numberOfPosts)->toArray();
}
public static function getSingleEvent($id)
{
$url = '/wp-json/events/v1/getEvent/' . $id;
return self::requestAPI('GET', $url, null);
}
private static function requestAPI($httpRequest, $url, $altReturnVar = [])
{
$client = new Client([
'base_uri' => home_url()
]);
$res = $client->request(
'GET',
$url,
['http_errors' => false]
);
return $res->getStatusCode() === 200 ? json_decode($res->getBody()->getContents()) : $altReturnVar;
}
private static function getDateParamValue($dateOptions = [])
{
if (in_array('future', $dateOptions) && in_array('past', $dateOptions)) {
return date('Y-m-d', strtotime('2000-1-1')) . '&after=true';
} else if (in_array('future', $dateOptions)) {
return date('Y-m-d') . '&after=true';
} else if (in_array('past', $dateOptions)) {
return date('Y-m-d') . '&after=false';
}
}
private static function getEventTagsParaValue(array $tags)
{
$taxonomyQueriesAsString = join($tags, ',');
return !empty($taxonomyQueriesAsString) ? $taxonomyQueriesAsString : '';
}
}
<?php
namespace Helper;
/**
* URL Parameter Query Helpers
*/
trait QueryHelper
{
/**
* Adds a parameter key value pair to current url
* @param string $key
* @param string $value
* @return string New query string
*/
public function addURLParameter($key, $value)
{
return add_query_arg($key, $value);
}
public static function addParameter($key, $value, $url = null)
{
return add_query_arg($key, $value, $url);
}
/**
* Removes a parameter from current url
* @param string $key
* @return string New Query String
*/
public function removeURLParameter($key)
{
return remove_query_arg($key);
}
/**
* gets parameter key valye if one exists
* @param string $key
* @return string or null
*/
public function getURLParameter($key)
{
return isset($_GET[$key]) ? $_GET[$key] : null;
}
/**
* Gets current page number
* @return integer page number
*/
public function getCurrentPageNumber()
{
$paged = 1;
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} elseif ( get_query_var('page') ) {
$paged = get_query_var('page');
}
return $paged;
}
/**
* Gets the next page number
* @return integer page number
*/
public function getNextPageNumber()
{
return $this->getCurrentPageNumber() + 1;
}
/**
* Gets the previous page number
* @return integer page number
*/
public function getPreviousPageNumber()
{
return $this->getCurrentPageNumber() - 1;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment