| Current Path : /var/www/html/libraries/noboss/src/Form/Field/ |
| 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;
}
}