Adding Location as required field at registration

Get help with installation and running phpBB 3.0.x here. Please do not post bug reports, feature requests, or MOD-related questions here.
Suggested Hosts
Forum rules
END OF SUPPORT: 1 January 2017 (announcement)
moifest
Registered User
Posts: 251
Joined: Tue Nov 06, 2007 4:58 pm

Adding Location as required field at registration

Post by moifest » Fri Nov 23, 2007 3:20 pm

How can I make Location appear on the registration form, have its entered value added to the database with the users other details and make it required?

Thanks in advance

UrbanIntensity
Registered User
Posts: 14
Joined: Mon Jul 11, 2005 1:50 am
Contact:

Re: Adding Location as required field at registration

Post by UrbanIntensity » Sun Nov 25, 2007 6:22 am

I am interested knowing how to do this as well, although I would like to do it with the Interest field in order to help differentiate legitimate users from spammers.

moifest
Registered User
Posts: 251
Joined: Tue Nov 06, 2007 4:58 pm

Re: Adding Location as required field at registration

Post by moifest » Sat Dec 01, 2007 7:17 pm

I ended up doing this the long winded but possibly easiest way in the end.

Added new custom profile field for Location, set it as required at registration.

Removed the original location field from viewtopic and profile edit/view pages.


Went into my old phpBB2 database and ran a search in the phpbb_users table selecting only the user_id and user_loc fields. Exporting the data as sql and pasting the info into the insert sql for the phpBB3 database just changing the values of the field names the data was to be inserted too. Worked a treat and means anyone already registered with a location has it showing in the phpBB£ forum via the custom profile and any new members simply enter the info into the field at registration 8-)

stalhamre
Registered User
Posts: 10
Joined: Thu Feb 13, 2003 8:43 am
Location: Haninge, Sweden
Contact:

Re: Adding Location as required field at registration

Post by stalhamre » Mon Dec 17, 2007 2:04 pm

I´m wondering the same thing (about making location appear on the registration page and make the field mandatory)

Any ideas? Sorry for not being a php-hacker :lol:

Using phpBB 3.0.0 / prosilver / swedish languagepack

Regards

Martin Stålhamre

eben80
Registered User
Posts: 35
Joined: Thu Apr 26, 2007 11:17 am

Re: Adding Location as required field at registration

Post by eben80 » Fri Dec 21, 2007 8:40 am

I would like to know this as well please..... or would it be under MODS?

PS:GREAT WORK with the new release. You can all be proud.

MichaelWagner
Registered User
Posts: 105
Joined: Fri Nov 24, 2006 6:51 am

Re: Adding Location as required field at registration

Post by MichaelWagner » Mon Dec 24, 2007 4:26 am

You don't need a mod to add a custom field. The functionality is built into V3.

In the Admin Control Panel, select Users and Groups (at the top), then Custom Profile Fields (on the left), then fill in the blanks.

My question, though, is are the resulting fields searchable? I can't see how, since they don't seem to show up in the Find a member screen.

eben80
Registered User
Posts: 35
Joined: Thu Apr 26, 2007 11:17 am

Re: Adding Location as required field at registration

Post by eben80 » Wed Jan 02, 2008 11:47 am

Not really... you can add extra custom fields but you cannot change the existing location field to required ... which is what I want to do. Any help?

MichaelWagner
Registered User
Posts: 105
Joined: Fri Nov 24, 2006 6:51 am

Re: Adding Location as required field at registration

Post by MichaelWagner » Wed Jan 02, 2008 12:52 pm

Sorry, I misunderstood. I didn't realize you wanted to take an existing field and make it manditory.

milosbabic
Registered User
Posts: 1
Joined: Tue Jan 22, 2008 11:29 am

Re: Adding Location as required field at registration

Post by milosbabic » Tue Jan 22, 2008 11:38 am

You have to edit some files in order to get field "location" as mandatory during registration process.

In attachment you'll find those files.

