Current File : /home/pacjaorg/www/km/components/com_djclassifieds/controllers/registration.php
<?php
/**
 * @package DJ-Classifieds
 * @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
 * @license http://www.gnu.org/licenses GNU/GPL
 * @author url: http://dj-extensions.com
 * @author email contact@dj-extensions.com
 */

defined('_JEXEC') or die;

class DJClassifiedsControllerRegistration extends JControllerLegacy
{	
	public function checkUsername()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$filterInput = Joomla\CMS\Filter\InputFilter::getInstance();

		$username = $app->input->getVar('username');
		$user_id = $app->input->getInt('user_id', 0);
		
		DJClassifiedsTheme::loadLanguage('com_users', null);

        if(preg_match('#[<>"\'%;()&\\\\]|\\.\\./#', $username) ||  Joomla\String\StringHelper::strlen($username) < 2 || $filterInput->clean($username, 'TRIM') !== $username || Joomla\String\StringHelper::strlen($username) > 150){
            echo JText::sprintf('JLIB_DATABASE_ERROR_VALID_AZ09', 2);
		}else{
			$query = "SELECT count(id) FROM #__users WHERE username=".$db->q($username)." ".($user_id ? "AND id!=".$user_id." " : "");;
			$db->setQuery($query);
			$u_exist = $db->loadResult();
			if($u_exist){
				echo JText::_('COM_DJCLASSIFIEDS_REGISTER_USERNAME_MESSAGE');
			}
		}
		
