Files
ogre-issuu/includes/class-api.php
2024-09-12 17:30:26 -05:00

124 lines
3.6 KiB
PHP

<?php
/**
* @package CleverOgre
* @subpackage OgreIssuu
* @version 0.1.0
* @since 0.1.0
*/
namespace OgreIssuu;
if (!defined('ABSPATH')) exit;
use stdClass;
use Exception;
use lasselehtinen\Issuu\Issuu;
use lasselehtinen\Issuu\Publications;
use OgreIssuu\Api\Publications as ApiPublications;
use OgreIssuu\Api\User;
class Api {
use Singleton;
private Issuu $client;
public function __construct() {
if (!Settings::exists('token')) return;
$this->client = new Issuu(Settings::get('token'));
}
public function get_user():?stdClass {
if (!isset($this->client)) return null;
$user = new User($this->client);
try {
return $user->getUserProfile();
} catch (Exception $e) {
error_log($e->getMessage());
return null;
}
}
public function get_publications(array $args = []):?stdClass {
if (!isset($this->client)) return null;
$args = wp_parse_args($args, [
'size' => 10,
'page' => 1,
'state' => 'ALL',
'q' => '',
]);
$publications = new Publications($this->client);
try {
return $publications->list($args['size'], $args['page'], $args['state'], $args['q']);
} catch (Exception $e) {
error_log($e->getMessage());
return null;
}
}
public function get_publication(string $slug):?stdClass {
if (!isset($this->client)) return null;
$publications = new Publications($this->client);
try {
return $publications->getPublicationBySlug($slug);
} catch (Exception $e) {
error_log($e->getMessage());
return null;
}
}
public function get_publication_assets(string $slug, array $args = []):?stdClass {
if (!isset($this->client)) return null;
$publications = new ApiPublications($this->client);
try {
return $publications->getPublicationAssetsBySlug($slug, $args);
} catch (Exception $e) {
error_log($e->getMessage());
return null;
}
}
public function get_publication_embed(string $slug, array $args = []):?stdClass {
if (!isset($this->client)) return null;
$publications = new ApiPublications($this->client);
try {
return $publications->getPublicationEmbedBySlug($slug, $args);
} catch (Exception $e) {
error_log($e->getMessage());
return null;
}
}
public function get_publication_by_public_location(string $url, array $args = []):?stdClass {
if (!isset($this->client) || empty($url)) return null;
if (strpos($url, 'https://') !== 0) {
$user = $this->get_user();
if (is_null($user) || !property_exists($user, 'username') || empty($user->username)) return null;
$url = "https://issuu.com/$user->username/docs/$url";
}
// Remove query params
$url = explode('?', $url)[0];
$page = 1;
while (true) {
$publications = $this->get_publications(array_merge($args, [
'page' => $page++,
]));
if (is_null($publications) || !$publications->count || empty($publications->results)) break;
foreach ($publications->results as $publication) {
if (!property_exists($publication, 'publicLocation') || empty($publication->publicLocation)) continue;
if ($publication->publicLocation == $url) return $publication;
}
}
return null;
}
}