[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/plugins/behaviour/versionable/src/Extension/ -> Versionable.php (source)

   1  <?php
   2  
   3  /**
   4   * @package     Joomla.Plugin
   5   * @subpackage  Behaviour.versionable
   6   *
   7   * @copyright   (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
   8   * @license     GNU General Public License version 2 or later; see LICENSE.txt
   9   */
  10  
  11  namespace Joomla\Plugin\Behaviour\Versionable\Extension;
  12  
  13  use Joomla\CMS\Component\ComponentHelper;
  14  use Joomla\CMS\Event\Table\AfterStoreEvent;
  15  use Joomla\CMS\Event\Table\BeforeDeleteEvent;
  16  use Joomla\CMS\Helper\CMSHelper;
  17  use Joomla\CMS\Plugin\CMSPlugin;
  18  use Joomla\CMS\Versioning\VersionableTableInterface;
  19  use Joomla\CMS\Versioning\Versioning;
  20  use Joomla\Event\DispatcherInterface;
  21  use Joomla\Event\SubscriberInterface;
  22  use Joomla\Filter\InputFilter;
  23  
  24  // phpcs:disable PSR1.Files.SideEffects
  25  \defined('_JEXEC') or die;
  26  // phpcs:enable PSR1.Files.SideEffects
  27  
  28  /**
  29   * Implements the Versionable behaviour which allows extensions to automatically support content history for their content items.
  30   *
  31   * This plugin supersedes JTableObserverContenthistory.
  32   *
  33   * @since  4.0.0
  34   */
  35  final class Versionable extends CMSPlugin implements SubscriberInterface
  36  {
  37      /**
  38       * Returns an array of events this subscriber will listen to.
  39       *
  40       * @return  array
  41       *
  42       * @since   4.2.0
  43       */
  44      public static function getSubscribedEvents(): array
  45      {
  46          return [
  47              'onTableAfterStore'   => 'onTableAfterStore',
  48              'onTableBeforeDelete' => 'onTableBeforeDelete',
  49          ];
  50      }
  51  
  52      /**
  53       * The input filter
  54       *
  55       * @var    InputFilter
  56       * @since  4.2.0
  57       */
  58      private $filter;
  59  
  60      /**
  61       * The CMS helper
  62       *
  63       * @var    CMSHelper
  64       * @since  4.2.0
  65       */
  66      private $helper;
  67  
  68      /**
  69       * Constructor.
  70       *
  71       * @param   DispatcherInterface   $dispatcher   The dispatcher
  72       * @param   array                 $config       An optional associative array of configuration settings
  73       * @param   InputFilter           $filter       The input filter
  74       * @param   CMSHelper             $helper       The CMS helper
  75       *
  76       * @since   4.0.0
  77       */
  78      public function __construct(DispatcherInterface $dispatcher, array $config, InputFilter $filter, CMSHelper $helper)
  79      {
  80          parent::__construct($dispatcher, $config);
  81  
  82          $this->filter = $filter;
  83          $this->helper = $helper;
  84      }
  85  
  86      /**
  87       * Post-processor for $table->store($updateNulls)
  88       *
  89       * @param   AfterStoreEvent  $event  The event to handle
  90       *
  91       * @return  void
  92       *
  93       * @since   4.0.0
  94       */
  95      public function onTableAfterStore(AfterStoreEvent $event)
  96      {
  97          // Extract arguments
  98          /** @var VersionableTableInterface $table */
  99          $table  = $event['subject'];
 100          $result = $event['result'];
 101  
 102          if (!$result) {
 103              return;
 104          }
 105  
 106          if (!(is_object($table) && $table instanceof VersionableTableInterface)) {
 107              return;
 108          }
 109  
 110          // Get the Tags helper and assign the parsed alias
 111          $typeAlias  = $table->getTypeAlias();
 112          $aliasParts = explode('.', $typeAlias);
 113  
 114          if ($aliasParts[0] === '' || !ComponentHelper::getParams($aliasParts[0])->get('save_history', 0)) {
 115              return;
 116          }
 117  
 118          $id     = $table->getId();
 119          $data   = $this->helper->getDataObject($table);
 120          $input  = $this->getApplication()->input;
 121          $jform  = $input->get('jform', array(), 'array');
 122          $versionNote = '';
 123  
 124          if (isset($jform['version_note'])) {
 125              $versionNote = $this->filter->clean($jform['version_note'], 'string');
 126          }
 127  
 128          Versioning::store($typeAlias, $id, $data, $versionNote);
 129      }
 130  
 131      /**
 132       * Pre-processor for $table->delete($pk)
 133       *
 134       * @param   BeforeDeleteEvent  $event  The event to handle
 135       *
 136       * @return  void
 137       *
 138       * @since   4.0.0
 139       */
 140      public function onTableBeforeDelete(BeforeDeleteEvent $event)
 141      {
 142          // Extract arguments
 143          /** @var VersionableTableInterface $table */
 144          $table = $event['subject'];
 145  
 146          if (!(is_object($table) && $table instanceof VersionableTableInterface)) {
 147              return;
 148          }
 149  
 150          $typeAlias  = $table->getTypeAlias();
 151          $aliasParts = explode('.', $typeAlias);
 152  
 153          if ($aliasParts[0] && ComponentHelper::getParams($aliasParts[0])->get('save_history', 0)) {
 154              Versioning::delete($typeAlias, $table->getId());
 155          }
 156      }
 157  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer