Jake Vanderwerf
3 days ago ba1e1ccf869b818f7a7a897264dfea05563a7796
inc/registrar/config/seo/Meta.php
@@ -11,13 +11,23 @@
   protected string $slug;
   protected string $title;
   protected array $titleConfig = [
      'maxLength' => 60,
      'alts'   => []
   ];
   protected string $description;
   protected array $descriptionConfig = [
      'maxLength' => 120,
      'alts'   => []
   ];
   protected int $image;
   protected int $twitterImage;
   public function __construct(string $slug) {
      $this->slug = $slug;
      $this->titleConfig['alts'] = apply_filters(BASE.jvbNoBase($slug).'TitleAlts', []);
      add_action('init', [$this, 'init']);
   }
@@ -25,6 +35,7 @@
      if (!function_exists('tsf')){
         return;
      }
      if ($this->hasTitle()){
         add_filter('the_seo_framework_title_from_generation', [$this, 'filterTitle'], 10, 2);
      }
@@ -36,6 +47,27 @@
      }
   }
   public function setAlts(array $alts, string $type = 'title'):void
   {
      foreach (array_values($alts) as $i => $alt) {
         if (!is_string($alt)) {
            error_log('[Registrar.config.Meta]:setAlts invalid string attempted: '.print_r($alt, true));
            unset($alts[$i]);
         }
      }
      switch ($type) {
         case 'title':
            $this->titleConfig['alts'] = $alts;
            break;
         case 'description':
            $this->descriptionConfig['alts'] = $alts;
            break;
         default:
            error_log('[Registrar.config.Meta]:setAlts invalid type attempted: '.print_r($type, true));
      }
   }
   public function hasTitle():bool
   {
      return !empty($this->title);
@@ -53,15 +85,50 @@
      return !empty($this->twitterImage);
   }
   public function testLength(int $ID, string $result, string $type):string
   {
      $maxLength = match($type) {
         'title'  => $this->titleConfig['maxLength'],
         'description'  => $this->descriptionConfig['alts'],
         default => false
      };
      if (!$maxLength) {
         error_log('[Registrar.config.Meta]:testLength invalid type: '.$type);
         return $result;
      }
      $alts = match($type) {
         'title'  => $this->titleConfig['alts'],
         'description' => $this->descriptionConfig['alts'],
      };
      usort($alts, fn($a, $b) => mb_strlen($b) <=> mb_strlen($a));
      $meta = new \JVBase\meta\Meta($ID, Registrar::getInstance($this->slug)->getType());
      foreach ($alts as $alt) {
         $alt = Resolver::resolve($alt, $meta);
         $r = $result.' '.trim($alt);
         if (mb_strlen($r) <= $maxLength) {
            return $r;
         }
      }
      return rtrim($result, $maxLength - 3).'...';
   }
   public function filterTitle(string $title, ?array $args): string
   {
      error_log('Filtering title...');
      if (jvbTSFDoIt($this->slug, $args)){
         return $title;
      }
      $ID = jvbTSFGetID($args);
      $meta = new \JVBase\meta\Meta($ID, Registrar::getInstance($this->slug)->getType());
      return Resolver::resolve($this->title, $meta);
      $resolved = Resolver::resolve($this->title, $meta);
      $resolved = $this->testLength($ID, $resolved, 'title');
      return $resolved;
   }
   public function filterDescription(string $description, ?array $args): string