| | |
| | | } |
| | | |
| | | use JVBase\forms\TaxonomySelector; |
| | | use JVBase\managers\CacheManager; |
| | | use JVBase\meta\MetaForm; |
| | | use JVBase\meta\MetaManager; |
| | | use JVBase\managers\Cache; |
| | | use JVBase\meta\Form; |
| | | use JVBase\meta\Meta; |
| | | |
| | | /** |
| | | * Outputs a toggle text that visually changes based on selection, like a switch |
| | |
| | | |
| | | /** |
| | | * @param int $ID |
| | | * @param MetaManager|null $meta |
| | | * |
| | | * @param string $type |
| | | * @return string |
| | | */ |
| | | function jvbRenderLinks(int $ID, MetaManager|null $meta = null):string |
| | | function jvbRenderLinks(int $ID, string $type =''):string |
| | | { |
| | | $cache = CacheManager::for('user_links', WEEK_IN_SECONDS)->connectTo('post')->connectTo('taxonomy'); |
| | | $cache = Cache::for('user_links', WEEK_IN_SECONDS)->connect('post')->connect('taxonomy')->connect('user'); |
| | | $cached = $cache->get($ID); |
| | | if ($cached) { |
| | | return $cached; |
| | | } |
| | | |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | $meta = match($type){ |
| | | 'post' => Meta::forPost($ID), |
| | | 'term' => Meta::forTerm($ID), |
| | | 'user' => Meta::forUser($ID), |
| | | default => false |
| | | }; |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | if (!$meta) { |
| | | return ''; |
| | | } |
| | | |
| | | $links = $meta->getValue('links'); |
| | | $links = $meta->get('links'); |
| | | |
| | | $out = ''; |
| | | if (!empty($links)) { |
| | |
| | | |
| | | /** |
| | | * @param int $ID |
| | | * @param MetaManager|null $meta |
| | | * @param string $type |
| | | * |
| | | * @return string |
| | | */ |
| | | function jvbRenderContactInfo(int $ID, MetaManager|null $meta = null):string |
| | | function jvbRenderContactInfo(int $ID, string $type = ''):string |
| | | { |
| | | $cache = CacheManager::for('contact', WEEK_IN_SECONDS)->connectTo('post')->connectTo('taxonomy'); |
| | | $cache = Cache::for('contact', WEEK_IN_SECONDS)->connect('post')->connect('taxonomy'); |
| | | |
| | | $cached = $cache->get($ID); |
| | | if($cached){ |
| | | return $cached; |
| | | } |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | $meta = match($type){ |
| | | 'post' => Meta::forPost($ID), |
| | | 'term' => Meta::forTerm($ID), |
| | | 'user' => Meta::forUser($ID), |
| | | default => false |
| | | }; |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | if (!$meta) { |
| | | return ''; |
| | | } |
| | | |
| | | $preference = $meta->getValue('public_contact'); |
| | | $preference = $meta->get('public_contact'); |
| | | $preference = (is_array($preference)) ? $preference : explode(',', $preference); |
| | | |
| | | $out = ''; |
| | | if (!empty($preference)) { |
| | | $out = '<ul class="contact">'; |
| | | $phone = $meta->getValue('phone'); |
| | | $phone = $meta->get('phone'); |
| | | foreach ($preference as $p) { |
| | | $link = $label = false; |
| | | switch ($p) { |
| | |
| | | $label = jvbIcon('phone').'<span>Call</span>'; |
| | | break; |
| | | case 'email': |
| | | $link = 'mailto:'.$meta->getValue('email').'?subject='.rawurlencode('Contact from edmonton.ink').'&body='.rawurlencode('Hey, |
| | | $link = 'mailto:'.$meta->get('email').'?subject='.rawurlencode('Contact from edmonton.ink').'&body='.rawurlencode('Hey, |
| | | I found you on edmonton.ink, and I wanted to reach out!'); |
| | | $label = jvbIcon('envelope').'<span>Email</span>'; |
| | | break; |
| | |
| | | |
| | | /** |
| | | * @param int $ID |
| | | * @param MetaManager|null $meta |
| | | * @param string $type |
| | | * @return string |
| | | */ |
| | | function jvbRenderSpecialtyField(int $ID, MetaManager|null $meta = null):string |
| | | function jvbRenderSpecialtyField(int $ID, string $type = ''):string |
| | | { |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | $meta = match($type){ |
| | | 'post' => Meta::forPost($ID), |
| | | 'term' => Meta::forTerm($ID), |
| | | 'user' => Meta::forUser($ID), |
| | | default => false |
| | | }; |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | if (!$meta) { |
| | | return ''; |
| | | } |
| | | |
| | | $out = ''; |
| | | $specialties = $meta->getValue('specialties'); |
| | | $specialties = $meta->get('specialties'); |
| | | if (!empty($specialties)) { |
| | | foreach ($specialties as $specialty) { |
| | | $out .= '<li><b>'.$specialty['specialty'].'</b>'; |
| | | if ($specialty['description'] !== '') { |
| | | $out .= apply_filters('the_content', $specialty['description']); |
| | | $out .= jvb_filter_content( $specialty['description']); |
| | | } |
| | | $out .= '</li>'; |
| | | } |
| | |
| | | |
| | | /** |
| | | * @param int $ID |
| | | * @param MetaManager|null $meta |
| | | * @param string $type = '' |
| | | * @return string |
| | | */ |
| | | function jvbRenderAwardsField(int $ID, MetaManager|null $meta = null):string |
| | | function jvbRenderAwardsField(int $ID, string $type = ''):string |
| | | { |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | $meta = match($type){ |
| | | 'post' => Meta::forPost($ID), |
| | | 'term' => Meta::forTerm($ID), |
| | | 'user' => Meta::forUser($ID), |
| | | default => false |
| | | }; |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | if (!$meta) { |
| | | return ''; |
| | | } |
| | | |
| | | $out = ''; |
| | | $awards = $meta->getValue('awards'); |
| | | $awards = $meta->get('awards'); |
| | | if (!empty($awards)) { |
| | | foreach ($awards as $award) { |
| | | $out .= '<li><b>'.$award['name'].'</b>'; |
| | |
| | | |
| | | /** |
| | | * @param int $ID |
| | | * @param MetaManager|null $meta |
| | | * @param string $type |
| | | * @return string |
| | | */ |
| | | function jvbRenderReviewsField(int $ID, MetaManager|null $meta = null):string |
| | | function jvbRenderReviewsField(int $ID, string $type = ''):string |
| | | { |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | $meta = match($type){ |
| | | 'post' => Meta::forPost($ID), |
| | | 'term' => Meta::forTerm($ID), |
| | | 'user' => Meta::forUser($ID), |
| | | default => false |
| | | }; |
| | | if (!$meta) { |
| | | $meta = jvbGetMeta($ID); |
| | | } |
| | | if (!$meta) { |
| | | return ''; |
| | | } |
| | | |
| | | $out = ''; |
| | | $reviews = $meta->getValue('reviews'); |
| | | $reviews = $meta->get('reviews'); |
| | | if (!empty($reviews)) { |
| | | foreach ($reviews as $review) { |
| | | if ($review['review'] === '') { |
| | | continue; |
| | | } |
| | | $out .= '<li><blockquote>'.apply_filters('the_content', $review['review']); |
| | | $out .= '<li><blockquote>'.jvb_filter_content( $review['review']); |
| | | if ($review['name'] !== '' || $review['rating'] !== 'none') { |
| | | $date = $aOpen = $aClose = ''; |
| | | if ($review['url']) { |
| | |
| | | return $out; |
| | | } |
| | | |
| | | function jvbGetMeta(int $ID) { |
| | | if (is_tax()) { |
| | | $type = 'term'; |
| | | } elseif (is_singular()) { |
| | | $type = 'post'; |
| | | function jvbGetMeta(int $ID):Meta|false { |
| | | if (term_exists($ID)) { |
| | | return Meta::forTerm($ID); |
| | | } elseif (get_post_status($ID)) { |
| | | return Meta::forPost($ID); |
| | | } elseif (get_userdata($ID)) { |
| | | return Meta::forUser($ID); |
| | | } else { |
| | | $type = 'user'; |
| | | } |
| | | return new JVBase\meta\MetaManager($ID, $type); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | function jvbRenderTermList(array|bool|WP_Error $terms, string $label = '') { |
| | | function jvbRenderTermList(array|bool|WP_Error $terms, string $label = ''):string { |
| | | if (!$terms || is_wp_error($terms) || empty($terms)) { |
| | | return ''; |
| | | } |
| | |
| | | return ''; |
| | | } |
| | | } |
| | | $cache = CacheManager::for($term->taxonomy); |
| | | $key = $term->term_id.'-link'; |
| | | $cache = Cache::for($term->taxonomy.'_link')->connect('taxonomy'); |
| | | $key = $term->term_id; |
| | | return $cache->remember( |
| | | $key, |
| | | function() use ($term) { |
| | | return '<a href="'.get_term_link($term->term_id, $term->taxonomy).'" title="'.$term->name.'">'. |
| | | $term->name. |
| | | return '<a href="'.get_term_link($term->term_id, $term->taxonomy).'" title="'.html_entity_decode($term->name).'">'. |
| | | html_entity_decode($term->name). |
| | | '</a>'; |
| | | } |
| | | ); |
| | |
| | | </div> |
| | | </template> |
| | | <template class="uploadMeta"> |
| | | <?= jvbImageMeta() ?> |
| | | <?= Form::renderImagePreview() ?> |
| | | </template> |
| | | <template class="imageGroup"> |
| | | <div class="upload-group"> |
| | |
| | | </div> |
| | | </template> |
| | | <template class="uploadItem"> |
| | | <?php |
| | | $form = new MetaForm(); |
| | | $form->renderImagePreview(); |
| | | ?> |
| | | <?= Form::renderImagePreview() ?> |
| | | </template> |
| | | <template class="restoreNotification"> |
| | | <dialog class="restore-uploads"> |
| | |
| | | } |
| | | } |
| | | |
| | | function jvbImageMeta(int|null $ID = null, string $title = '', string $alt = '', string $caption = '', array $fields = []):string |
| | | { |
| | | $form = new MetaForm(); |
| | | $dataID = ($ID) ? ['image-id' => $ID] : false; |
| | | $addID = ($ID) ? '-'.$ID : ''; |
| | | |
| | | |
| | | $defaultFields = [ |
| | | 'image-title'.$addID => [ |
| | | 'type' => 'text', |
| | | 'label' => 'Image Title', |
| | | 'value' => $title, |
| | | 'data' => $dataID |
| | | ], |
| | | 'image-alt-text'.$addID => [ |
| | | 'type' => 'text', |
| | | 'label' => 'Alt Text', |
| | | 'value' => $alt, |
| | | 'hint' => 'Alt text helps the visually impaired, as well as some benefits for SEO.', |
| | | 'data' => $dataID |
| | | ], |
| | | 'image-caption'.$addID => [ |
| | | 'type' => 'textarea', |
| | | 'value' => $caption, |
| | | 'label' => 'Image Caption', |
| | | 'data' => $dataID |
| | | ] |
| | | ]; |
| | | $fields = array_merge($defaultFields, $fields); |
| | | |
| | | $config = [ |
| | | 'type' => 'group', |
| | | 'wrap' => 'details', |
| | | 'label' => 'Image Info', |
| | | 'hint' => 'These will be automatically generated if left blank.', |
| | | 'fields' => $fields |
| | | ]; |
| | | |
| | | return $form->render('image_data',null, $config,false, true); |
| | | } |
| | | |
| | | |
| | | |
| | | function jvbLocationLinks(array $location): string { |
| | | if (empty($location['address'])) { |
| | | return ''; |
| | | } |
| | | |
| | | $cache = CacheManager::for('locations')->connectTo('taxonomy'); |
| | | $cache = Cache::for('locations')->connect('taxonomy'); |
| | | $key = $cache->generateKey($location); |
| | | |
| | | $cached = false; |