235 lines
4.4 KiB
PHP
235 lines
4.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @author Tassos Marinos <info@tassos.gr>
|
|
* @link http://www.tassos.gr
|
|
* @copyright Copyright © 2021 Tassos Marinos All Rights Reserved
|
|
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
|
|
*/
|
|
|
|
namespace ACF\Previewer;
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\Registry\Registry;
|
|
use Joomla\CMS\Uri\Uri;
|
|
|
|
class Field
|
|
{
|
|
/**
|
|
* The field framework widget name.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $field = '';
|
|
|
|
/**
|
|
* Field Editor Form Data.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $data = [];
|
|
|
|
/**
|
|
* Field Params.
|
|
*
|
|
* @var object
|
|
*/
|
|
protected $fieldParams = [];
|
|
|
|
/**
|
|
* The field payload used to render the field.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $payload;
|
|
|
|
/**
|
|
* The Framework Widget.
|
|
*
|
|
* @var Widget
|
|
*/
|
|
protected $widget = null;
|
|
|
|
public function __construct($data = [], $payload = [])
|
|
{
|
|
$this->data = new Registry($data);
|
|
|
|
$fieldParams = isset($data['fieldparams']) ? $data['fieldparams'] : [];
|
|
$this->fieldParams = new Registry($fieldParams);
|
|
|
|
if ($payload)
|
|
{
|
|
$this->payload = $payload;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Saves the field's JSON data for previewer to render it.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function saveJSON()
|
|
{
|
|
// Get path to file
|
|
$file = implode(DIRECTORY_SEPARATOR, [\ACF\Helpers\Previewer::getJsonDirectory(), $this->data->get('type') . '.json']);
|
|
|
|
// Save JSON file
|
|
file_put_contents($file, $this->getHTML());
|
|
}
|
|
|
|
/**
|
|
* Setup the field.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function setup()
|
|
{
|
|
if (method_exists($this, 'onSetup'))
|
|
{
|
|
$this->onSetup();
|
|
}
|
|
|
|
$this->saveJSON();
|
|
}
|
|
|
|
/**
|
|
* Render the field.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function render()
|
|
{
|
|
return $this->widget->render();
|
|
}
|
|
|
|
/**
|
|
* Field HTML output.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function getHTML()
|
|
{
|
|
return '<html><head>' . $this->getHead() . '</head><body>' . $this->render() . '</body></html>';
|
|
}
|
|
|
|
/**
|
|
* Returns the head of the preview HTML.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function getHead()
|
|
{
|
|
if (!$assets = $this->getAssets())
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Add Reset CSS
|
|
$head = '<style>' . $this->getResetCSS() . '</style>';
|
|
|
|
// Add Custom CSS
|
|
if (isset($assets['custom_css']) && !empty($assets['custom_css']))
|
|
{
|
|
$head .= '<style>' . $assets['custom_css'] . '</style>';
|
|
}
|
|
|
|
$base_url = Uri::root();
|
|
|
|
// Add CSS
|
|
if (isset($assets['css']) && is_array($assets['css']) && count($assets['css']))
|
|
{
|
|
foreach ($assets['css'] as $css)
|
|
{
|
|
$css = str_replace('plg_system_nrframework/', 'plg_system_nrframework/css/', $css);
|
|
|
|
$link = $base_url . 'media/' . $css;
|
|
|
|
$head .= '<link href="' . $link . '" rel="stylesheet" />';
|
|
}
|
|
}
|
|
|
|
// Add Core JS
|
|
$head .= '<script src="' . $base_url . 'media/system/js/core.js"></script>';
|
|
|
|
// Add JS
|
|
if (isset($assets['js']) && is_array($assets['js']) && count($assets['js']))
|
|
{
|
|
foreach ($assets['js'] as $js)
|
|
{
|
|
$js = str_replace('plg_system_nrframework/', 'plg_system_nrframework/js/', $js);
|
|
|
|
$link = $base_url . 'media/' . $js;
|
|
|
|
$head .= '<script src="' . $link . '"></script>';
|
|
}
|
|
}
|
|
|
|
return $head;
|
|
}
|
|
|
|
/**
|
|
* Returns the field reset CSS.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function getResetCSS()
|
|
{
|
|
$reset_css = '
|
|
body {
|
|
border: 0 !important;
|
|
background: #fff !important;
|
|
padding: 0 !important;
|
|
margin: 0 !important;
|
|
overflow-x: hidden !important;
|
|
font-family: Arial;
|
|
font-size: 16px;
|
|
}
|
|
';
|
|
|
|
return $reset_css . $this->getFieldPreviewerCSS();
|
|
}
|
|
|
|
/**
|
|
* Adds some extra CSS to the previewer's body.
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function getFieldPreviewerCSS()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* The CSS/JS assets that are required for the field to run.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function getAssets()
|
|
{
|
|
return [
|
|
'css' => $this->getFieldCSS(),
|
|
'js' => $this->getFieldJS(),
|
|
'custom_css' => $this->widget->getOption('css_vars') . $this->widget->getOption('custom_css')
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Returns the field CSS files.
|
|
*
|
|
* @return array
|
|
*/
|
|
private function getFieldCSS()
|
|
{
|
|
return $this->widget && method_exists($this->widget, 'getCSS') ? $this->widget->getCSS() : [];
|
|
}
|
|
|
|
/**
|
|
* Returns the field JS files.
|
|
*
|
|
* @return array
|
|
*/
|
|
private function getFieldJS()
|
|
{
|
|
return $this->widget && method_exists($this->widget, 'getJS') ? $this->widget->getJS() : [];
|
|
}
|
|
} |