Current File : /home/pacjaorg/public_html/nsa/libraries/src/Workflow/WorkflowPluginTrait.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
 */

namespace Joomla\CMS\Workflow;

\defined('JPATH_PLATFORM') or die;

use Joomla\CMS\Form\Form;
use Joomla\CMS\Object\CMSObject;
use ReflectionClass;

/**
 * Trait for component workflow plugins.
 *
 * @since  4.0.0
 */
trait WorkflowPluginTrait
{
	/**
	 * Add different parameter options to the transition view, we need when executing the transition
	 *
	 * @param   Form      $form The form
	 * @param   \stdClass $data The data
	 *
	 * @return  boolean
	 *
	 * @since   4.0.0
	 */
	protected function enhanceWorkflowTransitionForm(Form $form, $data)
	{
		$workflow_id = (int) ($data->workflow_id ?? $form->getValue('workflow_id'));

		$workflow = $this->getWorkflow($workflow_id);

		if (empty($workflow->id) || !$this->isSupported($workflow->extension))
		{
			return false;
		}

		// Load XML file from "parent" plugin
		$path = dirname((new ReflectionClass(static::class))->getFileName());

		if (is_file($path . '/forms/action.xml'))
		{
			$form->loadFile($path . '/forms/action.xml');
		}

		return $workflow;
	}

	/**
	 * Get the workflow for a given ID
	 *
	 * @param   int|null $workflowId ID of the workflow
	 *
	 * @return  CMSObject|boolean  Object on success, false on failure.
	 *
	 * @since   4.0.0
	 */
	protected function getWorkflow(int $workflowId = null)
	{
		$workflowId = !empty($workflowId) ? $workflowId : $this->app->input->getInt('workflow_id');

		if (is_array($workflowId))
		{
			return false;
		}

		return $this->app->bootComponent('com_workflow')
			->getMVCFactory()
			->createModel('Workflow', 'Administrator', ['ignore_request' => true])
			->getItem($workflowId);
	}

	/**
	 * Check if the current plugin should execute workflow related activities
	 *
	 * @param   string $context Context to check
	 *
	 * @return  boolean
	 *
	 * @since   4.0.0
	 */
	protected function isSupported($context)
	{
		return false;
	}

	/**
	 * Check if the context is listed in the allowed of forbidden lists and return the result.
	 *
	 * @param   string $context Context to check
	 *
	 * @return  boolean
	 */
	protected function checkAllowedAndForbiddenlist($context)
	{
		$allowedlist = \array_filter((array) $this->params->get('allowedlist', []));
		$forbiddenlist = \array_filter((array) $this->params->get('forbiddenlist', []));

		if (!empty($allowedlist))
		{
			foreach ($allowedlist as $allowed)
			{
				if ($context === $allowed)
				{
					return true;
				}
			}

			return false;
		}

		foreach ($forbiddenlist as $forbidden)
		{
			if ($context === $forbidden)
			{
				return false;
			}
		}

		return true;
	}

	/**
	 * Check if the context supports a specific functionality.
	 *
	 * @param   string  $context       Context to check
	 * @param   string  $functionality The functionality
	 *
	 * @return  boolean
	 */
	protected function checkExtensionSupport($context, $functionality)
	{
		$parts = explode('.', $context);

		$component = $this->app->bootComponent($parts[0]);

		if (!$component instanceof WorkflowServiceInterface
			|| !$component->isWorkflowActive($context)
			|| !$component->supportFunctionality($functionality, $context))
		{
			return false;
		}

		return true;
	}

}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

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