Current File : /home/pacjaorg/public_html/nsa/libraries/src/Versioning/Versioning.php
<?php
/**
 * Joomla! Content Management System
 *
 * @copyright  (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\CMS\Versioning;

\defined('JPATH_PLATFORM') or die;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Event\AbstractEvent;
use Joomla\CMS\Factory;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Workflow\WorkflowServiceInterface;
use Joomla\Database\ParameterType;

/**
 * Handle the versioning of content items
 *
 * @since  4.0.0
 */
class Versioning
{
	/**
	 * Method to get a list of available versions of this item.
	 *
	 * @param   string   $typeAlias  Typealias of the component
	 * @param   integer  $id         ID of the content item to get
	 *
	 * @return  object[]   A list of history items
	 *
	 * @since   4.0.0
	 */
	public static function get($typeAlias, $id)
	{
		$db = Factory::getDbo();
		$itemid = $typeAlias . '.' . $id;
		$query = $db->getQuery(true);
		$query->select($db->quoteName('h.version_note') . ',' . $db->quoteName('h.save_date') . ',' . $db->quoteName('u.name'))
			->from($db->quoteName('#__history', 'h'))
			->leftJoin($db->quoteName('#__users', 'u'), $db->quoteName('u.id') . ' = ' . $db->quoteName('h.editor_user_id'))
			->where($db->quoteName('item_id') . ' = :item_id')
			->bind(':item_id', $itemid, ParameterType::STRING)
			->order($db->quoteName('save_date') . ' DESC ');
		$db->setQuery($query);

		return $db->loadObjectList();
	}

	/**
	 * Method to delete the history for an item.
	 *
	 * @param   string   $typeAlias  Typealias of the component
	 * @param   integer  $id         ID of the content item to delete
	 *
	 * @return  boolean  true on success, otherwise false.
	 *
	 * @since   4.0.0
	 */
	public static function delete($typeAlias, $id)
	{
		$db = Factory::getDbo();
		$itemid = $typeAlias . '.' . $id;
		$query = $db->getQuery(true);
		$query->delete($db->quoteName('#__history'))
			->where($db->quoteName('item_id') . ' = :item_id')
			->bind(':item_id', $itemid, ParameterType::STRING);
		$db->setQuery($query);

		return $db->execute();
	}

	/**
	 * Method to save a version snapshot to the content history table.
	 *
	 * @param   string   $typeAlias  Typealias of the content type
	 * @param   integer  $id         ID of the content item
	 * @param   mixed    $data       Array or object of data that can be
	 *                               en- and decoded into JSON
	 * @param   string   $note       Note for the version to store
	 *
	 * @return  boolean  True on success, otherwise false.
	 *
	 * @since   4.0.0
	 */
	public static function store($typeAlias, $id, $data, $note = '')
	{
		$typeTable = Table::getInstance('Contenttype', 'JTable');
		$typeTable->load(array('type_alias' => $typeAlias));

		$historyTable = Table::getInstance('Contenthistory', 'JTable');
		$historyTable->item_id = $typeAlias . '.' . $id;

		$aliasParts = explode('.', $typeAlias);

		// Don't store unless we have a non-zero item id
		if (!$historyTable->item_id)
		{
			return true;
		}

		// We should allow workflow items interact with the versioning
		$component = Factory::getApplication()->bootComponent($aliasParts[0]);

		if ($component instanceof WorkflowServiceInterface && $component->isWorkflowActive($typeAlias))
		{
			PluginHelper::importPlugin('workflow');

			// Pre-processing by observers
			$event = AbstractEvent::create(
				'onContentVersioningPrepareTable',
				[
					'subject'	=> $historyTable,
					'extension'	=> $typeAlias
				]
			);

			Factory::getApplication()->getDispatcher()->dispatch('onContentVersioningPrepareTable', $event);
		}

		$historyTable->version_data = json_encode($data);
		$historyTable->version_note = $note;

		// Don't save if hash already exists and same version note
		$historyTable->sha1_hash = $historyTable->getSha1($data, $typeTable);

		if ($historyRow = $historyTable->getHashMatch())
		{
			if (!$note || ($historyRow->version_note === $note))
			{
				return true;
			}
			else
			{
				// Update existing row to set version note
				$historyTable->version_id = $historyRow->version_id;
			}
		}

		$result = $historyTable->store();

		// Load history_limit config from extension.
		$context = $aliasParts[1] ?? '';

		$maxVersionsContext = ComponentHelper::getParams($aliasParts[0])->get('history_limit_' . $context, 0);

		if ($maxVersionsContext)
		{
			$historyTable->deleteOldVersions($maxVersionsContext);
		}
		elseif ($maxVersions = ComponentHelper::getParams($aliasParts[0])->get('history_limit', 0))
		{
			$historyTable->deleteOldVersions($maxVersions);
		}

		return $result;
	}
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!