Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions Block/Adminhtml/Form/Renderer/Config/ScheduleEveryFieldComment.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php
/**
* Copyright © Webscale. All rights reserved.
* See LICENSE for license details.
*/

namespace Webscale\Varnish\Block\Adminhtml\Form\Renderer\Config;

use Magento\Framework\View\Element\AbstractBlock;
use Magento\Config\Model\Config\CommentInterface;
use Magento\Framework\View\Element\Context;
use Webscale\Varnish\Helper\Config;

class ScheduleEveryFieldComment extends AbstractBlock implements CommentInterface
{
/**
* @param Context $context
* @param array $data
* @param Config $config
*/
public function __construct(
Context $context,
Config $config
) {
$this->config = $config;

parent::__construct($context);
}

/**
* @param $elementValue
* @return string
*/
public function getCommentText($elementValue)
{
return 'Cron Expression: <span style="color:grey;">none</span>';
}
}
57 changes: 57 additions & 0 deletions Block/Adminhtml/Form/Renderer/Config/ScheduleEveryFieldConfig.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
/**
* Copyright © Webscale. All rights reserved.
* See LICENSE for license details.
*/

namespace Webscale\Varnish\Block\Adminhtml\Form\Renderer\Config;

use Magento\Config\Block\System\Config\Form\Field;
use Magento\Backend\Block\Template\Context;
use Magento\Framework\Data\Form\Element\AbstractElement;
use Magento\Framework\Data\Form\Element\Select;

class ScheduleEveryFieldConfig extends Field
{
public function __construct(
Context $context,
Select $select
) {
$this->select = $select;

parent::__construct($context);
}

/**
* @param AbstractElement $element
* @return string
*/
protected function _getElementHtml(AbstractElement $element) {
$name = $element->getName();

$element->setStyle('width: 100px; margin-right: 20px;')->setName($name . '[]');

if ($element->getValue()) {
$values = explode(',', $element->getValue());
} else {
$values = [];
}

$field = $element->setValue(isset($values[0]) ? $values[0] : null)->getElementHtml();

$units = $this->select->setName($name . '[]')
->setStyle('width: 142px;')
->setForm($element->getForm())
->setValues([
['value' => 'min', 'label' => 'minute(s)'],
['value' => 'hour', 'label' => 'hour(s)']
])
->setId('webscale_varnish_flush_cache_schedule_time')
->setValue(isset($values[1]) ? $values[1] : null)
->getElementHtml();

return '<div style="float: left;">' . $field . '</div>'
. '<div style="float: left;">' . $units . '</div>'
. '<div style="clear: both"></div>';
}
}
39 changes: 39 additions & 0 deletions Block/System/Config/Scheduled.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php
/**
* Copyright © Webscale. All rights reserved.
* See LICENSE for license details.
*/

namespace Webscale\Varnish\Block\System\Config;

/**
* @SuppressWarnings(PHPMD.CamelCaseMethodName)
*/
class Scheduled extends \Webscale\Varnish\Block\System\Config\SettingsAbstract
{
/**
* Return header comment part of html for fieldset
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
protected function _getHeaderCommentHtml($element): string
{
return $this->getCacheConfigMessage() . $this->getScheduledConfigMessage();
}

/**
* Check if account and application is configured
*
* @return string
*/
private function getScheduledConfigMessage(): string
{
return $this->getMessageWrapper(
__('Enabling this feature will disable partial cache invalidation.' .
' Full varnish cache flush will be executed instead, according to the cron expression configured below.'
), 'warning'
);
}
}
59 changes: 2 additions & 57 deletions Block/System/Config/Settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,54 +6,17 @@

namespace Webscale\Varnish\Block\System\Config;

use Webscale\Varnish\Helper\Config;
use Magento\Backend\Block\Context;
use Magento\Backend\Model\Auth\Session;
use Magento\Config\Block\System\Config\Form\Fieldset;
use Magento\Framework\View\Helper\Js;
use Magento\Backend\Model\UrlInterface;
use Magento\PageCache\Model\Config as CacheConfig;
use Magento\Framework\Data\Form\Element\AbstractElement;

