Your IP : 216.73.216.182


Current Path : /var/www/html/plugins/system/registrationredirect/src/Extension/
Upload File :
Current File : /var/www/html/plugins/system/registrationredirect/src/Extension/RegistrationRedirect.php

<?php
/**
 * @package        Joomla
 * @subpackage     Membership Pro
 * @author         Tuan Pham Ngoc
 * @copyright      Copyright (C) 2012 - 2026 Ossolution Team
 * @license        GNU/GPL, see LICENSE.php
 */

namespace JoomDonation\MembershipPro\Plugin\System\RegistrationRedirect\Extension;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Mail\MailHelper;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\CMS\Router\Route;
use Joomla\Database\DatabaseAwareTrait;
use Joomla\Event\DispatcherInterface;
use Joomla\Event\Event;
use Joomla\Event\SubscriberInterface;

defined('_JEXEC') or die;

class RegistrationRedirect extends CMSPlugin implements SubscriberInterface
{
	use DatabaseAwareTrait;

	public static function getSubscribedEvents(): array
	{
		return [
			'onAfterRoute' => 'onAfterRoute',
		];
	}

	/**
	 * Constructor.
	 *
	 * @param   DispatcherInterface  $dispatcher  The dispatcher
	 * @param   array                $config      An optional associative array of configuration settings
	 */
	public function __construct(DispatcherInterface $dispatcher, array $config)
	{
		parent::__construct($dispatcher, $config);
	}

	/**
	 * Register listeners
	 *
	 * @return void
	 */
	public function registerListeners()
	{
		if (!ComponentHelper::isEnabled('com_osmembership'))
		{
			return;
		}

		if (!$this->getApplication()->isClient('site'))
		{
			return;
		}

		parent::registerListeners();
	}

	/**
	 * Redirect users to Membership Pro when someone tries to register for other extensions
	 *
	 * @return void
	 */
	public function onAfterRoute(Event $event): void
	{
		// Require library + register autoloader
		require_once JPATH_ADMINISTRATOR . '/components/com_osmembership/loader.php';

		$app    = $this->getApplication();
		$input  = $app->getInput();
		$option = $input->getCmd('option');
		$task   = $input->getCmd('task');
		$view   = $input->getCmd('view');
		$layout = $input->getCmd('layout', 'default');

		// Registration redirect
		if (($option == 'com_users' && $view == 'registration' && $layout == 'default' && empty($task))
			|| ($option == 'com_comprofiler' && ($task == 'registers' || $view == 'registers'))
			|| ($option == 'com_community' && $view == 'register')
			|| ($option == 'com_users' && $task == 'registration.register')
		)
		{
			$url = $this->params->get('redirect_url', \OSMembershipHelper::getViewUrl(['categories', 'plans', 'plan', 'register']));

			if (!$url)
			{
				$Itemid = \OSMembershipHelper::getItemid();
				$url    = Route::_('index.php?option=com_osmembership&view=plans&Itemid=' . $Itemid);
			}

			$app->redirect($url);
		}

		// In case users enter email to login, we can convert it to username if needed
		$config = \OSMembershipHelper::getConfig();

		if (!empty($config->use_email_as_username) && $option == 'com_users' && $task == 'user.login')
		{
			$method   = $input->getMethod();
			$username = $input->$method->get('username', '', 'USERNAME');

			if (MailHelper::isEmailAddress($username))
			{
				$db    = $this->getDatabase();
				$query = $db->getQuery(true)
					->select('*')
					->from('#__users')
					->where('(username = ' . $db->quote($username) . ' OR email=' . $db->quote($username) . ')');
				$db->setQuery($query);
				$user = $db->loadObject();

				if ($user && ($user->username != $username))
				{
					$input->$method->set('username', $user->username);
				}
			}
		}
	}
}