mirror of
https://github.com/wintercms/winter.git
synced 2024-06-28 05:33:29 +02:00
165 lines
4.1 KiB
PHP
165 lines
4.1 KiB
PHP
<?php namespace Backend\FormWidgets;
|
|
|
|
use Event;
|
|
use Request;
|
|
use Backend\Classes\FormWidgetBase;
|
|
|
|
/**
|
|
* Rich Editor
|
|
* Renders a rich content editor field.
|
|
*
|
|
* @package october\backend
|
|
* @author Alexey Bobkov, Samuel Georges
|
|
*/
|
|
class RichEditor extends FormWidgetBase
|
|
{
|
|
//
|
|
// Configurable properties
|
|
//
|
|
|
|
/**
|
|
* @var boolean Determines whether content has HEAD and HTML tags.
|
|
*/
|
|
public $fullPage = false;
|
|
|
|
//
|
|
// Object properties
|
|
//
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
protected $defaultAlias = 'richeditor';
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function init()
|
|
{
|
|
$this->fillFromConfig([
|
|
'fullPage',
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function render()
|
|
{
|
|
$this->prepareVars();
|
|
return $this->makePartial('richeditor');
|
|
}
|
|
|
|
/**
|
|
* Prepares the list data
|
|
*/
|
|
public function prepareVars()
|
|
{
|
|
$this->vars['fullPage'] = $this->fullPage;
|
|
$this->vars['stretch'] = $this->formField->stretch;
|
|
$this->vars['size'] = $this->formField->size;
|
|
$this->vars['name'] = $this->formField->getName();
|
|
$this->vars['value'] = $this->getLoadValue();
|
|
}
|
|
|
|
/**
|
|
* Returns a single collection of available page links.
|
|
* This implementation has room to place links under
|
|
* different groups based on the link type.
|
|
* @return array
|
|
*/
|
|
public function onGetPageLinks()
|
|
{
|
|
$links = [];
|
|
$types = $this->getPageLinkTypes();
|
|
|
|
$links[] = ['name' => 'Select a page...', 'url' => false];
|
|
|
|
$iterator = function($links, $level = 0) use (&$iterator) {
|
|
$result = [];
|
|
foreach ($links as $linkUrl => $link) {
|
|
|
|
/*
|
|
* Remove scheme and host from URL
|
|
*/
|
|
$baseUrl = Request::getSchemeAndHttpHost();
|
|
if (strpos($linkUrl, $baseUrl) === 0) {
|
|
$linkUrl = substr($linkUrl, strlen($baseUrl));
|
|
}
|
|
|
|
$linkName = str_repeat(' ', $level * 4);
|
|
$linkName .= is_array($link) ? array_get($link, 'title', '') : $link;
|
|
$result[] = ['name' => $linkName, 'url' => $linkUrl];
|
|
|
|
if (is_array($link)) {
|
|
$result = array_merge(
|
|
$result,
|
|
$iterator(array_get($link, 'links', []), $level + 1)
|
|
);
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
};
|
|
|
|
foreach ($types as $typeCode => $typeName) {
|
|
$links = array_merge($links, $iterator($this->getPageLinks($typeCode)));
|
|
}
|
|
|
|
return ['links' => $links];
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function loadAssets()
|
|
{
|
|
$this->addCss('css/richeditor.css', 'core');
|
|
$this->addJs('js/build-min.js', 'core');
|
|
}
|
|
|
|
/**
|
|
* Returns a list of registered page link types.
|
|
* This is reserved functionality for separating the links by type.
|
|
* @return array Returns an array of registered page link types
|
|
*/
|
|
protected function getPageLinkTypes()
|
|
{
|
|
$result = [];
|
|
|
|
$apiResult = Event::fire('backend.richeditor.listTypes');
|
|
if (is_array($apiResult)) {
|
|
foreach ($apiResult as $typeList) {
|
|
if (!is_array($typeList)) {
|
|
continue;
|
|
}
|
|
|
|
foreach ($typeList as $typeCode => $typeName) {
|
|
$result[$typeCode] = $typeName;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
protected function getPageLinks($type)
|
|
{
|
|
$result = [];
|
|
$apiResult = Event::fire('backend.richeditor.getTypeInfo', [$type]);
|
|
if (is_array($apiResult)) {
|
|
foreach ($apiResult as $typeInfo) {
|
|
if (!is_array($typeInfo)) {
|
|
continue;
|
|
}
|
|
|
|
foreach ($typeInfo as $name => $value) {
|
|
$result[$name] = $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
}
|