/**
* @SuppressWarnings(PHPMD.CamelCaseMethodName)
*/
class Settings extends Fieldset
class Settings extends \Webscale\Varnish\Block\System\Config\SettingsAbstract
{
/**
* @var Config $config
*/
protected $config;

/**
* @param Context $context
* @param Session $authSession
* @param Js $jsHelper
* @param Config $config
* @param UrlInterface $urlBuilder
* @param CacheConfig $cacheConfig
* @param array $data
*/
public function __construct(
Context $context,
Session $authSession,
Js $jsHelper,
Config $config,
UrlInterface $urlBuilder,
CacheConfig $cacheConfig,
array $data = []
) {
$this->config = $config;
$this->urlBuilder = $urlBuilder;
$this->cacheConfig = $cacheConfig;

parent::__construct($context, $authSession, $jsHelper, $data);
}

/**
* Return header comment part of html for fieldset
*
* @param AbstractElement $element
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
Expand Down Expand Up @@ -105,22 +68,4 @@ private function getApplicationConfigMessage(): string

return '';
}

/**
* Get message wrapper
*
* @param string $message
* @param string $severity
* @return string
*/
private function getMessageWrapper(string $message = '', string $severity = 'notice'): string
{
$html = '<div style="padding:10px;"><div class="messages">';
$html .= '<div class="message message-' . $severity . ' ' . $severity . '" style="margin-bottom: 0;">';
$html .= '<div data-ui-id="messages-message-' . $severity . '">';
$html .= $message;
$html .= '</div></div></div></div>';

return $html;
}
}
66 changes: 66 additions & 0 deletions Block/System/Config/SettingsAbstract.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php
/**
* Copyright © Webscale. All rights reserved.
* See LICENSE for license details.
*/

namespace Webscale\Varnish\Block\System\Config;

use Magento\Backend\Block\Context;
use Magento\Backend\Model\Auth\Session;
use Magento\Backend\Model\UrlInterface;
use Magento\Config\Block\System\Config\Form\Fieldset;
use Magento\Framework\View\Helper\Js;
use Magento\PageCache\Model\Config as CacheConfig;
use Webscale\Varnish\Helper\Config;

abstract class SettingsAbstract extends Fieldset
{
/**
* @var Config $config
*/
protected $config;

/**
* @param Context $context
* @param Session $authSession
* @param Js $jsHelper
* @param Config $config
* @param UrlInterface $urlBuilder
* @param CacheConfig $cacheConfig
* @param array $data
*/
public function __construct(
Context $context,
Session $authSession,
Js $jsHelper,
Config $config,
UrlInterface $urlBuilder,
CacheConfig $cacheConfig
)
{
$this->config = $config;
$this->urlBuilder = $urlBuilder;
$this->cacheConfig = $cacheConfig;

parent::__construct($context, $authSession, $jsHelper);
}

/**
* Get message wrapper
*
* @param string $message
* @param string $severity
* @return string
*/
public function getMessageWrapper(string $message = '', string $severity = 'notice'): string
{
$html = '<div style="padding:10px;"><div class="messages">';
$html .= '<div class="message message-' . $severity . ' ' . $severity . '" style="margin-bottom: 0;">';
$html .= '<div data-ui-id="messages-message-' . $severity . '">';
$html .= $message;
$html .= '</div></div></div></div>';

return $html;
}
}
58 changes: 58 additions & 0 deletions Cron/CacheFlushScheduled.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
/**
* Copyright © Webscale. All rights reserved.
* See LICENSE for license details.
*/

namespace Webscale\Varnish\Cron;

use Webscale\Varnish\Helper\Config;
use Magento\PageCache\Model\Config as CacheConfig;
use Webscale\Varnish\Model\PurgeCache;

class CacheFlushScheduled
{
const EVENT_NAME = 'webscale_varnish_flush_all_scheduled';

/** @var Config $config */
private $config;

/** @var CacheConfig $cacheConfig */
private $cacheConfig;

/** @var PurgeCache $purgeCache */
private $purgeCache;

/**
* @param Config $config
*/
public function __construct(
CacheConfig $cacheConfig,
Config $config,
PurgeCache $purgeCache
) {
$this->config = $config;
$this->cacheConfig = $cacheConfig;
$this->purgeCache = $purgeCache;
}

/**
* @return void
*/
public function execute() {
try {
if (
$this->cacheConfig->getType() == CacheConfig::VARNISH
&& $this->config->isAvailable()
&& !empty($this->config->getCronExpression())
) {
$this->purgeCache->sendPurgeRequest(['tagsPattern' => ['.*'], 'event' => self::EVENT_NAME]);
$this->config->log('Executed scheduled varnish cache flush.');
}
} catch (\Exception $e) {
$this->config->log('Unable to execute scheduled varnish cache flush.');
$this->config->log($e->getMessage() . PHP_EOL . $e->getTraceAsString(), 'critical');
}

}
}
Binary file added Documentation/cache-events.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Documentation/scheduled-full-cache-flush.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading