Jake Vanderwerf
5 days ago 266aa37c48222993bf7bdad6834e31bd08736f5e
inc/utility/Image.php
@@ -1,7 +1,7 @@
<?php
namespace JVBase\utility;
use JVBase\managers\CacheManager;
use JVBase\managers\Cache;
if (!defined('ABSPATH')) {
   exit;
@@ -12,20 +12,26 @@
 */
class Image
{
   protected ?CacheManager $cache = null;
   protected ?Cache $cache = null;
   protected ?Cache $imgData = null;
   public function __construct()
   {
      $this->cache = CacheManager::for('images')->connectTo('post', 'attachment');
      $this->cache = Cache::for('images')->connect('post');
      $this->imgData = Cache::for('imageData')->connect('post');
      if (JVB_TESTING) {
         $this->cache->flush();
         $this->imgData->flush();
      }
   }
   public function formatImage(int $ID, string $start = 'tiny', string $replace = 'large', bool $addLink = true, ?string $postSlug = null):string
   {
      $return = $this->cache->remember(
         ['ID' => $ID, 'start' => $start, 'replace' => $replace],
         $this->cache->generateKey(['ID' => $ID, 'start' => $start, 'replace' => $replace]),
         function() use ($ID, $start, $replace) {
            // Define size order for progressive enhancement
            $sizeOrder = ['tiny', 'medium', 'large', 'full'];
            $sizeOrder = ['tiny', 'directory-preview', 'thumbnail', 'medium', 'large', 'full'];
            $startIndex = array_search($start, $sizeOrder);
            $replaceIndex = array_search($replace, $sizeOrder);
@@ -67,8 +73,17 @@
      if ($addLink) {
         if (!$postSlug) {
            global $post;
            $postSlug = $post->post_name;
            if (is_singular()) {
               global $post;
               $postSlug = $post->post_name;
            }else if (is_tax()) {
               $tax = get_queried_object();
               $postSlug = jvbNoBase($tax->taxonomy);
            }elseif (is_post_type_archive()) {
               $obj = get_queried_object();
               $postSlug = jvbNoBase($obj->post_type);
            }
         }
         $full = wp_get_attachment_image_src($ID, 'full');
@@ -81,7 +96,7 @@
            $postSlug,
            $postSlug,
            $imgSlug,
            $full[0]
            $full[0]??''
         );
         // Add gallery attributes to img tag
@@ -118,4 +133,31 @@
      }
      return '';
   }
   public function getImageData(int $imgID):array
   {
      return $this->imgData->remember(
         $imgID,
         function() use ($imgID) {
            if (!wp_get_attachment_image($imgID, 'tiny')) {
               return [];
            }
            return [
               'tiny'         => wp_get_attachment_image_src($imgID, 'tiny')[0],
               'small'     => wp_get_attachment_image_src($imgID, 'medium')[0],
               'medium'       => wp_get_attachment_image_src($imgID, 'large')[0],
               'large'     => wp_get_attachment_image_src($imgID, 'full')[0],
               'image-alt-text'=> get_post_meta($imgID, '_wp_attachment_image_alt', true),
               'image-title'  => get_the_title($imgID),
               'image-caption' => get_the_excerpt($imgID),
            ];
         }
      );
   }
   public static function getData(int $imgID):array
   {
      return (new Image)->getImageData($imgID);
   }
}