includes/ucp/ucp_register.php
styles/subsilver2/template/ucp_register.html
styles/prosilver/template/ucp_register.html


Regards,
mb

PS. if you have other skins, you have to change every template/ucp_register.html
Attachments
files.tar.gz
includes/ucp/ucp_register.php
styles/subsilver2/template/ucp_register.html
styles/prosilver/template/ucp_register.html
(6.34 KiB) Downloaded 467 times

eben80
Registered User
Posts: 35
Joined: Thu Apr 26, 2007 11:17 am

Re: Adding Location as required field at registration

Post by eben80 » Tue Jan 22, 2008 12:51 pm

Thanks a lot. I'll give those files a go.

I M lost
Registered User
Posts: 23
Joined: Mon Feb 04, 2008 1:49 pm

Re: Adding Location as required field at registration

Post by I M lost » Tue Feb 26, 2008 6:46 pm

Credit to milosbabic for this. These are just exerts from his files that I downloaded. I figured it would be easier for the next guy if I put it up like this, rather than trying to pilfer though the files like I had to do.



In file:
includes/ucp/ucp_register.php

Find:

Code: Select all

		$data = array(
			'username'			=> utf8_normalize_nfc(request_var('username', '', true)),
			'new_password'		=> request_var('new_password', '', true),
Add After:

Code: Select all

// Location Required For Registration
			'location'			=> request_var('location', '', true),
// Location Required For Registration

Find:

Code: Select all

				'email'				=> array(
					array('string', false, 6, 60),
					array('email')),
				'email_confirm'		=> array('string', false, 6, 60),
Add After:

Code: Select all

// Location Required For Registration
				'location'			=> array('string', false, 5, 60),
// Location Required For Registration

Find:

Code: Select all

				$user_row = array(
					'username'				=> $data['username'],
					'user_password'			=> phpbb_hash($data['new_password']),
					'user_email'			=> $data['email'],
Add After:

Code: Select all

// Location Required For Registration
					'user_from'				=> $data['location'],
// Location Required For Registration

Find:

Code: Select all

		$template->assign_vars(array(
			'ERROR'				=> (sizeof($error)) ? implode('<br />', $error) : '',
			'USERNAME'			=> $data['username'],
			'PASSWORD'			=> $data['new_password'],
			'PASSWORD_CONFIRM'	=> $data['password_confirm'],
Add After:

Code: Select all

// Location Required For Registration
			'LOCATION'			=> $data['location'],
// Location Required For Registration

---------------------------------------------------------------------------------------------------------------------------------


In File:
styles/subsilver2/template/ucp_register.html
And/Or
styles/prosilver/template/ucp_register.html

Find:

Code: Select all

	<dl>
		<dt><label for="new_password">{L_PASSWORD}:</label><br /><span>{L_PASSWORD_EXPLAIN}</span></dt>
		<dd><input type="password" tabindex="4" name="new_password" id="new_password" size="25" value="{PASSWORD}" class="inputbox autowidth" title="{L_NEW_PASSWORD}" /></dd>
	</dl>
	<dl>
		<dt><label for="password_confirm">{L_CONFIRM_PASSWORD}:</label></dt>
		<dd><input type="password" tabindex="5" name="password_confirm" id="password_confirm" size="25" value="{PASSWORD_CONFIRM}" class="inputbox autowidth" title="{L_CONFIRM_PASSWORD}" /></dd>
	</dl>
Add After:

Code: Select all

	<dl>
		<dt><label for="location">{L_LOCATION}:</label><br /></dt>
		<dd><input type="text" tabindex="4" name="location" id="location" size="25" value="{LOCATION}" class="inputbox autowidth" title="{LOCATION}" /></dd>
	</dl>

Hope it helps.

napobo3
Registered User
Posts: 14
Joined: Wed Nov 21, 2007 9:51 pm

Re: Adding Location as required field at registration

Post by napobo3 » Tue Feb 26, 2008 10:35 pm

Thanks! In my styles/subsilver2/template/ucp_register.html
After

Code: Select all

<tr>
        <td class="row1"><b class="genmed">{L_CONFIRM_PASSWORD}: </b></td>
        <td class="row2"><input class="post" type="password" name="password_confirm" size="25" value="{PASSWORD_CONFIRM}" /></td>
</tr>
I added :

Code: Select all

<tr>
        <td class="row1"><b class="genmed">{L_LOCATION}: </b></td>
        <td class="row2"><input class="post" type="text" name="location" size="25" value="{LOCATION}" /></td>
</tr>

Daniel_L
Registered User
Posts: 113
Joined: Fri Jan 04, 2008 3:01 pm

Re: Adding Location as required field at registration

Post by Daniel_L » Tue Mar 04, 2008 8:17 pm

Well, it took 12 members to register before I notice that the profil page don't show up in the registration process. I was curious why nobody was writing the Location where they live. Well I guess I know now.

I will have to write something like Please after your registration, would you mind to fill in your profil page with some basic info only because there is no option to present it to you at registration time.

I think an option should be added to ask to fill in the Profil page at the same time of the Registration precess.

My 2 cents.
Successfully running phpBB 3 on an association website since Feb 25th of 2008.
I'm a voluntarily webmaster.

User avatar
Barry 441
Registered User
Posts: 215
Joined: Tue Sep 14, 2004 5:09 pm
Location: Colrain, Massachusetts

Re: Adding Location as required field at registration

Post by Barry 441 » Sat Mar 22, 2008 3:02 pm

Just gave this a shot and when I click the button to agree to the registration terms I am getting this error.

Code: Select all

\includes\template.php(175) : eval()'d code on line 69
Here is my template.php: Note: I did purge the cache after applying the edits to the files.

Code: Select all

<?php
/**
*
* @package phpBB3
* @version $Id: template.php,v 1.116 2007/10/04 12:02:03 acydburn Exp $
* @copyright (c) 2005 phpBB Group, sections (c) 2001 ispi of Lincoln Inc
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* Base Template class.
* @package phpBB3
*/
class template
{
	/** variable that holds all the data we'll be substituting into
	* the compiled templates. Takes form:
	* --> $this->_tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value
	* if it's a root-level variable, it'll be like this:
	* --> $this->_tpldata[.][0][varname] == value
	*/
	var $_tpldata = array('.' => array(0 => array()));
	var $_rootref;

	// Root dir and hash of filenames for each template handle.
	var $root = '';
	var $cachepath = '';
	var $files = array();
	var $filename = array();

	// this will hash handle names to the compiled/uncompiled code for that handle.
	var $compiled_code = array();

	/**
	* Set template location
	* @access public
	*/
	function set_template()
	{
		global $phpbb_root_path, $user;

		if (file_exists($phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template'))
		{
			$this->root = $phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template';
			$this->cachepath = $phpbb_root_path . 'cache/tpl_' . $user->theme['template_path'] . '_';
		}
		else
		{
			trigger_error('Template path could not be found: styles/' . $user->theme['template_path'] . '/template', E_USER_ERROR);
		}

		$this->_rootref = &$this->_tpldata['.'][0];

		return true;
	}

	/**
	* Set custom template location (able to use directory outside of phpBB)
	* @access public
	*/
	function set_custom_template($template_path, $template_name)
	{
		global $phpbb_root_path;

		$this->root = $template_path;
		$this->cachepath = $phpbb_root_path . 'cache/ctpl_' . $template_name . '_';

		return true;
	}

	/**
	* Sets the template filenames for handles. $filename_array
	* should be a hash of handle => filename pairs.
	* @access public
	*/
	function set_filenames($filename_array)
	{
		if (!is_array($filename_array))
		{
			return false;
		}

		foreach ($filename_array as $handle => $filename)
		{
			if (empty($filename))
			{
				trigger_error("template->set_filenames: Empty filename specified for $handle", E_USER_ERROR);
			}

			$this->filename[$handle] = $filename;
			$this->files[$handle] = $this->root . '/' . $filename;
		}

		return true;
	}

	/**
	* Destroy template data set
	* @access public
	*/
	function destroy()
	{
		$this->_tpldata = array('.' => array(0 => array()));
	}

	/**
	* Reset/empty complete block
	* @access public
	*/
	function destroy_block_vars($blockname)
	{
		if (strpos($blockname, '.') !== false)
		{
			// Nested block.
			$blocks = explode('.', $blockname);
			$blockcount = sizeof($blocks) - 1;

			$str = &$this->_tpldata;
			for ($i = 0; $i < $blockcount; $i++)
			{
				$str = &$str[$blocks[$i]];
				$str = &$str[sizeof($str) - 1];
			}

			unset($str[$blocks[$blockcount]]);
		}
		else
		{
			// Top-level block.
			unset($this->_tpldata[$blockname]);
		}

		return true;
	}

	/**
	* Display handle
	* @access public
	*/
	function display($handle, $include_once = true)
	{
		global $user, $phpbb_hook;

		if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once))
		{
			if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__)))
			{
				return $phpbb_hook->hook_return_result(array(__CLASS__, __FUNCTION__));
			}
		}

		if (defined('IN_ERROR_HANDLER'))
		{
			if ((E_NOTICE & error_reporting()) == E_NOTICE)
			{
				error_reporting(error_reporting() ^ E_NOTICE);
			}
		}

		if ($filename = $this->_tpl_load($handle))
		{
			($include_once) ? include_once($filename) : include($filename);
		}
		else
		{
			eval(' ?>' . $this->compiled_code[$handle] . '<?php ');
		}

		return true;
	}

	/**
	* Display the handle and assign the output to a template variable or return the compiled result.
	* @access public
	*/
	function assign_display($handle, $template_var = '', $return_content = true, $include_once = false)
	{
		ob_start();
		$this->display($handle, $include_once);
		$contents = ob_get_clean();

		if ($return_content)
		{
			return $contents;
		}

		$this->assign_var($template_var, $contents);

		return true;
	}

	/**
	* Load a compiled template if possible, if not, recompile it
	* @access private
	*/
	function _tpl_load(&$handle)
	{
		global $user, $phpEx, $config;

		$filename = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx;

		$recompile = (($config['load_tplcompile'] && @filemtime($filename) < filemtime($this->files[$handle])) || !file_exists($filename) || @filesize($filename) === 0) ? true : false;

		// Recompile page if the original template is newer, otherwise load the compiled version
		if (!$recompile)
		{
			return $filename;
		}

		global $db, $phpbb_root_path;

		if (!class_exists('template_compile'))
		{
			include($phpbb_root_path . 'includes/functions_template.' . $phpEx);
		}

		$compile = new template_compile($this);

		// If we don't have a file assigned to this handle, die.
		if (!isset($this->files[$handle]))
		{
			trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR);
		}

		// Just compile if no user object is present (happens within the installer)
		if (!$user)
		{
			$compile->_tpl_load_file($handle);
			return false;
		}

		if (isset($user->theme['template_storedb']) && $user->theme['template_storedb'])
		{
			$sql = 'SELECT *
				FROM ' . STYLES_TEMPLATE_DATA_TABLE . '
				WHERE template_id = ' . $user->theme['template_id'] . "
					AND (template_filename = '" . $db->sql_escape($this->filename[$handle]) . "'
						OR template_included " . $db->sql_like_expression($db->any_char . $this->filename[$handle] . ':' . $db->any_char) . ')';
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);

			if ($row)
			{
				do
				{
					if ($row['template_mtime'] < filemtime($phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template/' . $row['template_filename']))
					{
						if ($row['template_filename'] == $this->filename[$handle])
						{
							$compile->_tpl_load_file($handle);
						}
						else
						{
							$this->files[$row['template_filename']] = $this->root . '/' . $row['template_filename'];
							$compile->_tpl_load_file($row['template_filename']);
							unset($this->compiled_code[$row['template_filename']]);
							unset($this->files[$row['template_filename']]);
							unset($this->filename[$row['template_filename']]);
						}
					}

					if ($row['template_filename'] == $this->filename[$handle])
					{
						$this->compiled_code[$handle] = $compile->compile(trim($row['template_data']));
						$compile->compile_write($handle, $this->compiled_code[$handle]);
					}
					else
					{
						// Only bother compiling if it doesn't already exist
						if (!file_exists($this->cachepath . str_replace('/', '.', $row['template_filename']) . '.' . $phpEx))
						{
							$this->filename[$row['template_filename']] = $row['template_filename'];
							$compile->compile_write($row['template_filename'], $compile->compile(trim($row['template_data'])));
							unset($this->filename[$row['template_filename']]);
						}
					}
				}
				while ($row = $db->sql_fetchrow($result));
			}
			else
			{
				// Try to load from filesystem and instruct to insert into the styles table...
				$compile->_tpl_load_file($handle, true);
				return false;
			}
			$db->sql_freeresult($result);

			return false;
		}

		$compile->_tpl_load_file($handle);
		return false;
	}

	/**
	* Assign key variable pairs from an array
	* @access public
	*/
	function assign_vars($vararray)
	{
		foreach ($vararray as $key => $val)
		{
			$this->_rootref[$key] = $val;
		}

		return true;
	}

	/**
	* Assign a single variable to a single key
	* @access public
	*/
	function assign_var($varname, $varval)
	{
		$this->_rootref[$varname] = $varval;

		return true;
	}

	/**
	* Assign key variable pairs from an array to a specified block
	* @access public
	*/
	function assign_block_vars($blockname, $vararray)
	{
		if (strpos($blockname, '.') !== false)
		{
			// Nested block.
			$blocks = explode('.', $blockname);
			$blockcount = sizeof($blocks) - 1;

			$str = &$this->_tpldata;
			for ($i = 0; $i < $blockcount; $i++)
			{
				$str = &$str[$blocks[$i]];
				$str = &$str[sizeof($str) - 1];
			}

			$s_row_count = isset($str[$blocks[$blockcount]]) ? sizeof($str[$blocks[$blockcount]]) : 0;
			$vararray['S_ROW_COUNT'] = $s_row_count;

			// Assign S_FIRST_ROW
			if (!$s_row_count)
			{
				$vararray['S_FIRST_ROW'] = true;
			}

			// Now the tricky part, we always assign S_LAST_ROW and remove the entry before
			// This is much more clever than going through the complete template data on display (phew)
			$vararray['S_LAST_ROW'] = true;
			if ($s_row_count > 0)
			{
				unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']);
			}

			// Now we add the block that we're actually assigning to.
			// We're adding a new iteration to this block with the given
			// variable assignments.
			$str[$blocks[$blockcount]][] = $vararray;
		}
		else
		{
			// Top-level block.
			$s_row_count = (isset($this->_tpldata[$blockname])) ? sizeof($this->_tpldata[$blockname]) : 0;
			$vararray['S_ROW_COUNT'] = $s_row_count;

			// Assign S_FIRST_ROW
			if (!$s_row_count)
			{
				$vararray['S_FIRST_ROW'] = true;
			}

			// We always assign S_LAST_ROW and remove the entry before
			$vararray['S_LAST_ROW'] = true;
			if ($s_row_count > 0)
			{
				unset($this->_tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']);
			}
			
			// Add a new iteration to this block with the variable assignments we were given.
			$this->_tpldata[$blockname][] = $vararray;
		}

		return true;
	}

	/**
	* Change already assigned key variable pair (one-dimensional - single loop entry)
	*
	* An example of how to use this function:
	* {@example alter_block_array.php}
	*
	* @param	string	$blockname	the blockname, for example 'loop'
	* @param	array	$vararray	the var array to insert/add or merge
	* @param	mixed	$key		Key to search for
	*
	* array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position]
	*
	* int: Position [the position to change or insert at directly given]
	*
	* If key is false the position is set to 0
	* If key is true the position is set to the last entry
	*
	* @param	string	$mode		Mode to execute (valid modes are 'insert' and 'change')
	*
	*	If insert, the vararray is inserted at the given position (position counting from zero).
	*	If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value).
	*
	* Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array)
	* and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars)
	*
	* @return bool false on error, true on success
	* @access public
	*/
	function alter_block_array($blockname, $vararray, $key = false, $mode = 'insert')
	{
		if (strpos($blockname, '.') !== false)
		{
			// Nested blocks are not supported
			return false;
		}
		
		// Change key to zero (change first position) if false and to last position if true
		if ($key === false || $key === true)
		{
			$key = ($key === false) ? 0 : sizeof($this->_tpldata[$blockname]);
		}

		// Get correct position if array given
		if (is_array($key))
		{
			// Search array to get correct position
			list($search_key, $search_value) = @each($key);

			$key = NULL;
			foreach ($this->_tpldata[$blockname] as $i => $val_ary)
			{
				if ($val_ary[$search_key] === $search_value)
				{
					$key = $i;
					break;
				}
			}

			// key/value pair not found
			if ($key === NULL)
			{
				return false;
			}
		}

		// Insert Block
		if ($mode == 'insert')
		{
			// Make sure we are not exceeding the last iteration
			if ($key >= sizeof($this->_tpldata[$blockname]))
			{
				$key = sizeof($this->_tpldata[$blockname]);
				unset($this->_tpldata[$blockname][($key - 1)]['S_LAST_ROW']);
				$vararray['S_LAST_ROW'] = true;
			}
			else if ($key === 0)
			{
				unset($this->_tpldata[$blockname][0]['S_FIRST_ROW']);
				$vararray['S_FIRST_ROW'] = true;
			}

			// Re-position template blocks
			for ($i = sizeof($this->_tpldata[$blockname]); $i > $key; $i--)
			{
				$this->_tpldata[$blockname][$i] = $this->_tpldata[$blockname][$i-1];
				$this->_tpldata[$blockname][$i]['S_ROW_COUNT'] = $i;
			}

			// Insert vararray at given position
			$vararray['S_ROW_COUNT'] = $key;
			$this->_tpldata[$blockname][$key] = $vararray;

			return true;
		}

		// Which block to change?
		if ($mode == 'change')
		{
			if ($key == sizeof($this->_tpldata[$blockname]))
			{
				$key--;
			}

			$this->_tpldata[$blockname][$key] = array_merge($this->_tpldata[$blockname][$key], $vararray);
			return true;
		}

		return false;
	}

	/**
	* Include a separate template
	* @access private
	*/
	function _tpl_include($filename, $include = true)
	{
		$handle = $filename;
		$this->filename[$handle] = $filename;
		$this->files[$handle] = $this->root . '/' . $filename;

 		$filename = $this->_tpl_load($handle);

		if ($include)
		{
			global $user;

			if ($filename)
			{
				include($filename);
				return;
			}
			eval(' ?>' . $this->compiled_code[$handle] . '<?php ');
		}
	}
}

?>
Keep it fun.
StacyRacing.com

TheExoticFishDOTcom
I've Been Banned!
Posts: 88
Joined: Sun Mar 23, 2008 8:11 pm
Contact:

Re: Adding Location as required field at registration

Post by TheExoticFishDOTcom » Wed Mar 26, 2008 6:14 pm

Can someone look at my forum. I tried this MOD and for some reason Location is at the top of the page...

http://theexoticfish.com/ucp.php?mode=register&coppa=0

Locked

Return to “[3.0.x] Support Forum”

cron