[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |