Your IP : 216.73.216.224


Current Path : /var/www/html/libraries/noboss/src/Form/Field/
Upload File :
Current File : /var/www/html/libraries/noboss/src/Form/Field/NbExternalVideoField.php

<?php
/**
 * @package			No Boss Extensions
 * @subpackage  	No Boss Library
 * @author			No Boss Technology <contact@nobosstechnology.com>
 * @copyright		Copyright (C) 2026 No Boss Technology. All rights reserved.
 * @license			GNU Lesser General Public License version 3 or later; see <https://www.gnu.org/licenses/lgpl-3.0.en.html>
 */

namespace Noboss\Library\Form\Field;

use Joomla\CMS\Form\Field\TextField;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Uri\Uri;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects

/**
 * NbExternalVideoField
 *
 * Field que exibe um input para informar URL ou código de vídeo externo (YouTube, Vimeo, Facebook).
 * Detecta automaticamente o player, extrai e normaliza o ID do vídeo, valida acessibilidade para
 * vídeos do Facebook via helper e expõe valores auxiliares (por exemplo, thumbnails) para uso no formulário.
 *
 * Utilizado inicialmente em: No Boss FAQ e No Boss Video Gallery.
 *
 * Documentacao: https://wiki.nobossextensions.com/private/nb/plataforma-e-extensoes/no-boss-external-video
 */
class NbExternalVideoField extends TextField {

	protected $type = "NbExternalVideo";

	protected function getInput(){
        $app = Factory::getApplication();
        $wa = $app->getDocument()->getWebAssetManager();

        // JS s CSS do field
		$wa->registerAndUseScript('nobossexternalvideo', Uri::root()."libraries/noboss/src/Form/Field/assets/js/min/nobossexternalvideo.min.js");
		$wa->registerAndUseStyle('nobossexternalvideo', Uri::root()."libraries/noboss/src/Form/Field/assets/stylesheets/css/nobossexternalvideo.min.css");

        // Valor completo do campo onde salvamos somente o ID ou URL + ID separando os dois valores por '||'
        $valueComplete = $this->value;

        // Esta salvo a url do video e o codigo do video (utilizamos '||' para separar no value os dois valores)
        if(strpos($valueComplete, '||')){
            $tempArray = explode("||", $valueComplete);
            $valueUrl = $tempArray[0];
            $valuecode = $tempArray[1];
        }
        // Esta salvo apenas o ID do video
        else{
            $valueUrl = $valueComplete;
            $valuecode = $valueComplete;
        }

        $html = "";

        // Input hidden que armazena o valor completo da url (caso definido) e mais o codigo separado
        $html .= "<input type='hidden' nbexternalvideo-complete name='{$this->name}' id='{$this->id}' value='{$valueComplete}'>";

        // Input hidden que armazena o valor somente do codigo (ID) do video
        $html .= "<input type='hidden' nbexternalvideo-code value='{$valuecode}'>";

        // Input text onde usuario digita a url ou codigo (ID) do video
        $html .= "<input type='text' class='form-control' nbexternalvideo-url value='{$valueUrl}'>";

        // // Adicona texto com link da documentacao
        // if(!empty($this->element->attributes()->documentation)){
        //     $html .= "<span class='nbexternalvideo__doc form-text'>".Text::_($this->element->attributes()->documentation)."</span>";
        // }

        // Botão para abrir a documentação externa (wiki)
        $docUrl = 'https://wiki.nobossextensions.com/no-boss-library/como-obter-o-url-ou-codigo-de-videos-youtube-vimeo-facebook';
        $docLabel = Text::_('LIB_NOBOSS_FIELD_NBEXTERNALVIDEO_DOC');

        // Exibe a documentação como um link simples
        $html .= '<a href="' . htmlspecialchars($docUrl, ENT_QUOTES, 'UTF-8') . '" '
            . 'target="_blank" rel="noopener" '
            . 'class="nbexternalvideo__doc-link">' . htmlspecialchars($docLabel, ENT_QUOTES, 'UTF-8') . '</a>';

        // Adiciona constante no JS
        Text::script('LIB_NOBOSS_FIELD_NBEXTERNALVIDEO_ERROR');
        Text::script('LIB_NOBOSS_FIELD_NBEXTERNALVIDEO_ERROR_FACEBOOK_VALID');
        Text::script('LIB_NOBOSS_FIELD_NBEXTERNALVIDEO_ERROR_YOUTUBE_VALID');
        Text::script('LIB_NOBOSS_FIELD_NBEXTERNALVIDEO_ERROR_VIMEO_FORBIDDEN');
        Text::script('LIB_NOBOSS_FIELD_NBEXTERNALVIDEO_ERROR_VIMEO_OTHERS');
        Text::script('LIB_NOBOSS_FIELD_NBEXTERNALVIDEO_ERROR_VIMEO_NOT_FOUND');

        return $html;
    }
}