		$app->close();
	}
	
	public function checkEmail()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$email = $app->input->getVar('email');
		$user_id = $app->input->getInt('user_id', 0);

		DJClassifiedsTheme::loadLanguage('com_users', null);
	
		$query = "SELECT count(id) FROM #__users WHERE email=".$db->q($email)." ".($user_id ? "AND id!=".$user_id." " : "");
		$db->setQuery($query);
		$u_exist = $db->loadResult();
		if(!filter_var($email, FILTER_VALIDATE_EMAIL) || $u_exist){
			echo JText::_('COM_DJCLASSIFIEDS_PROFILE_EMAIL1_MESSAGE');
		}
		$app->close();
	}
	
	public function checkPassword()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();

		DJClassifiedsTheme::loadLanguage('com_users', null);
		
		JModelLegacy::addIncludePath(JPATH_ROOT . '/components/com_users/models/','RegistrationModel');
		JForm::addFormPath(JPATH_ROOT.'/components/com_users/models/forms');
		JForm::addFormPath(JPATH_ROOT.'/components/com_users/forms');
		$users_model = $this->getModel($name = 'Registration', $prefix = 'UsersModel'); 

		$requestData = array();
		$requestData['password1'] = $app->input->getStr('password1');

		$form = $users_model->getForm();

		$data = $users_model->validate($form, $requestData);
		if($data === false){
			$errors	= $users_model->getErrors();
			for($i = 0, $n = count($errors); $i < $n; $i++){
				$err_text = $errors[$i] instanceof Exception ? $errors[$i]->getMessage() : $errors[$i];
				if(strpos($err_text, JText::_('COM_DJCLASSIFIEDS_PROFILE_PASSWORD1_LABEL')) !== false){
					echo DJClassifiedsAccess::passwordRuleTest($requestData['password1']);
					break;
				}
			}
		}
		
		$app->close();
	}
	
	function save()
	{
		JTable::addIncludePath(JPATH_ROOT.'/administrator/components/com_djclassifieds/tables');
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$par = $app->getParams('com_djclassifieds');

		$app->setUserState('djcf.registration.data', $app->input->post->getArray());

		$row = JTable::getInstance('Profiles', 'DJClassifiedsTable');
		$Itemid	= $app->input->getInt('Itemid');

		DJClassifiedsTheme::loadLanguage('com_users', null);
		
		// Check for request forgeries.
		//JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
		
		// If registration is disabled - Redirect to login page.
		if (JComponentHelper::getParams('com_users')->get('allowUserRegistration') == 0)
		{
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false));		
			return false;
		}
		
		JModelLegacy::addIncludePath(JPATH_ROOT . '/components/com_users/models/','RegistrationModel');
		JForm::addFormPath(JPATH_ROOT.'/components/com_users/models/forms');
		JForm::addFormPath(JPATH_ROOT.'/components/com_users/forms');
		JForm::addFieldPath(JPATH_ROOT . '/components/com_users/models/fields');
		$users_model = $this->getModel($name = 'Registration', $prefix = 'UsersModel'); 
		
		// Get the user data.
		$requestData = $app->input->post->get('jform', array(), 'array');

		// support form without email confrm
		$requestData['email2'] = isset($requestData['email2']) ? $requestData['email2'] : $requestData['email1'];
		// support form without password confrm
		$requestData['password2'] = isset($requestData['password2']) ? $requestData['password2'] : $requestData['password1'];
		// support form without name/username
		if(isset($requestData['name']) && isset($requestData['username'])){
			$u_name = $requestData['name'];
			$u_username = $requestData['username'];
		}elseif(isset($requestData['name']) && !isset($requestData['username'])){
			//$u_name = $u_username = $requestData['name'];
			$u_name = $requestData['name'];
			$u_username = $requestData['email1'];
		}elseif(isset($requestData['username']) && !isset($requestData['name'])){
			$u_name = $u_username = $requestData['username'];
		}else{
			$u_name = $u_username = $requestData['email1'];
		}
		$requestData['name'] = $u_name;
		$requestData['username'] = $u_username;

		// Validate the posted data.
		$form = $users_model->getForm();
		
		if (!$form)
		{
			//JError::raiseError(500, $users_model->getError());
			throw new Exception($users_model->getError());
			return false;
		}
		
		// core 'User - Profile' plugin's conflict workaround
		$form->removeGroup('profile');

		// DJ-Catalog2 plugin's conflict workaround
		$form->removeGroup('djcatalog2profile');

		// core 'System - Privacy Consent' plugin's conflict workaround
		$form->removeGroup('privacyconsent');

		// core User Fields conflict workaround
		$form->removeGroup('com_fields');

		// core 'User - Terms' plugin's conflict workaround
		$form->removeGroup('terms');
		
		$app->triggerEvent('onBeforeValidateDJClassifiedsSaveUser', array(&$users_model, &$requestData));
		
		$form->removeField('captcha');
		$data = $users_model->validate($form, $requestData);
		
		$app->triggerEvent('onBeforeDJClassifiedsSaveUser', array(&$users_model, &$data));
		
		if(!DJClassifiedsAccess::isCaptchaValid()){
			$data = false;
			// $users_model->setError(JText::_('COM_DJCLASSIFIEDS_INVALID_CODE'));
		}
		
		// Check for validation errors.
		if ($data === false)
		{
			// Get the validation messages.
			$errors	= $users_model->getErrors();

			if($errors){
				// Push up to three validation messages out to the user.
				for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++)
				{
					if ($errors[$i] instanceof Exception)
					{
						$app->enqueueMessage($errors[$i]->getMessage(), 'warning');
					}
					else
					{
						$app->enqueueMessage($errors[$i], 'warning');
					}
				}
			}

			// Save the data in the session.
			$app->setUserState('com_users.registration.data', $requestData);

			// Redirect back to the registration screen.
			$this->setRedirect(JRoute::_('index.php?option=com_djclassifieds&view=registration&Itemid='.$Itemid, false));

			return false;
		}
		
		if($par->get('gdpr_agreement',1)>0){
			$app->input->set('gdpr_privacy_policy_checkbox',1); 
		}
		
		// Attempt to save the data.
		$return	= $users_model->register($data);

		// Check for errors.
		if ($return === false)
		{
			// Save the data in the session.
			$app->setUserState('com_users.registration.data', $data);

			// Redirect back to the edit screen.
			$this->setMessage($users_model->getError(), 'warning');
			$this->setRedirect(JRoute::_('index.php?option=com_djclassifieds&view=registration&Itemid='.$Itemid, false));

			return false;
		}

		$username = $db->Quote($db->escape($data['username']), true);
		$query = "SELECT id FROM #__users u WHERE u.username=".$username;
		$db->setQuery($query);
		$user_id = $db->loadResult();

		$row->bind($app->input->post->getArray());

		$row->user_id = $user_id;

		$row->region_id = DJClassifiedsTheme::getIdFromTree($app->input->getVar('regions'));

		if(($row->region_id || $row->address) && (($row->latitude=='0.000000000000000' && $row->longitude=='0.000000000000000') || (!$row->latitude && !$row->longitude))){
			if($row->post_code){
				$loc_coord = DJClassifiedsGeocode::getLocationPostCode($row->post_code, $row->address, $row->region_id);
			}else{
				$loc_coord = DJClassifiedsGeocode::getLocation($row->address, $row->region_id);
			}
			if(!empty($loc_coord)){
				$row->latitude = $loc_coord['lat'];
				$row->longitude = $loc_coord['lng'];
			}
		}

		$row->latitude = $row->latitude ? $row->latitude : 0;
		$row->longitude = $row->longitude ? $row->longitude : 0;

		if(!$row->store()){
			throw new Exception($row->getError());
		}

		$group_id = $app->input->getInt('group_id',0);
		
		if($group_id){
			$query = "SELECT * FROM #__djcf_fields_groups WHERE id=".$group_id." AND published=1 LIMIT 1";
			$db->setQuery($query);
			$group = $db->loadObject();
			if($group->groups_assignment){
				$ug_arr = explode(',', $group->groups_assignment);
				foreach($ug_arr as $ug){
					JUserHelper::addUserToGroup($user_id, $ug);
				}
			}
		}
									
		$query = "SELECT * FROM #__djcf_fields WHERE source=2";
		$db->setQuery($query);
		$fields_list = $db->loadObjectList();
		
		DJClassifiedsField::saveFieldsValues($fields_list, $user_id);
				
		DJClassifiedsImage::saveImage('profile', $user_id, $par->get('profile_img_path','/components/com_djclassifieds/images/profile/'), $app->input->files->get('new_avatar'), null, array('th' => array('w' => $par->get('profth_width',120), 'h' => $par->get('profth_height',120)), 'ths' => array('w' => $par->get('prof_smallth_width',50), 'h' => $par->get('prof_smallth_height',50))), $par->get('img_maxsize', 0), $par->get('watermark',0));
		
		// Flush the data from the session.
		$app->setUserState('com_users.registration.data', null);
		$app->setUserState('djcf.registration.data', null);

		// Redirect to the profile screen.
		if ($return === 'adminactivate')
		{
			$this->setMessage(JText::_('COM_DJCLASSIFIEDS_REGISTRATION_COMPLETE_VERIFY'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false));
		}
		elseif ($return === 'useractivate')
		{
			$this->setMessage(JText::_('COM_DJCLASSIFIEDS_REGISTRATION_COMPLETE_ACTIVATE'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false));
		}
		else
		{
			$this->setMessage(JText::_('COM_DJCLASSIFIEDS_REGISTRATION_SAVE_SUCCESS'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login', false));
		}

		if($par->get('registration_redirect','0')){
			$this->setRedirect(JRoute::_('index.php?Itemid='.$par->get('registration_redirect','0'), false));
		}

		$app->triggerEvent('onAfterDJClassifiedsSaveUser', array(&$data, $user_id));
		
		return true;
	}

	public function getProfileFields()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		
		$group_id = $app->input->getInt('group_id', 0);

		$query = $db->getQuery(true);
		$query->select(array('f.*'))
			->from('#__djcf_fields f')
			->where('f.source = 2')
			->where('f.published = 1')
			->where('f.edition_blocked = 0')
			->where('(f.group_id = "0" OR CONCAT(",",f.group_id,",") LIKE "%,'.$group_id.',%")')
			->where('f.in_registration = 1')
			->order('f.ordering');

		$app->triggerEvent('onDJClassifiedsGetFormFieldsQuery', array(&$query, 'registration'));

		$db->setQuery($query);
		$fields_list = $db->loadObjectList();
							
		foreach($fields_list as $f){
			DJClassifiedsField::setFieldDefaultValue($f);

			echo DJClassifiedsField::renderFormField($f, 0, $app->getUserState('djcf.registration.data'));
		}

		$app->close();
	}
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

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