mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00:00
Merge remote-tracking branch 'github-nickvergessen/ticket/11201' into develop
* github-nickvergessen/ticket/11201: (50 commits) [ticket/11201] Remove empty calls section from .yml [ticket/11201] Split template file into multiple files [ticket/11201] Remove dependency from types on the manager [ticket/11201] Rename profilefields class to manager [ticket/11201] Fix parameter description [ticket/11201] Use !== null, its faster [ticket/11201] Also translate profile fields in UCP and ACP [ticket/11201] Add parameters and variables to profile field class [ticket/11201] Add commas on last array entry [ticket/11201] Allow translation of profile field name and explanation [ticket/11201] Fix some variable names [ticket/11201] Add tables to constructor in tests [ticket/11201] Add a method to return the translated full name of the type [ticket/11201] Remove db depending code from field class [ticket/11201] Add variables to classes and add constructor doc blocks [ticket/11201] Update copyright in class file [ticket/11201] Add visibility and remove unused variable [ticket/11201] Add some commas at the last array entry [ticket/11201] Cast some variables to integer [ticket/11201] Inject table names rather then using constants ... Conflicts: phpBB/config/services.yml
This commit is contained in:
commit
38af79dd30
42 changed files with 3021 additions and 1811 deletions
82
phpBB/config/profilefields.yml
Normal file
82
phpBB/config/profilefields.yml
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
services:
|
||||||
|
profilefields.manager:
|
||||||
|
class: phpbb\profilefields\manager
|
||||||
|
arguments:
|
||||||
|
- @auth
|
||||||
|
- @dbal.conn
|
||||||
|
- @request
|
||||||
|
- @template
|
||||||
|
- @profilefields.type_collection
|
||||||
|
- @user
|
||||||
|
- %tables.profile_fields%
|
||||||
|
- %tables.profile_fields_language%
|
||||||
|
- %tables.profile_fields_data%
|
||||||
|
|
||||||
|
profilefields.lang_helper:
|
||||||
|
class: phpbb\profilefields\lang_helper
|
||||||
|
arguments:
|
||||||
|
- @dbal.conn
|
||||||
|
- %tables.profile_fields_options_language%
|
||||||
|
|
||||||
|
profilefields.type_collection:
|
||||||
|
class: phpbb\di\service_collection
|
||||||
|
arguments:
|
||||||
|
- @service_container
|
||||||
|
tags:
|
||||||
|
- { name: service_collection, tag: profilefield.type }
|
||||||
|
|
||||||
|
profilefields.type.bool:
|
||||||
|
class: phpbb\profilefields\type\type_bool
|
||||||
|
arguments:
|
||||||
|
- @profilefields.lang_helper
|
||||||
|
- @request
|
||||||
|
- @template
|
||||||
|
- @user
|
||||||
|
tags:
|
||||||
|
- { name: profilefield.type }
|
||||||
|
|
||||||
|
profilefields.type.date:
|
||||||
|
class: phpbb\profilefields\type\type_date
|
||||||
|
arguments:
|
||||||
|
- @request
|
||||||
|
- @template
|
||||||
|
- @user
|
||||||
|
tags:
|
||||||
|
- { name: profilefield.type }
|
||||||
|
|
||||||
|
profilefields.type.dropdown:
|
||||||
|
class: phpbb\profilefields\type\type_dropdown
|
||||||
|
arguments:
|
||||||
|
- @profilefields.lang_helper
|
||||||
|
- @request
|
||||||
|
- @template
|
||||||
|
- @user
|
||||||
|
tags:
|
||||||
|
- { name: profilefield.type }
|
||||||
|
|
||||||
|
profilefields.type.int:
|
||||||
|
class: phpbb\profilefields\type\type_int
|
||||||
|
arguments:
|
||||||
|
- @request
|
||||||
|
- @template
|
||||||
|
- @user
|
||||||
|
tags:
|
||||||
|
- { name: profilefield.type }
|
||||||
|
|
||||||
|
profilefields.type.string:
|
||||||
|
class: phpbb\profilefields\type\type_string
|
||||||
|
arguments:
|
||||||
|
- @request
|
||||||
|
- @template
|
||||||
|
- @user
|
||||||
|
tags:
|
||||||
|
- { name: profilefield.type }
|
||||||
|
|
||||||
|
profilefields.type.text:
|
||||||
|
class: phpbb\profilefields\type\type_text
|
||||||
|
arguments:
|
||||||
|
- @request
|
||||||
|
- @template
|
||||||
|
- @user
|
||||||
|
tags:
|
||||||
|
- { name: profilefield.type }
|
|
@ -9,6 +9,7 @@ imports:
|
||||||
- { resource: console.yml }
|
- { resource: console.yml }
|
||||||
- { resource: mimetype_guessers.yml }
|
- { resource: mimetype_guessers.yml }
|
||||||
- { resource: passwords.yml }
|
- { resource: passwords.yml }
|
||||||
|
- { resource: profilefields.yml }
|
||||||
|
|
||||||
services:
|
services:
|
||||||
acl.permissions:
|
acl.permissions:
|
||||||
|
|
|
@ -10,6 +10,10 @@ parameters:
|
||||||
tables.modules: %core.table_prefix%modules
|
tables.modules: %core.table_prefix%modules
|
||||||
tables.notification_types: %core.table_prefix%notification_types
|
tables.notification_types: %core.table_prefix%notification_types
|
||||||
tables.notifications: %core.table_prefix%notifications
|
tables.notifications: %core.table_prefix%notifications
|
||||||
|
tables.profile_fields: %core.table_prefix%profile_fields
|
||||||
|
tables.profile_fields_data: %core.table_prefix%profile_fields_data
|
||||||
|
tables.profile_fields_options_language: %core.table_prefix%profile_fields_lang
|
||||||
|
tables.profile_fields_language: %core.table_prefix%profile_lang
|
||||||
tables.posts: %core.table_prefix%posts
|
tables.posts: %core.table_prefix%posts
|
||||||
tables.topics: %core.table_prefix%topics
|
tables.topics: %core.table_prefix%topics
|
||||||
tables.user_notifications: %core.table_prefix%user_notifications
|
tables.user_notifications: %core.table_prefix%user_notifications
|
||||||
|
|
|
@ -24,16 +24,16 @@ class acp_profile
|
||||||
|
|
||||||
var $edit_lang_id;
|
var $edit_lang_id;
|
||||||
var $lang_defs;
|
var $lang_defs;
|
||||||
|
protected $type_collection;
|
||||||
|
|
||||||
function main($id, $mode)
|
function main($id, $mode)
|
||||||
{
|
{
|
||||||
global $config, $db, $user, $auth, $template, $cache;
|
global $config, $db, $user, $auth, $template, $cache;
|
||||||
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
|
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
|
||||||
global $request;
|
global $request, $phpbb_container;
|
||||||
|
|
||||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||||
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
||||||
include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
|
||||||
|
|
||||||
$user->add_lang(array('ucp', 'acp/profile'));
|
$user->add_lang(array('ucp', 'acp/profile'));
|
||||||
$this->tpl_name = 'acp_profile';
|
$this->tpl_name = 'acp_profile';
|
||||||
|
@ -50,17 +50,8 @@ class acp_profile
|
||||||
trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define some default values for each field type
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
$default_values = array(
|
$this->type_collection = $phpbb_container->get('profilefields.type_collection');
|
||||||
FIELD_STRING => array('field_length' => 10, 'field_minlen' => 0, 'field_maxlen' => 20, 'field_validation' => '.*', 'field_novalue' => '', 'field_default_value' => ''),
|
|
||||||
FIELD_TEXT => array('field_length' => '5|80', 'field_minlen' => 0, 'field_maxlen' => 1000, 'field_validation' => '.*', 'field_novalue' => '', 'field_default_value' => ''),
|
|
||||||
FIELD_INT => array('field_length' => 5, 'field_minlen' => 0, 'field_maxlen' => 100, 'field_validation' => '', 'field_novalue' => 0, 'field_default_value' => 0),
|
|
||||||
FIELD_DATE => array('field_length' => 10, 'field_minlen' => 10, 'field_maxlen' => 10, 'field_validation' => '', 'field_novalue' => ' 0- 0- 0', 'field_default_value' => ' 0- 0- 0'),
|
|
||||||
FIELD_BOOL => array('field_length' => 1, 'field_minlen' => 0, 'field_maxlen' => 0, 'field_validation' => '', 'field_novalue' => 0, 'field_default_value' => 0),
|
|
||||||
FIELD_DROPDOWN => array('field_length' => 0, 'field_minlen' => 0, 'field_maxlen' => 5, 'field_validation' => '', 'field_novalue' => 0, 'field_default_value' => 0),
|
|
||||||
);
|
|
||||||
|
|
||||||
$cp = new custom_profile_admin();
|
|
||||||
|
|
||||||
// Build Language array
|
// Build Language array
|
||||||
// Based on this, we decide which elements need to be edited later and which language items are missing
|
// Based on this, we decide which elements need to be edited later and which language items are missing
|
||||||
|
@ -94,10 +85,10 @@ class acp_profile
|
||||||
// Have some fields been defined?
|
// Have some fields been defined?
|
||||||
if (isset($this->lang_defs['entry']))
|
if (isset($this->lang_defs['entry']))
|
||||||
{
|
{
|
||||||
foreach ($this->lang_defs['entry'] as $field_id => $field_ary)
|
foreach ($this->lang_defs['entry'] as $field_ident => $field_ary)
|
||||||
{
|
{
|
||||||
// Fill an array with the languages that are missing for each field
|
// Fill an array with the languages that are missing for each field
|
||||||
$this->lang_defs['diff'][$field_id] = array_diff(array_values($this->lang_defs['iso']), $field_ary);
|
$this->lang_defs['diff'][$field_ident] = array_diff(array_values($this->lang_defs['iso']), $field_ary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,6 +343,7 @@ class acp_profile
|
||||||
$this->edit_lang_id = $field_row['lang_id'];
|
$this->edit_lang_id = $field_row['lang_id'];
|
||||||
}
|
}
|
||||||
$field_type = $field_row['field_type'];
|
$field_type = $field_row['field_type'];
|
||||||
|
$profile_field = $this->type_collection[$field_type];
|
||||||
|
|
||||||
// Get language entries
|
// Get language entries
|
||||||
$sql = 'SELECT *
|
$sql = 'SELECT *
|
||||||
|
@ -375,14 +367,15 @@ class acp_profile
|
||||||
// We are adding a new field, define basic params
|
// We are adding a new field, define basic params
|
||||||
$lang_options = $field_row = array();
|
$lang_options = $field_row = array();
|
||||||
|
|
||||||
$field_type = request_var('field_type', 0);
|
$field_type = request_var('field_type', '');
|
||||||
|
|
||||||
if (!$field_type)
|
if (!isset($this->type_collection[$field_type]))
|
||||||
{
|
{
|
||||||
trigger_error($user->lang['NO_FIELD_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
trigger_error($user->lang['NO_FIELD_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
$field_row = array_merge($default_values[$field_type], array(
|
$profile_field = $this->type_collection[$field_type];
|
||||||
|
$field_row = array_merge($profile_field->get_default_option_values(), array(
|
||||||
'field_ident' => str_replace(' ', '_', utf8_clean_string(request_var('field_ident', '', true))),
|
'field_ident' => str_replace(' ', '_', utf8_clean_string(request_var('field_ident', '', true))),
|
||||||
'field_required' => 0,
|
'field_required' => 0,
|
||||||
'field_show_novalue'=> 0,
|
'field_show_novalue'=> 0,
|
||||||
|
@ -407,23 +400,6 @@ class acp_profile
|
||||||
3 => array('l_lang_name', 'l_lang_explain', 'l_lang_default_value', 'l_lang_options')
|
3 => array('l_lang_name', 'l_lang_explain', 'l_lang_default_value', 'l_lang_options')
|
||||||
);
|
);
|
||||||
|
|
||||||
// Text-based fields require the lang_default_value to be excluded
|
|
||||||
if ($field_type == FIELD_STRING || $field_type == FIELD_TEXT)
|
|
||||||
{
|
|
||||||
$exclude[1][] = 'lang_default_value';
|
|
||||||
}
|
|
||||||
|
|
||||||
// option-specific fields require lang_options to be excluded
|
|
||||||
if ($field_type == FIELD_BOOL || $field_type == FIELD_DROPDOWN)
|
|
||||||
{
|
|
||||||
$exclude[1][] = 'lang_options';
|
|
||||||
}
|
|
||||||
|
|
||||||
$cp->vars['field_ident'] = ($action == 'create' && $step == 1) ? utf8_clean_string(request_var('field_ident', $field_row['field_ident'], true)) : request_var('field_ident', $field_row['field_ident']);
|
|
||||||
$cp->vars['lang_name'] = utf8_normalize_nfc(request_var('lang_name', $field_row['lang_name'], true));
|
|
||||||
$cp->vars['lang_explain'] = utf8_normalize_nfc(request_var('lang_explain', $field_row['lang_explain'], true));
|
|
||||||
$cp->vars['lang_default_value'] = utf8_normalize_nfc(request_var('lang_default_value', $field_row['lang_default_value'], true));
|
|
||||||
|
|
||||||
// Visibility Options...
|
// Visibility Options...
|
||||||
$visibility_ary = array(
|
$visibility_ary = array(
|
||||||
'field_required',
|
'field_required',
|
||||||
|
@ -435,6 +411,13 @@ class acp_profile
|
||||||
'field_hide',
|
'field_hide',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$options = $profile_field->prepare_options_form($exclude, $visibility_ary);
|
||||||
|
|
||||||
|
$cp->vars['field_ident'] = ($action == 'create' && $step == 1) ? utf8_clean_string(request_var('field_ident', $field_row['field_ident'], true)) : request_var('field_ident', $field_row['field_ident']);
|
||||||
|
$cp->vars['lang_name'] = utf8_normalize_nfc(request_var('lang_name', $field_row['lang_name'], true));
|
||||||
|
$cp->vars['lang_explain'] = utf8_normalize_nfc(request_var('lang_explain', $field_row['lang_explain'], true));
|
||||||
|
$cp->vars['lang_default_value'] = utf8_normalize_nfc(request_var('lang_default_value', $field_row['lang_default_value'], true));
|
||||||
|
|
||||||
foreach ($visibility_ary as $val)
|
foreach ($visibility_ary as $val)
|
||||||
{
|
{
|
||||||
$cp->vars[$val] = ($submit || $save) ? request_var($val, 0) : $field_row[$val];
|
$cp->vars[$val] = ($submit || $save) ? request_var($val, 0) : $field_row[$val];
|
||||||
|
@ -442,16 +425,6 @@ class acp_profile
|
||||||
|
|
||||||
$cp->vars['field_no_view'] = request_var('field_no_view', (int) $field_row['field_no_view']);
|
$cp->vars['field_no_view'] = request_var('field_no_view', (int) $field_row['field_no_view']);
|
||||||
|
|
||||||
// A boolean field expects an array as the lang options
|
|
||||||
if ($field_type == FIELD_BOOL)
|
|
||||||
{
|
|
||||||
$options = utf8_normalize_nfc(request_var('lang_options', array(''), true));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$options = utf8_normalize_nfc(request_var('lang_options', '', true));
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the user has submitted a form with options (i.e. dropdown field)
|
// If the user has submitted a form with options (i.e. dropdown field)
|
||||||
if ($options)
|
if ($options)
|
||||||
{
|
{
|
||||||
|
@ -479,93 +452,9 @@ class acp_profile
|
||||||
{
|
{
|
||||||
$var = utf8_normalize_nfc(request_var($key, $field_row[$key], true));
|
$var = utf8_normalize_nfc(request_var($key, $field_row[$key], true));
|
||||||
|
|
||||||
// Manipulate the intended variables a little bit if needed
|
$field_data = $cp->vars;
|
||||||
if ($field_type == FIELD_DROPDOWN && $key == 'field_maxlen')
|
$var = $profile_field->get_excluded_options($key, $action, $var, $field_data, 2);
|
||||||
{
|
$cp->vars = $field_data;
|
||||||
// Get the number of options if this key is 'field_maxlen'
|
|
||||||
$var = sizeof(explode("\n", utf8_normalize_nfc(request_var('lang_options', '', true))));
|
|
||||||
}
|
|
||||||
else if ($field_type == FIELD_TEXT && $key == 'field_length')
|
|
||||||
{
|
|
||||||
if (isset($_REQUEST['rows']))
|
|
||||||
{
|
|
||||||
$cp->vars['rows'] = request_var('rows', 0);
|
|
||||||
$cp->vars['columns'] = request_var('columns', 0);
|
|
||||||
$var = $cp->vars['rows'] . '|' . $cp->vars['columns'];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$row_col = explode('|', $var);
|
|
||||||
$cp->vars['rows'] = $row_col[0];
|
|
||||||
$cp->vars['columns'] = $row_col[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ($field_type == FIELD_DATE && $key == 'field_default_value')
|
|
||||||
{
|
|
||||||
$always_now = request_var('always_now', -1);
|
|
||||||
|
|
||||||
if ($always_now == 1 || ($always_now === -1 && $var == 'now'))
|
|
||||||
{
|
|
||||||
$now = getdate();
|
|
||||||
|
|
||||||
$cp->vars['field_default_value_day'] = $now['mday'];
|
|
||||||
$cp->vars['field_default_value_month'] = $now['mon'];
|
|
||||||
$cp->vars['field_default_value_year'] = $now['year'];
|
|
||||||
$var = 'now';
|
|
||||||
$request->overwrite('field_default_value', $var, \phpbb\request\request_interface::POST);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (isset($_REQUEST['field_default_value_day']))
|
|
||||||
{
|
|
||||||
$cp->vars['field_default_value_day'] = request_var('field_default_value_day', 0);
|
|
||||||
$cp->vars['field_default_value_month'] = request_var('field_default_value_month', 0);
|
|
||||||
$cp->vars['field_default_value_year'] = request_var('field_default_value_year', 0);
|
|
||||||
$var = sprintf('%2d-%2d-%4d', $cp->vars['field_default_value_day'], $cp->vars['field_default_value_month'], $cp->vars['field_default_value_year']);
|
|
||||||
$request->overwrite('field_default_value', $var, \phpbb\request\request_interface::POST);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
list($cp->vars['field_default_value_day'], $cp->vars['field_default_value_month'], $cp->vars['field_default_value_year']) = explode('-', $var);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ($field_type == FIELD_BOOL && $key == 'field_default_value')
|
|
||||||
{
|
|
||||||
// 'field_length' == 1 defines radio buttons. Possible values are 1 or 2 only.
|
|
||||||
// 'field_length' == 2 defines checkbox. Possible values are 0 or 1 only.
|
|
||||||
// If we switch the type on step 2, we have to adjust field value.
|
|
||||||
// 1 is a common value for the checkbox and radio buttons.
|
|
||||||
|
|
||||||
// Adjust unchecked checkbox value.
|
|
||||||
// If we return or save settings from 2nd/3rd page
|
|
||||||
// and the checkbox is unchecked, set the value to 0.
|
|
||||||
if (isset($_REQUEST['step']) && !isset($_REQUEST[$key]))
|
|
||||||
{
|
|
||||||
$var = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we switch to the checkbox type but former radio buttons value was 2,
|
|
||||||
// which is not the case for the checkbox, set it to 0 (unchecked).
|
|
||||||
if ($cp->vars['field_length'] == 2 && $var == 2)
|
|
||||||
{
|
|
||||||
$var = 0;
|
|
||||||
}
|
|
||||||
// If we switch to the radio buttons but the former checkbox value was 0,
|
|
||||||
// which is not the case for the radio buttons, set it to 0.
|
|
||||||
else if ($cp->vars['field_length'] == 1 && $var == 0)
|
|
||||||
{
|
|
||||||
$var = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ($field_type == FIELD_INT && $key == 'field_default_value')
|
|
||||||
{
|
|
||||||
// Permit an empty string
|
|
||||||
if ($action == 'create' && request_var('field_default_value', '') === '')
|
|
||||||
{
|
|
||||||
$var = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$cp->vars[$key] = $var;
|
$cp->vars[$key] = $var;
|
||||||
}
|
}
|
||||||
|
@ -614,18 +503,10 @@ class acp_profile
|
||||||
{
|
{
|
||||||
$cp->vars[$key] = $$key;
|
$cp->vars[$key] = $$key;
|
||||||
}
|
}
|
||||||
else if ($key == 'l_lang_options' && $field_type == FIELD_BOOL)
|
|
||||||
{
|
|
||||||
$cp->vars[$key] = utf8_normalize_nfc(request_var($key, array(0 => array('')), true));
|
|
||||||
}
|
|
||||||
else if ($key == 'l_lang_options' && is_array($cp->vars[$key]))
|
|
||||||
{
|
|
||||||
foreach ($cp->vars[$key] as $lang_id => $options)
|
|
||||||
{
|
|
||||||
$cp->vars[$key][$lang_id] = explode("\n", $options);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
$field_data = $cp->vars;
|
||||||
|
$var = $profile_field->get_excluded_options($key, $action, $var, $field_data, 3);
|
||||||
|
$cp->vars = $field_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for general issues in every step
|
// Check for general issues in every step
|
||||||
|
@ -652,15 +533,7 @@ class acp_profile
|
||||||
$error[] = $user->lang['EMPTY_USER_FIELD_NAME'];
|
$error[] = $user->lang['EMPTY_USER_FIELD_NAME'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($field_type == FIELD_DROPDOWN && !sizeof($cp->vars['lang_options']))
|
$error = $profile_field->validate_options_on_submit($error, $cp->vars);
|
||||||
{
|
|
||||||
$error[] = $user->lang['NO_FIELD_ENTRIES'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($field_type == FIELD_BOOL && (empty($cp->vars['lang_options'][0]) || empty($cp->vars['lang_options'][1])))
|
|
||||||
{
|
|
||||||
$error[] = $user->lang['NO_FIELD_ENTRIES'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for already existing field ident
|
// Check for already existing field ident
|
||||||
if ($action != 'edit')
|
if ($action != 'edit')
|
||||||
|
@ -697,54 +570,16 @@ class acp_profile
|
||||||
|
|
||||||
$_new_key_ary = array();
|
$_new_key_ary = array();
|
||||||
|
|
||||||
|
$field_data = $cp->vars;
|
||||||
foreach ($key_ary as $key)
|
foreach ($key_ary as $key)
|
||||||
{
|
{
|
||||||
if ($field_type == FIELD_TEXT && $key == 'field_length' && isset($_REQUEST['rows']))
|
$var = $profile_field->prepare_hidden_fields($step, $key, $action, $field_data);
|
||||||
|
if ($var !== null)
|
||||||
{
|
{
|
||||||
$cp->vars['rows'] = request_var('rows', 0);
|
$_new_key_ary[$key] = $profile_field->prepare_hidden_fields($step, $key, $action, $field_data);
|
||||||
$cp->vars['columns'] = request_var('columns', 0);
|
|
||||||
$_new_key_ary[$key] = $cp->vars['rows'] . '|' . $cp->vars['columns'];
|
|
||||||
}
|
|
||||||
else if ($field_type == FIELD_DATE && $key == 'field_default_value')
|
|
||||||
{
|
|
||||||
$always_now = request_var('always_now', 0);
|
|
||||||
|
|
||||||
if ($always_now)
|
|
||||||
{
|
|
||||||
$_new_key_ary[$key] = 'now';
|
|
||||||
}
|
|
||||||
else if (isset($_REQUEST['field_default_value_day']))
|
|
||||||
{
|
|
||||||
$cp->vars['field_default_value_day'] = request_var('field_default_value_day', 0);
|
|
||||||
$cp->vars['field_default_value_month'] = request_var('field_default_value_month', 0);
|
|
||||||
$cp->vars['field_default_value_year'] = request_var('field_default_value_year', 0);
|
|
||||||
$_new_key_ary[$key] = sprintf('%2d-%2d-%4d', $cp->vars['field_default_value_day'], $cp->vars['field_default_value_month'], $cp->vars['field_default_value_year']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ($field_type == FIELD_BOOL && $key == 'l_lang_options' && isset($_REQUEST['l_lang_options']))
|
|
||||||
{
|
|
||||||
$_new_key_ary[$key] = utf8_normalize_nfc(request_var($key, array(array('')), true));
|
|
||||||
}
|
|
||||||
else if ($field_type == FIELD_BOOL && $key == 'field_default_value')
|
|
||||||
{
|
|
||||||
$_new_key_ary[$key] = request_var($key, $cp->vars[$key]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!isset($_REQUEST[$key]))
|
|
||||||
{
|
|
||||||
$var = false;
|
|
||||||
}
|
|
||||||
else if ($key == 'field_ident' && isset($cp->vars[$key]))
|
|
||||||
{
|
|
||||||
$_new_key_ary[$key]= $cp->vars[$key];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$_new_key_ary[$key] = ($field_type == FIELD_BOOL && $key == 'lang_options') ? utf8_normalize_nfc(request_var($key, array(''), true)) : utf8_normalize_nfc(request_var($key, '', true));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$cp->vars = $field_data;
|
||||||
|
|
||||||
$s_hidden_fields .= build_hidden_fields($_new_key_ary);
|
$s_hidden_fields .= build_hidden_fields($_new_key_ary);
|
||||||
}
|
}
|
||||||
|
@ -778,9 +613,7 @@ class acp_profile
|
||||||
{
|
{
|
||||||
// Create basic options - only small differences between field types
|
// Create basic options - only small differences between field types
|
||||||
case 1:
|
case 1:
|
||||||
|
$template_vars = array(
|
||||||
// Build common create options
|
|
||||||
$template->assign_vars(array(
|
|
||||||
'S_STEP_ONE' => true,
|
'S_STEP_ONE' => true,
|
||||||
'S_FIELD_REQUIRED' => ($cp->vars['field_required']) ? true : false,
|
'S_FIELD_REQUIRED' => ($cp->vars['field_required']) ? true : false,
|
||||||
'S_FIELD_SHOW_NOVALUE'=> ($cp->vars['field_show_novalue']) ? true : false,
|
'S_FIELD_SHOW_NOVALUE'=> ($cp->vars['field_show_novalue']) ? true : false,
|
||||||
|
@ -792,53 +625,18 @@ class acp_profile
|
||||||
'S_FIELD_NO_VIEW' => ($cp->vars['field_no_view']) ? true : false,
|
'S_FIELD_NO_VIEW' => ($cp->vars['field_no_view']) ? true : false,
|
||||||
|
|
||||||
'L_LANG_SPECIFIC' => sprintf($user->lang['LANG_SPECIFIC_OPTIONS'], $config['default_lang']),
|
'L_LANG_SPECIFIC' => sprintf($user->lang['LANG_SPECIFIC_OPTIONS'], $config['default_lang']),
|
||||||
'FIELD_TYPE' => $user->lang['FIELD_' . strtoupper($cp->profile_types[$field_type])],
|
'FIELD_TYPE' => $profile_field->get_name(),
|
||||||
'FIELD_IDENT' => $cp->vars['field_ident'],
|
'FIELD_IDENT' => $cp->vars['field_ident'],
|
||||||
'LANG_NAME' => $cp->vars['lang_name'],
|
'LANG_NAME' => $cp->vars['lang_name'],
|
||||||
'LANG_EXPLAIN' => $cp->vars['lang_explain'])
|
'LANG_EXPLAIN' => $cp->vars['lang_explain'],
|
||||||
);
|
);
|
||||||
|
|
||||||
// String and Text needs to set default values here...
|
$field_data = $cp->vars;
|
||||||
if ($field_type == FIELD_STRING || $field_type == FIELD_TEXT)
|
$profile_field->display_options($template_vars, $field_data);
|
||||||
{
|
$cp->vars = $field_data;
|
||||||
$template->assign_vars(array(
|
|
||||||
'S_TEXT' => ($field_type == FIELD_TEXT) ? true : false,
|
|
||||||
'S_STRING' => ($field_type == FIELD_STRING) ? true : false,
|
|
||||||
|
|
||||||
'L_DEFAULT_VALUE_EXPLAIN' => $user->lang[strtoupper($cp->profile_types[$field_type]) . '_DEFAULT_VALUE_EXPLAIN'],
|
|
||||||
'LANG_DEFAULT_VALUE' => $cp->vars['lang_default_value'])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($field_type == FIELD_BOOL || $field_type == FIELD_DROPDOWN)
|
|
||||||
{
|
|
||||||
// Initialize these array elements if we are creating a new field
|
|
||||||
if (!sizeof($cp->vars['lang_options']))
|
|
||||||
{
|
|
||||||
if ($field_type == FIELD_BOOL)
|
|
||||||
{
|
|
||||||
// No options have been defined for a boolean field.
|
|
||||||
$cp->vars['lang_options'][0] = '';
|
|
||||||
$cp->vars['lang_options'][1] = '';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// No options have been defined for the dropdown menu
|
|
||||||
$cp->vars['lang_options'] = array();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$template->assign_vars(array(
|
|
||||||
'S_BOOL' => ($field_type == FIELD_BOOL) ? true : false,
|
|
||||||
'S_DROPDOWN' => ($field_type == FIELD_DROPDOWN) ? true : false,
|
|
||||||
|
|
||||||
'L_LANG_OPTIONS_EXPLAIN' => $user->lang[strtoupper($cp->profile_types[$field_type]) . '_ENTRIES_EXPLAIN'],
|
|
||||||
'LANG_OPTIONS' => ($field_type == FIELD_DROPDOWN) ? implode("\n", $cp->vars['lang_options']) : '',
|
|
||||||
'FIRST_LANG_OPTION' => ($field_type == FIELD_BOOL) ? $cp->vars['lang_options'][0] : '',
|
|
||||||
'SECOND_LANG_OPTION' => ($field_type == FIELD_BOOL) ? $cp->vars['lang_options'][1] : '')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Build common create options
|
||||||
|
$template->assign_vars($template_vars);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -849,8 +647,7 @@ class acp_profile
|
||||||
);
|
);
|
||||||
|
|
||||||
// Build options based on profile type
|
// Build options based on profile type
|
||||||
$function = 'get_' . $cp->profile_types[$field_type] . '_options';
|
$options = $profile_field->get_options($this->lang_defs['iso'][$config['default_lang']], $cp->vars);
|
||||||
$options = $cp->$function();
|
|
||||||
|
|
||||||
foreach ($options as $num => $option_ary)
|
foreach ($options as $num => $option_ary)
|
||||||
{
|
{
|
||||||
|
@ -912,9 +709,10 @@ class acp_profile
|
||||||
$s_one_need_edit = true;
|
$s_one_need_edit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$profile_field = $this->type_collection[$row['field_type']];
|
||||||
$template->assign_block_vars('fields', array(
|
$template->assign_block_vars('fields', array(
|
||||||
'FIELD_IDENT' => $row['field_ident'],
|
'FIELD_IDENT' => $row['field_ident'],
|
||||||
'FIELD_TYPE' => $user->lang['FIELD_' . strtoupper($cp->profile_types[$row['field_type']])],
|
'FIELD_TYPE' => $profile_field->get_name(),
|
||||||
|
|
||||||
'L_ACTIVATE_DEACTIVATE' => $user->lang[$active_lang],
|
'L_ACTIVATE_DEACTIVATE' => $user->lang[$active_lang],
|
||||||
'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&action=$active_value&field_id=$id",
|
'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&action=$active_value&field_id=$id",
|
||||||
|
@ -936,15 +734,15 @@ class acp_profile
|
||||||
}
|
}
|
||||||
|
|
||||||
$s_select_type = '';
|
$s_select_type = '';
|
||||||
foreach ($cp->profile_types as $key => $value)
|
foreach ($this->type_collection as $key => $profile_field)
|
||||||
{
|
{
|
||||||
$s_select_type .= '<option value="' . $key . '">' . $user->lang['FIELD_' . strtoupper($value)] . '</option>';
|
$s_select_type .= '<option value="' . $key . '">' . $profile_field->get_name() . '</option>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$template->assign_vars(array(
|
$template->assign_vars(array(
|
||||||
'U_ACTION' => $this->u_action,
|
'U_ACTION' => $this->u_action,
|
||||||
'S_TYPE_OPTIONS' => $s_select_type)
|
'S_TYPE_OPTIONS' => $s_select_type,
|
||||||
);
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -952,7 +750,7 @@ class acp_profile
|
||||||
*/
|
*/
|
||||||
function build_language_options(&$cp, $field_type, $action = 'create')
|
function build_language_options(&$cp, $field_type, $action = 'create')
|
||||||
{
|
{
|
||||||
global $user, $config, $db;
|
global $user, $config, $db, $phpbb_container;
|
||||||
|
|
||||||
$default_lang_id = (!empty($this->edit_lang_id)) ? $this->edit_lang_id : $this->lang_defs['iso'][$config['default_lang']];
|
$default_lang_id = (!empty($this->edit_lang_id)) ? $this->edit_lang_id : $this->lang_defs['iso'][$config['default_lang']];
|
||||||
|
|
||||||
|
@ -969,31 +767,8 @@ class acp_profile
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
$options = array();
|
$profile_field = $this->type_collection[$field_type];
|
||||||
$options['lang_name'] = 'string';
|
$options = $profile_field->get_language_options($cp->vars);
|
||||||
if ($cp->vars['lang_explain'])
|
|
||||||
{
|
|
||||||
$options['lang_explain'] = 'text';
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ($field_type)
|
|
||||||
{
|
|
||||||
case FIELD_BOOL:
|
|
||||||
$options['lang_options'] = 'two_options';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DROPDOWN:
|
|
||||||
$options['lang_options'] = 'optionfield';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_TEXT:
|
|
||||||
case FIELD_STRING:
|
|
||||||
if (strlen($cp->vars['lang_default_value']))
|
|
||||||
{
|
|
||||||
$options['lang_default_value'] = ($field_type == FIELD_STRING) ? 'string' : 'text';
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$lang_options = array();
|
$lang_options = array();
|
||||||
|
|
||||||
|
@ -1072,7 +847,7 @@ class acp_profile
|
||||||
*/
|
*/
|
||||||
function save_profile_field(&$cp, $field_type, $action = 'create')
|
function save_profile_field(&$cp, $field_type, $action = 'create')
|
||||||
{
|
{
|
||||||
global $db, $config, $user;
|
global $db, $config, $user, $phpbb_container;
|
||||||
|
|
||||||
$field_id = request_var('field_id', 0);
|
$field_id = request_var('field_id', 0);
|
||||||
|
|
||||||
|
@ -1133,10 +908,16 @@ class acp_profile
|
||||||
$db->sql_query($sql);
|
$db->sql_query($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$profile_field = $this->type_collection[$field_type];
|
||||||
|
|
||||||
if ($action == 'create')
|
if ($action == 'create')
|
||||||
{
|
{
|
||||||
$field_ident = 'pf_' . $field_ident;
|
$field_ident = 'pf_' . $field_ident;
|
||||||
$profile_sql[] = $this->add_field_ident($field_ident, $field_type);
|
|
||||||
|
$db_tools = $phpbb_container->get('dbal.tools');
|
||||||
|
|
||||||
|
list($sql_type, $null) = $db_tools->get_column_type($profile_field->get_database_column_type());
|
||||||
|
$profile_sql[] = $this->add_field_ident($field_ident, $sql_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql_ary = array(
|
$sql_ary = array(
|
||||||
|
@ -1190,23 +971,7 @@ class acp_profile
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// These are always arrays because the key is the language id...
|
$cp->vars = $profile_field->get_language_options_input($cp->vars);
|
||||||
$cp->vars['l_lang_name'] = utf8_normalize_nfc(request_var('l_lang_name', array(0 => ''), true));
|
|
||||||
$cp->vars['l_lang_explain'] = utf8_normalize_nfc(request_var('l_lang_explain', array(0 => ''), true));
|
|
||||||
$cp->vars['l_lang_default_value'] = utf8_normalize_nfc(request_var('l_lang_default_value', array(0 => ''), true));
|
|
||||||
|
|
||||||
if ($field_type != FIELD_BOOL)
|
|
||||||
{
|
|
||||||
$cp->vars['l_lang_options'] = utf8_normalize_nfc(request_var('l_lang_options', array(0 => ''), true));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @todo check if this line is correct...
|
|
||||||
$cp->vars['l_lang_default_value'] = request_var('l_lang_default_value', array(0 => array('')), true);
|
|
||||||
*/
|
|
||||||
$cp->vars['l_lang_options'] = utf8_normalize_nfc(request_var('l_lang_options', array(0 => array('')), true));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($cp->vars['lang_options'])
|
if ($cp->vars['lang_options'])
|
||||||
{
|
{
|
||||||
|
@ -1226,7 +991,7 @@ class acp_profile
|
||||||
foreach ($cp->vars['lang_options'] as $option_id => $value)
|
foreach ($cp->vars['lang_options'] as $option_id => $value)
|
||||||
{
|
{
|
||||||
$sql_ary = array(
|
$sql_ary = array(
|
||||||
'field_type' => (int) $field_type,
|
'field_type' => $field_type,
|
||||||
'lang_value' => $value
|
'lang_value' => $value
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1281,7 +1046,7 @@ class acp_profile
|
||||||
'field_id' => (int) $field_id,
|
'field_id' => (int) $field_id,
|
||||||
'lang_id' => (int) $lang_id,
|
'lang_id' => (int) $lang_id,
|
||||||
'option_id' => (int) $option_id,
|
'option_id' => (int) $option_id,
|
||||||
'field_type' => (int) $field_type,
|
'field_type' => $field_type,
|
||||||
'lang_value' => $value
|
'lang_value' => $value
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1411,7 +1176,7 @@ class acp_profile
|
||||||
/**
|
/**
|
||||||
* Return sql statement for adding a new field ident (profile field) to the profile fields data table
|
* Return sql statement for adding a new field ident (profile field) to the profile fields data table
|
||||||
*/
|
*/
|
||||||
function add_field_ident($field_ident, $field_type)
|
function add_field_ident($field_ident, $sql_type)
|
||||||
{
|
{
|
||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
|
@ -1420,73 +1185,11 @@ class acp_profile
|
||||||
case 'mysql':
|
case 'mysql':
|
||||||
case 'mysql4':
|
case 'mysql4':
|
||||||
case 'mysqli':
|
case 'mysqli':
|
||||||
|
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD `$field_ident` " . $sql_type;
|
||||||
// We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
|
|
||||||
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD `$field_ident` ";
|
|
||||||
|
|
||||||
switch ($field_type)
|
|
||||||
{
|
|
||||||
case FIELD_STRING:
|
|
||||||
$sql .= ' VARCHAR(255) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DATE:
|
|
||||||
$sql .= 'VARCHAR(10) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_TEXT:
|
|
||||||
$sql .= "TEXT";
|
|
||||||
// ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL,
|
|
||||||
// ADD {$field_ident}_bbcode_bitfield INT(11) UNSIGNED";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_BOOL:
|
|
||||||
$sql .= 'TINYINT(2) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DROPDOWN:
|
|
||||||
$sql .= 'MEDIUMINT(8) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_INT:
|
|
||||||
$sql .= 'BIGINT(20) ';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'sqlite':
|
case 'sqlite':
|
||||||
|
|
||||||
switch ($field_type)
|
|
||||||
{
|
|
||||||
case FIELD_STRING:
|
|
||||||
$type = ' VARCHAR(255) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DATE:
|
|
||||||
$type = 'VARCHAR(10) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_TEXT:
|
|
||||||
$type = "TEXT(65535)";
|
|
||||||
// ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL,
|
|
||||||
// ADD {$field_ident}_bbcode_bitfield INT(11) UNSIGNED";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_BOOL:
|
|
||||||
$type = 'TINYINT(2) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DROPDOWN:
|
|
||||||
$type = 'MEDIUMINT(8) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_INT:
|
|
||||||
$type = 'BIGINT(20) ';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
|
|
||||||
if (version_compare(sqlite_libversion(), '3.0') == -1)
|
if (version_compare(sqlite_libversion(), '3.0') == -1)
|
||||||
{
|
{
|
||||||
$sql = "SELECT sql
|
$sql = "SELECT sql
|
||||||
|
@ -1521,7 +1224,7 @@ class acp_profile
|
||||||
|
|
||||||
$columns = implode(',', $column_list);
|
$columns = implode(',', $column_list);
|
||||||
|
|
||||||
$new_table_cols = $field_ident . ' ' . $type . ',' . $new_table_cols;
|
$new_table_cols = $field_ident . ' ' . $sql_type . ',' . $new_table_cols;
|
||||||
|
|
||||||
// create a new table and fill it up. destroy the temp one
|
// create a new table and fill it up. destroy the temp one
|
||||||
$db->sql_query('CREATE TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' (' . $new_table_cols . ');');
|
$db->sql_query('CREATE TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' (' . $new_table_cols . ');');
|
||||||
|
@ -1530,7 +1233,7 @@ class acp_profile
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident [$type]";
|
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident [$sql_type]";
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -1538,140 +1241,22 @@ class acp_profile
|
||||||
case 'mssql':
|
case 'mssql':
|
||||||
case 'mssql_odbc':
|
case 'mssql_odbc':
|
||||||
case 'mssqlnative':
|
case 'mssqlnative':
|
||||||
|
$sql = 'ALTER TABLE [' . PROFILE_FIELDS_DATA_TABLE . "] ADD [$field_ident] " . $sql_type;
|
||||||
// We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
|
|
||||||
$sql = 'ALTER TABLE [' . PROFILE_FIELDS_DATA_TABLE . "] ADD [$field_ident] ";
|
|
||||||
|
|
||||||
switch ($field_type)
|
|
||||||
{
|
|
||||||
case FIELD_STRING:
|
|
||||||
$sql .= ' [VARCHAR] (255) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DATE:
|
|
||||||
$sql .= '[VARCHAR] (10) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_TEXT:
|
|
||||||
$sql .= "[TEXT]";
|
|
||||||
// ADD {$field_ident}_bbcode_uid [VARCHAR] (5) NOT NULL,
|
|
||||||
// ADD {$field_ident}_bbcode_bitfield [INT] UNSIGNED";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_BOOL:
|
|
||||||
case FIELD_DROPDOWN:
|
|
||||||
$sql .= '[INT] ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_INT:
|
|
||||||
$sql .= '[FLOAT] ';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'postgres':
|
case 'postgres':
|
||||||
|
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD COLUMN \"$field_ident\" " . $sql_type;
|
||||||
// We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
|
|
||||||
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD COLUMN \"$field_ident\" ";
|
|
||||||
|
|
||||||
switch ($field_type)
|
|
||||||
{
|
|
||||||
case FIELD_STRING:
|
|
||||||
$sql .= ' VARCHAR(255) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DATE:
|
|
||||||
$sql .= 'VARCHAR(10) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_TEXT:
|
|
||||||
$sql .= "TEXT";
|
|
||||||
// ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL,
|
|
||||||
// ADD {$field_ident}_bbcode_bitfield INT4 UNSIGNED";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_BOOL:
|
|
||||||
$sql .= 'INT2 ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DROPDOWN:
|
|
||||||
$sql .= 'INT4 ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_INT:
|
|
||||||
$sql .= 'INT8 ';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'firebird':
|
case 'firebird':
|
||||||
|
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' ADD "' . strtoupper($field_ident) . '" ' . $sql_type;
|
||||||
// We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
|
|
||||||
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' ADD "' . strtoupper($field_ident) . '" ';
|
|
||||||
|
|
||||||
switch ($field_type)
|
|
||||||
{
|
|
||||||
case FIELD_STRING:
|
|
||||||
$sql .= ' VARCHAR(255) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DATE:
|
|
||||||
$sql .= 'VARCHAR(10) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_TEXT:
|
|
||||||
$sql .= "BLOB SUB_TYPE TEXT";
|
|
||||||
// ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL,
|
|
||||||
// ADD {$field_ident}_bbcode_bitfield INTEGER UNSIGNED";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_BOOL:
|
|
||||||
case FIELD_DROPDOWN:
|
|
||||||
$sql .= 'INTEGER ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_INT:
|
|
||||||
$sql .= 'DOUBLE PRECISION ';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'oracle':
|
case 'oracle':
|
||||||
|
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident " . $sql_type;
|
||||||
// We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
|
|
||||||
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident ";
|
|
||||||
|
|
||||||
switch ($field_type)
|
|
||||||
{
|
|
||||||
case FIELD_STRING:
|
|
||||||
$sql .= ' VARCHAR2(255) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DATE:
|
|
||||||
$sql .= 'VARCHAR2(10) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_TEXT:
|
|
||||||
$sql .= "CLOB";
|
|
||||||
// ADD {$field_ident}_bbcode_uid VARCHAR2(5) NOT NULL,
|
|
||||||
// ADD {$field_ident}_bbcode_bitfield NUMBER(11) UNSIGNED";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_BOOL:
|
|
||||||
$sql .= 'NUMBER(2) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_DROPDOWN:
|
|
||||||
$sql .= 'NUMBER(8) ';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FIELD_INT:
|
|
||||||
$sql .= 'NUMBER(20) ';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1346,9 +1346,8 @@ class acp_users
|
||||||
case 'profile':
|
case 'profile':
|
||||||
|
|
||||||
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
||||||
include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
|
||||||
|
|
||||||
$cp = new custom_profile();
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
|
|
||||||
$cp_data = $cp_error = array();
|
$cp_data = $cp_error = array();
|
||||||
|
|
||||||
|
|
|
@ -758,7 +758,7 @@ $schema_data['phpbb_profile_fields'] = array(
|
||||||
'COLUMNS' => array(
|
'COLUMNS' => array(
|
||||||
'field_id' => array('UINT', NULL, 'auto_increment'),
|
'field_id' => array('UINT', NULL, 'auto_increment'),
|
||||||
'field_name' => array('VCHAR_UNI', ''),
|
'field_name' => array('VCHAR_UNI', ''),
|
||||||
'field_type' => array('TINT:4', 0),
|
'field_type' => array('VCHAR:100', ''),
|
||||||
'field_ident' => array('VCHAR:20', ''),
|
'field_ident' => array('VCHAR:20', ''),
|
||||||
'field_length' => array('VCHAR:20', ''),
|
'field_length' => array('VCHAR:20', ''),
|
||||||
'field_minlen' => array('VCHAR', ''),
|
'field_minlen' => array('VCHAR', ''),
|
||||||
|
@ -796,7 +796,7 @@ $schema_data['phpbb_profile_fields_lang'] = array(
|
||||||
'field_id' => array('UINT', 0),
|
'field_id' => array('UINT', 0),
|
||||||
'lang_id' => array('UINT', 0),
|
'lang_id' => array('UINT', 0),
|
||||||
'option_id' => array('UINT', 0),
|
'option_id' => array('UINT', 0),
|
||||||
'field_type' => array('TINT:4', 0),
|
'field_type' => array('VCHAR:100', ''),
|
||||||
'lang_value' => array('VCHAR_UNI', ''),
|
'lang_value' => array('VCHAR_UNI', ''),
|
||||||
),
|
),
|
||||||
'PRIMARY_KEY' => array('field_id', 'lang_id', 'option_id'),
|
'PRIMARY_KEY' => array('field_id', 'lang_id', 'option_id'),
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -162,7 +162,7 @@ function user_update_name($old_name, $new_name)
|
||||||
function user_add($user_row, $cp_data = false)
|
function user_add($user_row, $cp_data = false)
|
||||||
{
|
{
|
||||||
global $db, $user, $auth, $config, $phpbb_root_path, $phpEx;
|
global $db, $user, $auth, $config, $phpbb_root_path, $phpEx;
|
||||||
global $phpbb_dispatcher;
|
global $phpbb_dispatcher, $phpbb_container;
|
||||||
|
|
||||||
if (empty($user_row['username']) || !isset($user_row['group_id']) || !isset($user_row['user_email']) || !isset($user_row['user_type']))
|
if (empty($user_row['username']) || !isset($user_row['group_id']) || !isset($user_row['user_email']) || !isset($user_row['user_type']))
|
||||||
{
|
{
|
||||||
|
@ -276,12 +276,7 @@ function user_add($user_row, $cp_data = false)
|
||||||
{
|
{
|
||||||
$cp_data['user_id'] = (int) $user_id;
|
$cp_data['user_id'] = (int) $user_id;
|
||||||
|
|
||||||
if (!class_exists('custom_profile'))
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
{
|
|
||||||
include_once($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
|
||||||
}
|
|
||||||
|
|
||||||
$cp = new custom_profile();
|
|
||||||
$sql = 'INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . ' ' .
|
$sql = 'INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . ' ' .
|
||||||
$db->sql_build_array('INSERT', $cp->build_insert_sql_array($cp_data));
|
$db->sql_build_array('INSERT', $cp->build_insert_sql_array($cp_data));
|
||||||
$db->sql_query($sql);
|
$db->sql_query($sql);
|
||||||
|
|
|
@ -20,7 +20,7 @@ if (!defined('IN_PHPBB'))
|
||||||
*/
|
*/
|
||||||
function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
|
function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
|
||||||
{
|
{
|
||||||
global $user, $template, $auth, $db, $cache;
|
global $user, $template, $auth, $db, $cache, $phpbb_container;
|
||||||
global $phpbb_root_path, $request, $phpEx, $config, $phpbb_dispatcher;
|
global $phpbb_root_path, $request, $phpEx, $config, $phpbb_dispatcher;
|
||||||
|
|
||||||
$user->add_lang(array('viewtopic', 'memberlist'));
|
$user->add_lang(array('viewtopic', 'memberlist'));
|
||||||
|
@ -61,11 +61,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
|
||||||
// Load the custom profile fields
|
// Load the custom profile fields
|
||||||
if ($config['load_cpf_pm'])
|
if ($config['load_cpf_pm'])
|
||||||
{
|
{
|
||||||
if (!class_exists('custom_profile'))
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
{
|
|
||||||
include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
|
||||||
}
|
|
||||||
$cp = new custom_profile();
|
|
||||||
|
|
||||||
$profile_fields = $cp->generate_profile_fields_template('grab', $author_id);
|
$profile_fields = $cp->generate_profile_fields_template('grab', $author_id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,7 @@ class ucp_profile
|
||||||
function main($id, $mode)
|
function main($id, $mode)
|
||||||
{
|
{
|
||||||
global $cache, $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;
|
global $cache, $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;
|
||||||
global $request;
|
global $request, $phpbb_container;
|
||||||
global $phpbb_container;
|
|
||||||
|
|
||||||
$user->add_lang('posting');
|
$user->add_lang('posting');
|
||||||
|
|
||||||
|
@ -260,9 +259,7 @@ class ucp_profile
|
||||||
trigger_error('NO_AUTH_PROFILEINFO');
|
trigger_error('NO_AUTH_PROFILEINFO');
|
||||||
}
|
}
|
||||||
|
|
||||||
include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
|
|
||||||
$cp = new custom_profile();
|
|
||||||
|
|
||||||
$cp_data = $cp_error = array();
|
$cp_data = $cp_error = array();
|
||||||
|
|
||||||
|
|
|
@ -35,8 +35,6 @@ class ucp_register
|
||||||
trigger_error('UCP_REGISTER_DISABLE');
|
trigger_error('UCP_REGISTER_DISABLE');
|
||||||
}
|
}
|
||||||
|
|
||||||
include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
|
||||||
|
|
||||||
$coppa = $request->is_set('coppa') ? (int) $request->variable('coppa', false) : false;
|
$coppa = $request->is_set('coppa') ? (int) $request->variable('coppa', false) : false;
|
||||||
$agreed = $request->variable('agreed', false);
|
$agreed = $request->variable('agreed', false);
|
||||||
$submit = $request->is_set_post('submit');
|
$submit = $request->is_set_post('submit');
|
||||||
|
@ -78,7 +76,7 @@ class ucp_register
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$cp = new custom_profile();
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
|
|
||||||
$error = $cp_data = $cp_error = array();
|
$error = $cp_data = $cp_error = array();
|
||||||
$s_hidden_fields = array();
|
$s_hidden_fields = array();
|
||||||
|
|
|
@ -908,7 +908,7 @@ CREATE INDEX phpbb_privmsgs_to_usr_flder_id ON phpbb_privmsgs_to(user_id, folder
|
||||||
CREATE TABLE phpbb_profile_fields (
|
CREATE TABLE phpbb_profile_fields (
|
||||||
field_id INTEGER NOT NULL,
|
field_id INTEGER NOT NULL,
|
||||||
field_name VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE,
|
field_name VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE,
|
||||||
field_type INTEGER DEFAULT 0 NOT NULL,
|
field_type VARCHAR(100) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
||||||
field_ident VARCHAR(20) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
field_ident VARCHAR(20) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
||||||
field_length VARCHAR(20) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
field_length VARCHAR(20) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
||||||
field_minlen VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
field_minlen VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
||||||
|
@ -957,7 +957,7 @@ CREATE TABLE phpbb_profile_fields_lang (
|
||||||
field_id INTEGER DEFAULT 0 NOT NULL,
|
field_id INTEGER DEFAULT 0 NOT NULL,
|
||||||
lang_id INTEGER DEFAULT 0 NOT NULL,
|
lang_id INTEGER DEFAULT 0 NOT NULL,
|
||||||
option_id INTEGER DEFAULT 0 NOT NULL,
|
option_id INTEGER DEFAULT 0 NOT NULL,
|
||||||
field_type INTEGER DEFAULT 0 NOT NULL,
|
field_type VARCHAR(100) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
||||||
lang_value VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE
|
lang_value VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE
|
||||||
);;
|
);;
|
||||||
|
|
||||||
|
|
|
@ -1114,7 +1114,7 @@ GO
|
||||||
CREATE TABLE [phpbb_profile_fields] (
|
CREATE TABLE [phpbb_profile_fields] (
|
||||||
[field_id] [int] IDENTITY (1, 1) NOT NULL ,
|
[field_id] [int] IDENTITY (1, 1) NOT NULL ,
|
||||||
[field_name] [varchar] (255) DEFAULT ('') NOT NULL ,
|
[field_name] [varchar] (255) DEFAULT ('') NOT NULL ,
|
||||||
[field_type] [int] DEFAULT (0) NOT NULL ,
|
[field_type] [varchar] (100) DEFAULT ('') NOT NULL ,
|
||||||
[field_ident] [varchar] (20) DEFAULT ('') NOT NULL ,
|
[field_ident] [varchar] (20) DEFAULT ('') NOT NULL ,
|
||||||
[field_length] [varchar] (20) DEFAULT ('') NOT NULL ,
|
[field_length] [varchar] (20) DEFAULT ('') NOT NULL ,
|
||||||
[field_minlen] [varchar] (255) DEFAULT ('') NOT NULL ,
|
[field_minlen] [varchar] (255) DEFAULT ('') NOT NULL ,
|
||||||
|
@ -1172,7 +1172,7 @@ CREATE TABLE [phpbb_profile_fields_lang] (
|
||||||
[field_id] [int] DEFAULT (0) NOT NULL ,
|
[field_id] [int] DEFAULT (0) NOT NULL ,
|
||||||
[lang_id] [int] DEFAULT (0) NOT NULL ,
|
[lang_id] [int] DEFAULT (0) NOT NULL ,
|
||||||
[option_id] [int] DEFAULT (0) NOT NULL ,
|
[option_id] [int] DEFAULT (0) NOT NULL ,
|
||||||
[field_type] [int] DEFAULT (0) NOT NULL ,
|
[field_type] [varchar] (100) DEFAULT ('') NOT NULL ,
|
||||||
[lang_value] [varchar] (255) DEFAULT ('') NOT NULL
|
[lang_value] [varchar] (255) DEFAULT ('') NOT NULL
|
||||||
) ON [PRIMARY]
|
) ON [PRIMARY]
|
||||||
GO
|
GO
|
||||||
|
|
|
@ -645,7 +645,7 @@ CREATE TABLE phpbb_privmsgs_to (
|
||||||
CREATE TABLE phpbb_profile_fields (
|
CREATE TABLE phpbb_profile_fields (
|
||||||
field_id mediumint(8) UNSIGNED NOT NULL auto_increment,
|
field_id mediumint(8) UNSIGNED NOT NULL auto_increment,
|
||||||
field_name blob NOT NULL,
|
field_name blob NOT NULL,
|
||||||
field_type tinyint(4) DEFAULT '0' NOT NULL,
|
field_type varbinary(100) DEFAULT '' NOT NULL,
|
||||||
field_ident varbinary(20) DEFAULT '' NOT NULL,
|
field_ident varbinary(20) DEFAULT '' NOT NULL,
|
||||||
field_length varbinary(20) DEFAULT '' NOT NULL,
|
field_length varbinary(20) DEFAULT '' NOT NULL,
|
||||||
field_minlen varbinary(255) DEFAULT '' NOT NULL,
|
field_minlen varbinary(255) DEFAULT '' NOT NULL,
|
||||||
|
@ -681,7 +681,7 @@ CREATE TABLE phpbb_profile_fields_lang (
|
||||||
field_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
field_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
lang_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
lang_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
option_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
option_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
field_type tinyint(4) DEFAULT '0' NOT NULL,
|
field_type varbinary(100) DEFAULT '' NOT NULL,
|
||||||
lang_value blob NOT NULL,
|
lang_value blob NOT NULL,
|
||||||
PRIMARY KEY (field_id, lang_id, option_id)
|
PRIMARY KEY (field_id, lang_id, option_id)
|
||||||
);
|
);
|
||||||
|
|
|
@ -645,7 +645,7 @@ CREATE TABLE phpbb_privmsgs_to (
|
||||||
CREATE TABLE phpbb_profile_fields (
|
CREATE TABLE phpbb_profile_fields (
|
||||||
field_id mediumint(8) UNSIGNED NOT NULL auto_increment,
|
field_id mediumint(8) UNSIGNED NOT NULL auto_increment,
|
||||||
field_name varchar(255) DEFAULT '' NOT NULL,
|
field_name varchar(255) DEFAULT '' NOT NULL,
|
||||||
field_type tinyint(4) DEFAULT '0' NOT NULL,
|
field_type varchar(100) DEFAULT '' NOT NULL,
|
||||||
field_ident varchar(20) DEFAULT '' NOT NULL,
|
field_ident varchar(20) DEFAULT '' NOT NULL,
|
||||||
field_length varchar(20) DEFAULT '' NOT NULL,
|
field_length varchar(20) DEFAULT '' NOT NULL,
|
||||||
field_minlen varchar(255) DEFAULT '' NOT NULL,
|
field_minlen varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
@ -681,7 +681,7 @@ CREATE TABLE phpbb_profile_fields_lang (
|
||||||
field_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
field_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
lang_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
lang_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
option_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
option_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
field_type tinyint(4) DEFAULT '0' NOT NULL,
|
field_type varchar(100) DEFAULT '' NOT NULL,
|
||||||
lang_value varchar(255) DEFAULT '' NOT NULL,
|
lang_value varchar(255) DEFAULT '' NOT NULL,
|
||||||
PRIMARY KEY (field_id, lang_id, option_id)
|
PRIMARY KEY (field_id, lang_id, option_id)
|
||||||
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
|
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
|
||||||
|
|
|
@ -1217,7 +1217,7 @@ CREATE INDEX phpbb_privmsgs_to_usr_flder_id ON phpbb_privmsgs_to (user_id, folde
|
||||||
CREATE TABLE phpbb_profile_fields (
|
CREATE TABLE phpbb_profile_fields (
|
||||||
field_id number(8) NOT NULL,
|
field_id number(8) NOT NULL,
|
||||||
field_name varchar2(765) DEFAULT '' ,
|
field_name varchar2(765) DEFAULT '' ,
|
||||||
field_type number(4) DEFAULT '0' NOT NULL,
|
field_type varchar2(100) DEFAULT '' ,
|
||||||
field_ident varchar2(20) DEFAULT '' ,
|
field_ident varchar2(20) DEFAULT '' ,
|
||||||
field_length varchar2(20) DEFAULT '' ,
|
field_length varchar2(20) DEFAULT '' ,
|
||||||
field_minlen varchar2(255) DEFAULT '' ,
|
field_minlen varchar2(255) DEFAULT '' ,
|
||||||
|
@ -1277,7 +1277,7 @@ CREATE TABLE phpbb_profile_fields_lang (
|
||||||
field_id number(8) DEFAULT '0' NOT NULL,
|
field_id number(8) DEFAULT '0' NOT NULL,
|
||||||
lang_id number(8) DEFAULT '0' NOT NULL,
|
lang_id number(8) DEFAULT '0' NOT NULL,
|
||||||
option_id number(8) DEFAULT '0' NOT NULL,
|
option_id number(8) DEFAULT '0' NOT NULL,
|
||||||
field_type number(4) DEFAULT '0' NOT NULL,
|
field_type varchar2(100) DEFAULT '' ,
|
||||||
lang_value varchar2(765) DEFAULT '' ,
|
lang_value varchar2(765) DEFAULT '' ,
|
||||||
CONSTRAINT pk_phpbb_profile_fields_lang PRIMARY KEY (field_id, lang_id, option_id)
|
CONSTRAINT pk_phpbb_profile_fields_lang PRIMARY KEY (field_id, lang_id, option_id)
|
||||||
)
|
)
|
||||||
|
|
|
@ -853,7 +853,7 @@ CREATE SEQUENCE phpbb_profile_fields_seq;
|
||||||
CREATE TABLE phpbb_profile_fields (
|
CREATE TABLE phpbb_profile_fields (
|
||||||
field_id INT4 DEFAULT nextval('phpbb_profile_fields_seq'),
|
field_id INT4 DEFAULT nextval('phpbb_profile_fields_seq'),
|
||||||
field_name varchar(255) DEFAULT '' NOT NULL,
|
field_name varchar(255) DEFAULT '' NOT NULL,
|
||||||
field_type INT2 DEFAULT '0' NOT NULL,
|
field_type varchar(100) DEFAULT '' NOT NULL,
|
||||||
field_ident varchar(20) DEFAULT '' NOT NULL,
|
field_ident varchar(20) DEFAULT '' NOT NULL,
|
||||||
field_length varchar(20) DEFAULT '' NOT NULL,
|
field_length varchar(20) DEFAULT '' NOT NULL,
|
||||||
field_minlen varchar(255) DEFAULT '' NOT NULL,
|
field_minlen varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
@ -893,7 +893,7 @@ CREATE TABLE phpbb_profile_fields_lang (
|
||||||
field_id INT4 DEFAULT '0' NOT NULL CHECK (field_id >= 0),
|
field_id INT4 DEFAULT '0' NOT NULL CHECK (field_id >= 0),
|
||||||
lang_id INT4 DEFAULT '0' NOT NULL CHECK (lang_id >= 0),
|
lang_id INT4 DEFAULT '0' NOT NULL CHECK (lang_id >= 0),
|
||||||
option_id INT4 DEFAULT '0' NOT NULL CHECK (option_id >= 0),
|
option_id INT4 DEFAULT '0' NOT NULL CHECK (option_id >= 0),
|
||||||
field_type INT2 DEFAULT '0' NOT NULL,
|
field_type varchar(100) DEFAULT '' NOT NULL,
|
||||||
lang_value varchar(255) DEFAULT '' NOT NULL,
|
lang_value varchar(255) DEFAULT '' NOT NULL,
|
||||||
PRIMARY KEY (field_id, lang_id, option_id)
|
PRIMARY KEY (field_id, lang_id, option_id)
|
||||||
);
|
);
|
||||||
|
|
|
@ -626,7 +626,7 @@ CREATE INDEX phpbb_privmsgs_to_usr_flder_id ON phpbb_privmsgs_to (user_id, folde
|
||||||
CREATE TABLE phpbb_profile_fields (
|
CREATE TABLE phpbb_profile_fields (
|
||||||
field_id INTEGER PRIMARY KEY NOT NULL ,
|
field_id INTEGER PRIMARY KEY NOT NULL ,
|
||||||
field_name varchar(255) NOT NULL DEFAULT '',
|
field_name varchar(255) NOT NULL DEFAULT '',
|
||||||
field_type tinyint(4) NOT NULL DEFAULT '0',
|
field_type varchar(100) NOT NULL DEFAULT '',
|
||||||
field_ident varchar(20) NOT NULL DEFAULT '',
|
field_ident varchar(20) NOT NULL DEFAULT '',
|
||||||
field_length varchar(20) NOT NULL DEFAULT '',
|
field_length varchar(20) NOT NULL DEFAULT '',
|
||||||
field_minlen varchar(255) NOT NULL DEFAULT '',
|
field_minlen varchar(255) NOT NULL DEFAULT '',
|
||||||
|
@ -661,7 +661,7 @@ CREATE TABLE phpbb_profile_fields_lang (
|
||||||
field_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
field_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||||
lang_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
lang_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||||
option_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
option_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||||
field_type tinyint(4) NOT NULL DEFAULT '0',
|
field_type varchar(100) NOT NULL DEFAULT '',
|
||||||
lang_value varchar(255) NOT NULL DEFAULT '',
|
lang_value varchar(255) NOT NULL DEFAULT '',
|
||||||
PRIMARY KEY (field_id, lang_id, option_id)
|
PRIMARY KEY (field_id, lang_id, option_id)
|
||||||
);
|
);
|
||||||
|
|
|
@ -617,8 +617,7 @@ switch ($mode)
|
||||||
$profile_fields = array();
|
$profile_fields = array();
|
||||||
if ($config['load_cpf_viewprofile'])
|
if ($config['load_cpf_viewprofile'])
|
||||||
{
|
{
|
||||||
include_once($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
$cp = new custom_profile();
|
|
||||||
$profile_fields = $cp->generate_profile_fields_template('grab', $user_id);
|
$profile_fields = $cp->generate_profile_fields_template('grab', $user_id);
|
||||||
$profile_fields = (isset($profile_fields[$user_id])) ? $cp->generate_profile_fields_template('show', false, $profile_fields[$user_id]) : array();
|
$profile_fields = (isset($profile_fields[$user_id])) ? $cp->generate_profile_fields_template('show', false, $profile_fields[$user_id]) : array();
|
||||||
}
|
}
|
||||||
|
@ -1555,8 +1554,7 @@ switch ($mode)
|
||||||
// Load custom profile fields
|
// Load custom profile fields
|
||||||
if ($config['load_cpf_memberlist'])
|
if ($config['load_cpf_memberlist'])
|
||||||
{
|
{
|
||||||
include_once($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
$cp = new custom_profile();
|
|
||||||
|
|
||||||
// Grab all profile fields from users in id cache for later use - similar to the poster cache
|
// Grab all profile fields from users in id cache for later use - similar to the poster cache
|
||||||
$profile_fields_cache = $cp->generate_profile_fields_template('grab', $user_list);
|
$profile_fields_cache = $cp->generate_profile_fields_template('grab', $user_list);
|
||||||
|
|
106
phpBB/phpbb/db/migration/data/v310/profilefield_types.php
Normal file
106
phpBB/phpbb/db/migration/data/v310/profilefield_types.php
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package migration
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\db\migration\data\v310;
|
||||||
|
|
||||||
|
class profilefield_types extends \phpbb\db\migration\migration
|
||||||
|
{
|
||||||
|
|
||||||
|
static public function depends_on()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'\phpbb\db\migration\data\v310\alpha2',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update_schema()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'change_columns' => array(
|
||||||
|
$this->table_prefix . 'profile_fields' => array(
|
||||||
|
'field_type' => array('VCHAR:100', ''),
|
||||||
|
),
|
||||||
|
$this->table_prefix . 'profile_fields_lang' => array(
|
||||||
|
'field_type' => array('VCHAR:100', ''),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update_data()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array('custom', array(array($this, 'update_profile_fields_type'))),
|
||||||
|
array('custom', array(array($this, 'update_profile_fields_lang_type'))),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update_profile_fields_type()
|
||||||
|
{
|
||||||
|
// Update profile field types
|
||||||
|
$sql = 'SELECT field_type
|
||||||
|
FROM ' . $this->table_prefix . 'profile_fields
|
||||||
|
GROUP BY field_type';
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$sql = 'UPDATE ' . $this->table_prefix . "profile_fields
|
||||||
|
SET field_type = '" . $this->db->sql_escape($this->convert_phpbb30_field_type($row['field_type'])) . "'
|
||||||
|
WHERE field_type = '" . $this->db->sql_escape($row['field_type']) . "'";
|
||||||
|
$this->sql_query($sql);
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update_profile_fields_lang_type()
|
||||||
|
{
|
||||||
|
// Update profile field language types
|
||||||
|
$sql = 'SELECT field_type
|
||||||
|
FROM ' . $this->table_prefix . 'profile_fields_lang
|
||||||
|
GROUP BY field_type';
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$sql = 'UPDATE ' . $this->table_prefix . "profile_fields_lang
|
||||||
|
SET field_type = '" . $this->db->sql_escape($this->convert_phpbb30_field_type($row['field_type'])) . "'
|
||||||
|
WHERE field_type = '" . $this->db->sql_escape($row['field_type']) . "'";
|
||||||
|
$this->sql_query($sql);
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine the new field type for a given phpBB 3.0 field type
|
||||||
|
*
|
||||||
|
* @param $field_type string Field type in 3.0
|
||||||
|
* @return string Field new type which is used since 3.1
|
||||||
|
*/
|
||||||
|
public function convert_phpbb30_field_type($field_type)
|
||||||
|
{
|
||||||
|
switch ($field_type)
|
||||||
|
{
|
||||||
|
case FIELD_INT:
|
||||||
|
return 'profilefields.type.int';
|
||||||
|
case FIELD_STRING:
|
||||||
|
return 'profilefields.type.string';
|
||||||
|
case FIELD_TEXT:
|
||||||
|
return 'profilefields.type.text';
|
||||||
|
case FIELD_BOOL:
|
||||||
|
return 'profilefields.type.bool';
|
||||||
|
case FIELD_DROPDOWN:
|
||||||
|
return 'profilefields.type.dropdown';
|
||||||
|
case FIELD_DATE:
|
||||||
|
return 'profilefields.type.date';
|
||||||
|
default:
|
||||||
|
return $field_type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1474,52 +1474,7 @@ class tools
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get type
|
// Get type
|
||||||
if (strpos($column_data[0], ':') !== false)
|
list($column_type, $orig_column_type) = $this->get_column_type($column_data[0]);
|
||||||
{
|
|
||||||
list($orig_column_type, $column_length) = explode(':', $column_data[0]);
|
|
||||||
if (!is_array($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']))
|
|
||||||
{
|
|
||||||
$column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'], $column_length);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule']))
|
|
||||||
{
|
|
||||||
switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][0])
|
|
||||||
{
|
|
||||||
case 'div':
|
|
||||||
$column_length /= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][1];
|
|
||||||
$column_length = ceil($column_length);
|
|
||||||
$column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit']))
|
|
||||||
{
|
|
||||||
switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][0])
|
|
||||||
{
|
|
||||||
case 'mult':
|
|
||||||
$column_length *= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][1];
|
|
||||||
if ($column_length > $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][2])
|
|
||||||
{
|
|
||||||
$column_type = $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][3];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$orig_column_type .= ':';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$orig_column_type = $column_data[0];
|
|
||||||
$column_type = $this->dbms_type_map[$this->sql_layer][$column_data[0]];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adjust default value if db-dependent specified
|
// Adjust default value if db-dependent specified
|
||||||
if (is_array($column_data[1]))
|
if (is_array($column_data[1]))
|
||||||
|
@ -1694,6 +1649,65 @@ class tools
|
||||||
return $return_array;
|
return $return_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the column's database type from the type map
|
||||||
|
*
|
||||||
|
* @param string $column_map_type
|
||||||
|
* @return array column type for this database
|
||||||
|
* and map type without length
|
||||||
|
*/
|
||||||
|
function get_column_type($column_map_type)
|
||||||
|
{
|
||||||
|
if (strpos($column_map_type, ':') !== false)
|
||||||
|
{
|
||||||
|
list($orig_column_type, $column_length) = explode(':', $column_map_type);
|
||||||
|
if (!is_array($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']))
|
||||||
|
{
|
||||||
|
$column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'], $column_length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule']))
|
||||||
|
{
|
||||||
|
switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][0])
|
||||||
|
{
|
||||||
|
case 'div':
|
||||||
|
$column_length /= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][1];
|
||||||
|
$column_length = ceil($column_length);
|
||||||
|
$column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit']))
|
||||||
|
{
|
||||||
|
switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][0])
|
||||||
|
{
|
||||||
|
case 'mult':
|
||||||
|
$column_length *= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][1];
|
||||||
|
if ($column_length > $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][2])
|
||||||
|
{
|
||||||
|
$column_type = $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][3];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$orig_column_type .= ':';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$orig_column_type = $column_map_type;
|
||||||
|
$column_type = $this->dbms_type_map[$this->sql_layer][$column_map_type];
|
||||||
|
}
|
||||||
|
|
||||||
|
return array($column_type, $orig_column_type);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add new column
|
* Add new column
|
||||||
*/
|
*/
|
||||||
|
|
130
phpBB/phpbb/profilefields/lang_helper.php
Normal file
130
phpBB/phpbb/profilefields/lang_helper.php
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB3
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom Profile Fields
|
||||||
|
* @package phpBB3
|
||||||
|
*/
|
||||||
|
class lang_helper
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Array with the language option, grouped by field and language
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $options_lang = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database object
|
||||||
|
* @var \phpbb\db\driver\driver
|
||||||
|
*/
|
||||||
|
protected $db;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table where the language strings are stored
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $language_table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\db\driver\driver $db Database object
|
||||||
|
* @param string $language_table Table where the language strings are stored
|
||||||
|
*/
|
||||||
|
public function __construct($db, $language_table)
|
||||||
|
{
|
||||||
|
$this->db = $db;
|
||||||
|
$this->language_table = $language_table;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get language entries for options and store them here for later use
|
||||||
|
*/
|
||||||
|
public function get_option_lang($field_id, $lang_id, $field_type, $preview_options)
|
||||||
|
{
|
||||||
|
if ($preview_options !== false)
|
||||||
|
{
|
||||||
|
$lang_options = (!is_array($preview_options)) ? explode("\n", $preview_options) : $preview_options;
|
||||||
|
|
||||||
|
foreach ($lang_options as $num => $var)
|
||||||
|
{
|
||||||
|
if (!isset($this->options_lang[$field_id]))
|
||||||
|
{
|
||||||
|
$this->options_lang[$field_id] = array();
|
||||||
|
}
|
||||||
|
if (!isset($this->options_lang[$field_id][$lang_id]))
|
||||||
|
{
|
||||||
|
$this->options_lang[$field_id][$lang_id] = array();
|
||||||
|
}
|
||||||
|
$this->options_lang[$field_id][$lang_id][($num + 1)] = $var;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sql = 'SELECT option_id, lang_value
|
||||||
|
FROM ' . $this->language_table . '
|
||||||
|
WHERE field_id = ' . (int) $field_id . '
|
||||||
|
AND lang_id = ' . (int) $lang_id . "
|
||||||
|
AND field_type = '" . $this->db->sql_escape($field_type) . "'
|
||||||
|
ORDER BY option_id";
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$this->options_lang[$field_id][$lang_id][($row['option_id'] + 1)] = $row['lang_value'];
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are language options set for this field?
|
||||||
|
*
|
||||||
|
* @param int $field_id Database ID of the field
|
||||||
|
* @param int $lang_id ID of the language
|
||||||
|
* @param int $field_value Selected value of the field
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function is_set($field_id, $lang_id = null, $field_value = null)
|
||||||
|
{
|
||||||
|
$is_set = isset($this->options_lang[$field_id]);
|
||||||
|
|
||||||
|
if ($is_set && (!is_null($lang_id) || !is_null($field_value)))
|
||||||
|
{
|
||||||
|
$is_set = isset($this->options_lang[$field_id][$lang_id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($is_set && !is_null($field_value))
|
||||||
|
{
|
||||||
|
$is_set = isset($this->options_lang[$field_id][$lang_id][$field_value]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $is_set;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the selected language string
|
||||||
|
*
|
||||||
|
* @param int $field_id Database ID of the field
|
||||||
|
* @param int $lang_id ID of the language
|
||||||
|
* @param int $field_value Selected value of the field
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function get($field_id, $lang_id, $field_value = null)
|
||||||
|
{
|
||||||
|
if (is_null($field_value))
|
||||||
|
{
|
||||||
|
return $this->options_lang[$field_id][$lang_id];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->options_lang[$field_id][$lang_id][$field_value];
|
||||||
|
}
|
||||||
|
}
|
375
phpBB/phpbb/profilefields/manager.php
Normal file
375
phpBB/phpbb/profilefields/manager.php
Normal file
|
@ -0,0 +1,375 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB3
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom Profile Fields
|
||||||
|
* @package phpBB3
|
||||||
|
*/
|
||||||
|
class manager
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Auth object
|
||||||
|
* @var \phpbb\auth\auth
|
||||||
|
*/
|
||||||
|
protected $auth;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database object
|
||||||
|
* @var \phpbb\db\driver\driver
|
||||||
|
*/
|
||||||
|
protected $db;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request object
|
||||||
|
* @var \phpbb\request\request
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template object
|
||||||
|
* @var \phpbb\template\template
|
||||||
|
*/
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service Collection object
|
||||||
|
* @var \phpbb\di\service_collection
|
||||||
|
*/
|
||||||
|
protected $type_collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User object
|
||||||
|
* @var \phpbb\user
|
||||||
|
*/
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
protected $fields_table;
|
||||||
|
|
||||||
|
protected $fields_language_table;
|
||||||
|
|
||||||
|
protected $fields_data_table;
|
||||||
|
|
||||||
|
protected $profile_cache = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\auth\auth $auth Auth object
|
||||||
|
* @param \phpbb\db\driver\driver $db Database object
|
||||||
|
* @param \phpbb\request\request $request Request object
|
||||||
|
* @param \phpbb\template\template $template Template object
|
||||||
|
* @param \phpbb\di\service_collection $type_collection
|
||||||
|
* @param \phpbb\user $user User object
|
||||||
|
* @param string $fields_table
|
||||||
|
* @param string $fields_language_table
|
||||||
|
* @param string $fields_data_table
|
||||||
|
*/
|
||||||
|
public function __construct(\phpbb\auth\auth $auth, \phpbb\db\driver\driver $db, \phpbb\request\request $request, \phpbb\template\template $template, \phpbb\di\service_collection $type_collection, \phpbb\user $user, $fields_table, $fields_language_table, $fields_data_table)
|
||||||
|
{
|
||||||
|
$this->auth = $auth;
|
||||||
|
$this->db = $db;
|
||||||
|
$this->request = $request;
|
||||||
|
$this->template = $template;
|
||||||
|
$this->type_collection = $type_collection;
|
||||||
|
$this->user = $user;
|
||||||
|
|
||||||
|
$this->fields_table = $fields_table;
|
||||||
|
$this->fields_language_table = $fields_language_table;
|
||||||
|
$this->fields_data_table = $fields_data_table;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign editable fields to template, mode can be profile (for profile change) or register (for registration)
|
||||||
|
* Called by ucp_profile and ucp_register
|
||||||
|
*/
|
||||||
|
public function generate_profile_fields($mode, $lang_id)
|
||||||
|
{
|
||||||
|
$sql_where = '';
|
||||||
|
switch ($mode)
|
||||||
|
{
|
||||||
|
case 'register':
|
||||||
|
// If the field is required we show it on the registration page
|
||||||
|
$sql_where .= ' AND f.field_show_on_reg = 1';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'profile':
|
||||||
|
// Show hidden fields to moderators/admins
|
||||||
|
if (!$this->auth->acl_gets('a_', 'm_') && !$this->auth->acl_getf_global('m_'))
|
||||||
|
{
|
||||||
|
$sql_where .= ' AND f.field_show_profile = 1';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
trigger_error('Wrong profile mode specified', E_USER_ERROR);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'SELECT l.*, f.*
|
||||||
|
FROM ' . $this->fields_language_table . ' l, ' . $this->fields_table . " f
|
||||||
|
WHERE f.field_active = 1
|
||||||
|
$sql_where
|
||||||
|
AND l.lang_id = " . (int) $lang_id . '
|
||||||
|
AND l.field_id = f.field_id
|
||||||
|
ORDER BY f.field_order';
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
// Return templated field
|
||||||
|
$profile_field = $this->type_collection[$row['field_type']];
|
||||||
|
$tpl_snippet = $profile_field->process_field_row('change', $row);
|
||||||
|
|
||||||
|
$this->template->assign_block_vars('profile_fields', array(
|
||||||
|
'LANG_NAME' => $this->user->lang($row['lang_name']),
|
||||||
|
'LANG_EXPLAIN' => $this->user->lang($row['lang_explain']),
|
||||||
|
'FIELD' => $tpl_snippet,
|
||||||
|
'FIELD_ID' => $profile_field->get_field_ident($row),
|
||||||
|
'S_REQUIRED' => ($row['field_required']) ? true : false,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build profile cache, used for display
|
||||||
|
*/
|
||||||
|
protected function build_cache()
|
||||||
|
{
|
||||||
|
$this->profile_cache = array();
|
||||||
|
|
||||||
|
// Display hidden/no_view fields for admin/moderator
|
||||||
|
$sql = 'SELECT l.*, f.*
|
||||||
|
FROM ' . $this->fields_language_table . ' l, ' . $this->fields_table . ' f
|
||||||
|
WHERE l.lang_id = ' . $this->user->get_iso_lang_id() . '
|
||||||
|
AND f.field_active = 1 ' .
|
||||||
|
((!$this->auth->acl_gets('a_', 'm_') && !$this->auth->acl_getf_global('m_')) ? ' AND f.field_hide = 0 ' : '') . '
|
||||||
|
AND f.field_no_view = 0
|
||||||
|
AND l.field_id = f.field_id
|
||||||
|
ORDER BY f.field_order';
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$this->profile_cache[$row['field_ident']] = $row;
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submit profile field for validation
|
||||||
|
*/
|
||||||
|
public function submit_cp_field($mode, $lang_id, &$cp_data, &$cp_error)
|
||||||
|
{
|
||||||
|
$sql_where = '';
|
||||||
|
switch ($mode)
|
||||||
|
{
|
||||||
|
case 'register':
|
||||||
|
// If the field is required we show it on the registration page
|
||||||
|
$sql_where .= ' AND f.field_show_on_reg = 1';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'profile':
|
||||||
|
// Show hidden fields to moderators/admins
|
||||||
|
if (!$this->auth->acl_gets('a_', 'm_') && !$this->auth->acl_getf_global('m_'))
|
||||||
|
{
|
||||||
|
$sql_where .= ' AND f.field_show_profile = 1';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
trigger_error('Wrong profile mode specified', E_USER_ERROR);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'SELECT l.*, f.*
|
||||||
|
FROM ' . $this->fields_language_table . ' l, ' . $this->fields_table . ' f
|
||||||
|
WHERE l.lang_id = ' . (int) $lang_id . "
|
||||||
|
AND f.field_active = 1
|
||||||
|
$sql_where
|
||||||
|
AND l.field_id = f.field_id
|
||||||
|
ORDER BY f.field_order";
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$profile_field = $this->type_collection[$row['field_type']];
|
||||||
|
$cp_data['pf_' . $row['field_ident']] = $profile_field->get_profile_field($row);
|
||||||
|
$check_value = $cp_data['pf_' . $row['field_ident']];
|
||||||
|
|
||||||
|
if (($cp_result = $profile_field->validate_profile_field($check_value, $row)) !== false)
|
||||||
|
{
|
||||||
|
// If the result is not false, it's an error message
|
||||||
|
$cp_error[] = $cp_result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update profile field data directly
|
||||||
|
*/
|
||||||
|
public function update_profile_field_data($user_id, $cp_data)
|
||||||
|
{
|
||||||
|
if (!sizeof($cp_data))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'UPDATE ' . $this->fields_data_table . '
|
||||||
|
SET ' . $this->db->sql_build_array('UPDATE', $cp_data) . '
|
||||||
|
WHERE user_id = ' . (int) $user_id;
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
|
||||||
|
if (!$this->db->sql_affectedrows())
|
||||||
|
{
|
||||||
|
$cp_data['user_id'] = (int) $user_id;
|
||||||
|
|
||||||
|
$this->db->sql_return_on_error(true);
|
||||||
|
|
||||||
|
$sql = 'INSERT INTO ' . $this->fields_data_table . ' ' . $this->db->sql_build_array('INSERT', $cp_data);
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
|
||||||
|
$this->db->sql_return_on_error(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign fields to template, used for viewprofile, viewtopic and memberlist (if load setting is enabled)
|
||||||
|
* This is directly connected to the user -> mode == grab is to grab the user specific fields, mode == show is for assigning the row to the template
|
||||||
|
*/
|
||||||
|
public function generate_profile_fields_template($mode, $user_id = 0, $profile_row = false)
|
||||||
|
{
|
||||||
|
if ($mode == 'grab')
|
||||||
|
{
|
||||||
|
if (!is_array($user_id))
|
||||||
|
{
|
||||||
|
$user_id = array($user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sizeof($this->profile_cache))
|
||||||
|
{
|
||||||
|
$this->build_cache();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sizeof($user_id))
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'SELECT *
|
||||||
|
FROM ' . $this->fields_data_table . '
|
||||||
|
WHERE ' . $this->db->sql_in_set('user_id', array_map('intval', $user_id));
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
$field_data = array();
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$field_data[$row['user_id']] = $row;
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
|
$user_fields = array();
|
||||||
|
|
||||||
|
$user_ids = $user_id;
|
||||||
|
|
||||||
|
// Go through the fields in correct order
|
||||||
|
foreach (array_keys($this->profile_cache) as $used_ident)
|
||||||
|
{
|
||||||
|
foreach ($field_data as $user_id => $row)
|
||||||
|
{
|
||||||
|
$user_fields[$user_id][$used_ident]['value'] = $row['pf_' . $used_ident];
|
||||||
|
$user_fields[$user_id][$used_ident]['data'] = $this->profile_cache[$used_ident];
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($user_ids as $user_id)
|
||||||
|
{
|
||||||
|
if (!isset($user_fields[$user_id][$used_ident]) && $this->profile_cache[$used_ident]['field_show_novalue'])
|
||||||
|
{
|
||||||
|
$user_fields[$user_id][$used_ident]['value'] = '';
|
||||||
|
$user_fields[$user_id][$used_ident]['data'] = $this->profile_cache[$used_ident];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $user_fields;
|
||||||
|
}
|
||||||
|
else if ($mode == 'show')
|
||||||
|
{
|
||||||
|
// $profile_row == $user_fields[$row['user_id']];
|
||||||
|
$tpl_fields = array();
|
||||||
|
$tpl_fields['row'] = $tpl_fields['blockrow'] = array();
|
||||||
|
|
||||||
|
foreach ($profile_row as $ident => $ident_ary)
|
||||||
|
{
|
||||||
|
$profile_field = $this->type_collection[$ident_ary['data']['field_type']];
|
||||||
|
$value = $profile_field->get_profile_value($ident_ary['value'], $ident_ary['data']);
|
||||||
|
|
||||||
|
if ($value === NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tpl_fields['row'] += array(
|
||||||
|
'PROFILE_' . strtoupper($ident) . '_VALUE' => $value,
|
||||||
|
'PROFILE_' . strtoupper($ident) . '_TYPE' => $ident_ary['data']['field_type'],
|
||||||
|
'PROFILE_' . strtoupper($ident) . '_NAME' => $this->user->lang($ident_ary['data']['lang_name']),
|
||||||
|
'PROFILE_' . strtoupper($ident) . '_EXPLAIN'=> $this->user->lang($ident_ary['data']['lang_explain']),
|
||||||
|
|
||||||
|
'S_PROFILE_' . strtoupper($ident) => true,
|
||||||
|
);
|
||||||
|
|
||||||
|
$tpl_fields['blockrow'][] = array(
|
||||||
|
'PROFILE_FIELD_VALUE' => $value,
|
||||||
|
'PROFILE_FIELD_TYPE' => $ident_ary['data']['field_type'],
|
||||||
|
'PROFILE_FIELD_NAME' => $this->user->lang($ident_ary['data']['lang_name']),
|
||||||
|
'PROFILE_FIELD_EXPLAIN' => $this->user->lang($ident_ary['data']['lang_explain']),
|
||||||
|
|
||||||
|
'S_PROFILE_' . strtoupper($ident) => true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $tpl_fields;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trigger_error('Wrong mode for custom profile', E_USER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build Array for user insertion into custom profile fields table
|
||||||
|
*/
|
||||||
|
public function build_insert_sql_array($cp_data)
|
||||||
|
{
|
||||||
|
$sql_not_in = array();
|
||||||
|
foreach ($cp_data as $key => $null)
|
||||||
|
{
|
||||||
|
$sql_not_in[] = (strncmp($key, 'pf_', 3) === 0) ? substr($key, 3) : $key;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'SELECT f.field_type, f.field_ident, f.field_default_value, l.lang_default_value
|
||||||
|
FROM ' . $this->fields_language_table . ' l, ' . $this->fields_table . ' f
|
||||||
|
WHERE l.lang_id = ' . $this->user->get_iso_lang_id() . '
|
||||||
|
' . ((sizeof($sql_not_in)) ? ' AND ' . $this->db->sql_in_set('f.field_ident', $sql_not_in, true) : '') . '
|
||||||
|
AND l.field_id = f.field_id';
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$profile_field = $this->type_collection[$row['field_type']];
|
||||||
|
$cp_data['pf_' . $row['field_ident']] = $profile_field->get_default_field_value($row);
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
|
return $cp_data;
|
||||||
|
}
|
||||||
|
}
|
175
phpBB/phpbb/profilefields/type/type_base.php
Normal file
175
phpBB/phpbb/profilefields/type/type_base.php
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
abstract class type_base implements type_interface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Request object
|
||||||
|
* @var \phpbb\request\request
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template object
|
||||||
|
* @var \phpbb\template\template
|
||||||
|
*/
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User object
|
||||||
|
* @var \phpbb\user
|
||||||
|
*/
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\request\request $request Request object
|
||||||
|
* @param \phpbb\template\template $template Template object
|
||||||
|
* @param \phpbb\user $user User object
|
||||||
|
* @param string $language_table Table where the language strings are stored
|
||||||
|
*/
|
||||||
|
public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->template = $template;
|
||||||
|
$this->user = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_name()
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_' . strtoupper($this->get_name_short()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_service_name()
|
||||||
|
{
|
||||||
|
return 'profilefields.type.' . $this->get_name_short();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_template_filename()
|
||||||
|
{
|
||||||
|
return 'profilefields/' . $this->get_name_short() . '.html';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_field_ident($field_data)
|
||||||
|
{
|
||||||
|
return 'pf_' . $field_data['field_ident'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_language_options_input($field_data)
|
||||||
|
{
|
||||||
|
$field_data['l_lang_name'] = $this->request->variable('l_lang_name', array(0 => ''), true);
|
||||||
|
$field_data['l_lang_explain'] = $this->request->variable('l_lang_explain', array(0 => ''), true);
|
||||||
|
$field_data['l_lang_default_value'] = $this->request->variable('l_lang_default_value', array(0 => ''), true);
|
||||||
|
$field_data['l_lang_options'] = $this->request->variable('l_lang_options', array(0 => ''), true);
|
||||||
|
|
||||||
|
return $field_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function prepare_options_form(&$exclude_options, &$visibility_options)
|
||||||
|
{
|
||||||
|
return $this->request->variable('lang_options', '', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_options_on_submit($error, $field_data)
|
||||||
|
{
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_excluded_options($key, $action, $current_value, &$field_data, $step)
|
||||||
|
{
|
||||||
|
if ($step == 3 && ($field_data[$key] || $action != 'edit') && $key == 'l_lang_options' && is_array($field_data[$key]))
|
||||||
|
{
|
||||||
|
foreach ($field_data[$key] as $lang_id => $options)
|
||||||
|
{
|
||||||
|
$field_data[$key][$lang_id] = explode("\n", $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $current_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $current_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function prepare_hidden_fields($step, $key, $action, &$field_data)
|
||||||
|
{
|
||||||
|
if (!$this->request->is_set($key))
|
||||||
|
{
|
||||||
|
// Do not set this variable, we will use the default value
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else if ($key == 'field_ident' && isset($field_data[$key]))
|
||||||
|
{
|
||||||
|
return $field_data[$key];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return $this->request->variable($key, '', true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function display_options(&$template_vars, &$field_data)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return templated value/field. Possible values for $mode are:
|
||||||
|
* change == user is able to set/enter profile values; preview == just show the value
|
||||||
|
*/
|
||||||
|
public function process_field_row($mode, $profile_row)
|
||||||
|
{
|
||||||
|
$preview_options = ($mode == 'preview') ? $profile_row['lang_options'] : false;
|
||||||
|
|
||||||
|
// set template filename
|
||||||
|
$this->template->set_filenames(array(
|
||||||
|
'cp_body' => $this->get_template_filename(),
|
||||||
|
));
|
||||||
|
|
||||||
|
// empty previously filled blockvars
|
||||||
|
$this->template->destroy_block_vars($this->get_name_short());
|
||||||
|
|
||||||
|
// Assign template variables
|
||||||
|
$this->generate_field($profile_row, $preview_options);
|
||||||
|
|
||||||
|
return $this->template->assign_display('cp_body');
|
||||||
|
}
|
||||||
|
}
|
387
phpBB/phpbb/profilefields/type/type_bool.php
Normal file
387
phpBB/phpbb/profilefields/type/type_bool.php
Normal file
|
@ -0,0 +1,387 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
class type_bool extends type_base
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Profile fields language helper
|
||||||
|
* @var \phpbb\profilefields\lang_helper
|
||||||
|
*/
|
||||||
|
protected $lang_helper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request object
|
||||||
|
* @var \phpbb\request\request
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template object
|
||||||
|
* @var \phpbb\template\template
|
||||||
|
*/
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User object
|
||||||
|
* @var \phpbb\user
|
||||||
|
*/
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\profilefields\lang_helper $lang_helper Profile fields language helper
|
||||||
|
* @param \phpbb\request\request $request Request object
|
||||||
|
* @param \phpbb\template\template $template Template object
|
||||||
|
* @param \phpbb\user $user User object
|
||||||
|
* @param string $language_table Table where the language strings are stored
|
||||||
|
*/
|
||||||
|
public function __construct(\phpbb\profilefields\lang_helper $lang_helper, \phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)
|
||||||
|
{
|
||||||
|
$this->lang_helper = $lang_helper;
|
||||||
|
$this->request = $request;
|
||||||
|
$this->template = $template;
|
||||||
|
$this->user = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_name_short()
|
||||||
|
{
|
||||||
|
return 'bool';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_options($default_lang_id, $field_data)
|
||||||
|
{
|
||||||
|
$profile_row = array(
|
||||||
|
'var_name' => 'field_default_value',
|
||||||
|
'field_id' => 1,
|
||||||
|
'lang_name' => $field_data['lang_name'],
|
||||||
|
'lang_explain' => $field_data['lang_explain'],
|
||||||
|
'lang_id' => $default_lang_id,
|
||||||
|
'field_default_value' => $field_data['field_default_value'],
|
||||||
|
'field_ident' => 'field_default_value',
|
||||||
|
'field_type' => $this->get_service_name(),
|
||||||
|
'field_length' => $field_data['field_length'],
|
||||||
|
'lang_options' => $field_data['lang_options'],
|
||||||
|
);
|
||||||
|
|
||||||
|
$options = array(
|
||||||
|
0 => array('TITLE' => $this->user->lang['FIELD_TYPE'], 'EXPLAIN' => $this->user->lang['BOOL_TYPE_EXPLAIN'], 'FIELD' => '<label><input type="radio" class="radio" name="field_length" value="1"' . (($field_data['field_length'] == 1) ? ' checked="checked"' : '') . ' onchange="document.getElementById(\'add_profile_field\').submit();" /> ' . $this->user->lang['RADIO_BUTTONS'] . '</label><label><input type="radio" class="radio" name="field_length" value="2"' . (($field_data['field_length'] == 2) ? ' checked="checked"' : '') . ' onchange="document.getElementById(\'add_profile_field\').submit();" /> ' . $this->user->lang['CHECKBOX'] . '</label>'),
|
||||||
|
1 => array('TITLE' => $this->user->lang['DEFAULT_VALUE'], 'FIELD' => $this->process_field_row('preview', $profile_row)),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_option_values()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'field_length' => 1,
|
||||||
|
'field_minlen' => 0,
|
||||||
|
'field_maxlen' => 0,
|
||||||
|
'field_validation' => '',
|
||||||
|
'field_novalue' => 0,
|
||||||
|
'field_default_value' => 0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_field_value($field_data)
|
||||||
|
{
|
||||||
|
return $field_data['field_default_value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_field($profile_row)
|
||||||
|
{
|
||||||
|
$var_name = 'pf_' . $profile_row['field_ident'];
|
||||||
|
|
||||||
|
// Checkbox
|
||||||
|
if ($profile_row['field_length'] == 2)
|
||||||
|
{
|
||||||
|
return ($this->request->is_set($var_name)) ? 1 : 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return $this->request->variable($var_name, (int) $profile_row['field_default_value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_profile_field(&$field_value, $field_data)
|
||||||
|
{
|
||||||
|
$field_value = (bool) $field_value;
|
||||||
|
|
||||||
|
if (!$field_value && $field_data['field_required'])
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_REQUIRED', $field_data['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_value($field_value, $field_data)
|
||||||
|
{
|
||||||
|
$field_id = $field_data['field_id'];
|
||||||
|
$lang_id = $field_data['lang_id'];
|
||||||
|
|
||||||
|
if (!$this->lang_helper->is_set($field_id, $lang_id))
|
||||||
|
{
|
||||||
|
$this->lang_helper->get_option_lang($field_id, $lang_id, FIELD_BOOL, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$field_value && $field_data['field_show_novalue'])
|
||||||
|
{
|
||||||
|
$field_value = $field_data['field_default_value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($field_data['field_length'] == 1)
|
||||||
|
{
|
||||||
|
return ($this->lang_helper->is_set($field_id, $lang_id, (int) $field_value)) ? $this->lang_helper->get($field_id, $lang_id, (int) $field_value) : null;
|
||||||
|
}
|
||||||
|
else if (!$field_value)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return $this->lang_helper->is_set($field_id, $lang_id, $field_value + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function generate_field($profile_row, $preview_options = false)
|
||||||
|
{
|
||||||
|
$profile_row['field_ident'] = (isset($profile_row['var_name'])) ? $profile_row['var_name'] : 'pf_' . $profile_row['field_ident'];
|
||||||
|
$field_ident = $profile_row['field_ident'];
|
||||||
|
$default_value = $profile_row['field_default_value'];
|
||||||
|
|
||||||
|
// checkbox - set the value to "true" if it has been set to 1
|
||||||
|
if ($profile_row['field_length'] == 2)
|
||||||
|
{
|
||||||
|
$value = ($this->request->is_set($field_ident) && $this->request->variable($field_ident, $default_value) == 1) ? true : ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $default_value : $this->user->profile_fields[$field_ident]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$value = ($this->request->is_set($field_ident)) ? $this->request->variable($field_ident, $default_value) : ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $default_value : $this->user->profile_fields[$field_ident]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile_row['field_value'] = (int) $value;
|
||||||
|
$this->template->assign_block_vars('bool', array_change_key_case($profile_row, CASE_UPPER));
|
||||||
|
|
||||||
|
if ($profile_row['field_length'] == 1)
|
||||||
|
{
|
||||||
|
if (!$this->lang_helper->is_set($profile_row['field_id'], $profile_row['lang_id'], 1))
|
||||||
|
{
|
||||||
|
$this->lang_helper->get_option_lang($profile_row['field_id'], $profile_row['lang_id'], $this->get_service_name(), $preview_options);
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = $this->lang_helper->get($profile_row['field_id'], $profile_row['lang_id']);
|
||||||
|
foreach ($options as $option_id => $option_value)
|
||||||
|
{
|
||||||
|
$this->template->assign_block_vars('bool.options', array(
|
||||||
|
'OPTION_ID' => $option_id,
|
||||||
|
'CHECKED' => ($value == $option_id) ? ' checked="checked"' : '',
|
||||||
|
'VALUE' => $option_value,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_field_ident($field_data)
|
||||||
|
{
|
||||||
|
return ($field_data['field_length'] == '1') ? '' : 'pf_' . $field_data['field_ident'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_database_column_type()
|
||||||
|
{
|
||||||
|
return 'TINT:2';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_language_options($field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
'lang_name' => 'string',
|
||||||
|
'lang_options' => 'two_options',
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($field_data['lang_explain'])
|
||||||
|
{
|
||||||
|
$options['lang_explain'] = 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_language_options_input($field_data)
|
||||||
|
{
|
||||||
|
$field_data['l_lang_name'] = $this->request->variable('l_lang_name', array(0 => ''), true);
|
||||||
|
$field_data['l_lang_explain'] = $this->request->variable('l_lang_explain', array(0 => ''), true);
|
||||||
|
$field_data['l_lang_default_value'] = $this->request->variable('l_lang_default_value', array(0 => ''), true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @todo check if this line is correct...
|
||||||
|
$field_data['l_lang_default_value'] = $this->request->variable('l_lang_default_value', array(0 => array('')), true);
|
||||||
|
*/
|
||||||
|
$field_data['l_lang_options'] = $this->request->variable('l_lang_options', array(0 => array('')), true);
|
||||||
|
|
||||||
|
return $field_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function prepare_options_form(&$exclude_options, &$visibility_options)
|
||||||
|
{
|
||||||
|
$exclude_options[1][] = 'lang_options';
|
||||||
|
|
||||||
|
return $this->request->variable('lang_options', array(''), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_options_on_submit($error, $field_data)
|
||||||
|
{
|
||||||
|
if (empty($field_data['lang_options'][0]) || empty($field_data['lang_options'][1]))
|
||||||
|
{
|
||||||
|
$error[] = $this->user->lang['NO_FIELD_ENTRIES'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_excluded_options($key, $action, $current_value, &$field_data, $step)
|
||||||
|
{
|
||||||
|
if ($step == 2 && $key == 'field_default_value')
|
||||||
|
{
|
||||||
|
// 'field_length' == 1 defines radio buttons. Possible values are 1 or 2 only.
|
||||||
|
// 'field_length' == 2 defines checkbox. Possible values are 0 or 1 only.
|
||||||
|
// If we switch the type on step 2, we have to adjust field value.
|
||||||
|
// 1 is a common value for the checkbox and radio buttons.
|
||||||
|
|
||||||
|
// Adjust unchecked checkbox value.
|
||||||
|
// If we return or save settings from 2nd/3rd page
|
||||||
|
// and the checkbox is unchecked, set the value to 0.
|
||||||
|
if ($this->request->is_set('step') && !$this->request->is_set($key))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we switch to the checkbox type but former radio buttons value was 2,
|
||||||
|
// which is not the case for the checkbox, set it to 0 (unchecked).
|
||||||
|
if ($field_data['field_length'] == 2 && $current_value == 2)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// If we switch to the radio buttons but the former checkbox value was 0,
|
||||||
|
// which is not the case for the radio buttons, set it to 0.
|
||||||
|
else if ($field_data['field_length'] == 1 && $current_value == 0)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($step == 3 && ($field_data[$key] || $action != 'edit') && $key == 'l_lang_options')
|
||||||
|
{
|
||||||
|
$field_data[$key] = $this->request->variable($key, array(0 => array('')), true);
|
||||||
|
|
||||||
|
return $current_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::get_excluded_options($key, $action, $current_value, $field_data, $step);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function prepare_hidden_fields($step, $key, $action, &$field_data)
|
||||||
|
{
|
||||||
|
if ($key == 'l_lang_options' && $this->request->is_set('l_lang_options'))
|
||||||
|
{
|
||||||
|
return $this->request->variable($key, array(array('')), true);
|
||||||
|
}
|
||||||
|
else if ($key == 'field_default_value')
|
||||||
|
{
|
||||||
|
return $this->request->variable($key, $field_data[$key]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!$this->request->is_set($key))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if ($key == 'field_ident' && isset($field_data[$key]))
|
||||||
|
{
|
||||||
|
return $field_data[$key];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ($key == 'lang_options') ? $this->request->variable($key, array(''), true) : $this->request->variable($key, '', true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function display_options(&$template_vars, &$field_data)
|
||||||
|
{
|
||||||
|
// Initialize these array elements if we are creating a new field
|
||||||
|
if (!sizeof($field_data['lang_options']))
|
||||||
|
{
|
||||||
|
// No options have been defined for a boolean field.
|
||||||
|
$field_data['lang_options'][0] = '';
|
||||||
|
$field_data['lang_options'][1] = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$template_vars = array_merge($template_vars, array(
|
||||||
|
'S_BOOL' => true,
|
||||||
|
'L_LANG_OPTIONS_EXPLAIN' => $this->user->lang['BOOL_ENTRIES_EXPLAIN'],
|
||||||
|
'FIRST_LANG_OPTION' => $field_data['lang_options'][0],
|
||||||
|
'SECOND_LANG_OPTION' => $field_data['lang_options'][1],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
358
phpBB/phpbb/profilefields/type/type_date.php
Normal file
358
phpBB/phpbb/profilefields/type/type_date.php
Normal file
|
@ -0,0 +1,358 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
class type_date extends type_base
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Request object
|
||||||
|
* @var \phpbb\request\request
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template object
|
||||||
|
* @var \phpbb\template\template
|
||||||
|
*/
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User object
|
||||||
|
* @var \phpbb\user
|
||||||
|
*/
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\request\request $request Request object
|
||||||
|
* @param \phpbb\template\template $template Template object
|
||||||
|
* @param \phpbb\user $user User object
|
||||||
|
* @param string $language_table Table where the language strings are stored
|
||||||
|
*/
|
||||||
|
public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->template = $template;
|
||||||
|
$this->user = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_name_short()
|
||||||
|
{
|
||||||
|
return 'date';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_options($default_lang_id, $field_data)
|
||||||
|
{
|
||||||
|
$profile_row = array(
|
||||||
|
'var_name' => 'field_default_value',
|
||||||
|
'lang_name' => $field_data['lang_name'],
|
||||||
|
'lang_explain' => $field_data['lang_explain'],
|
||||||
|
'lang_id' => $default_lang_id,
|
||||||
|
'field_default_value' => $field_data['field_default_value'],
|
||||||
|
'field_ident' => 'field_default_value',
|
||||||
|
'field_type' => $this->get_service_name(),
|
||||||
|
'field_length' => $field_data['field_length'],
|
||||||
|
);
|
||||||
|
|
||||||
|
$always_now = request_var('always_now', -1);
|
||||||
|
if ($always_now == -1)
|
||||||
|
{
|
||||||
|
$s_checked = ($field_data['field_default_value'] == 'now') ? true : false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$s_checked = ($always_now) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = array(
|
||||||
|
0 => array('TITLE' => $this->user->lang['DEFAULT_VALUE'], 'FIELD' => $this->process_field_row('preview', $profile_row)),
|
||||||
|
1 => array('TITLE' => $this->user->lang['ALWAYS_TODAY'], 'FIELD' => '<label><input type="radio" class="radio" name="always_now" value="1"' . (($s_checked) ? ' checked="checked"' : '') . ' onchange="document.getElementById(\'add_profile_field\').submit();" /> ' . $this->user->lang['YES'] . '</label><label><input type="radio" class="radio" name="always_now" value="0"' . ((!$s_checked) ? ' checked="checked"' : '') . ' onchange="document.getElementById(\'add_profile_field\').submit();" /> ' . $this->user->lang['NO'] . '</label>'),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_option_values()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'field_length' => 10,
|
||||||
|
'field_minlen' => 10,
|
||||||
|
'field_maxlen' => 10,
|
||||||
|
'field_validation' => '',
|
||||||
|
'field_novalue' => ' 0- 0- 0',
|
||||||
|
'field_default_value' => ' 0- 0- 0',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_field_value($field_data)
|
||||||
|
{
|
||||||
|
if ($field_data['field_default_value'] == 'now')
|
||||||
|
{
|
||||||
|
$now = getdate();
|
||||||
|
$field_data['field_default_value'] = sprintf('%2d-%2d-%4d', $now['mday'], $now['mon'], $now['year']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $field_data['field_default_value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_field($profile_row)
|
||||||
|
{
|
||||||
|
$var_name = 'pf_' . $profile_row['field_ident'];
|
||||||
|
|
||||||
|
if (!$this->request->is_set($var_name . '_day'))
|
||||||
|
{
|
||||||
|
if ($profile_row['field_default_value'] == 'now')
|
||||||
|
{
|
||||||
|
$now = getdate();
|
||||||
|
$profile_row['field_default_value'] = sprintf('%2d-%2d-%4d', $now['mday'], $now['mon'], $now['year']);
|
||||||
|
}
|
||||||
|
list($day, $month, $year) = explode('-', $profile_row['field_default_value']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$day = $this->request->variable($var_name . '_day', 0);
|
||||||
|
$month = $this->request->variable($var_name . '_month', 0);
|
||||||
|
$year = $this->request->variable($var_name . '_year', 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('%2d-%2d-%4d', $day, $month, $year);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_profile_field(&$field_value, $field_data)
|
||||||
|
{
|
||||||
|
$field_validate = explode('-', $field_value);
|
||||||
|
|
||||||
|
$day = (isset($field_validate[0])) ? (int) $field_validate[0] : 0;
|
||||||
|
$month = (isset($field_validate[1])) ? (int) $field_validate[1] : 0;
|
||||||
|
$year = (isset($field_validate[2])) ? (int) $field_validate[2] : 0;
|
||||||
|
|
||||||
|
if ((!$day || !$month || !$year) && !$field_data['field_required'])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!$day || !$month || !$year) && $field_data['field_required'])
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_REQUIRED', $field_data['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($day < 0 || $day > 31 || $month < 0 || $month > 12 || ($year < 1901 && $year > 0) || $year > gmdate('Y', time()) + 50)
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_INVALID_DATE', $field_data['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checkdate($month, $day, $year) === false)
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_INVALID_DATE', $field_data['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_value($field_value, $field_data)
|
||||||
|
{
|
||||||
|
$date = explode('-', $field_value);
|
||||||
|
$day = (isset($date[0])) ? (int) $date[0] : 0;
|
||||||
|
$month = (isset($date[1])) ? (int) $date[1] : 0;
|
||||||
|
$year = (isset($date[2])) ? (int) $date[2] : 0;
|
||||||
|
|
||||||
|
if (!$day && !$month && !$year && !$field_data['field_show_novalue'])
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else if ($day && $month && $year)
|
||||||
|
{
|
||||||
|
// Date should display as the same date for every user regardless of timezone
|
||||||
|
return $this->user->create_datetime()
|
||||||
|
->setDate($year, $month, $day)
|
||||||
|
->setTime(0, 0, 0)
|
||||||
|
->format($this->user->lang['DATE_FORMAT'], true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $field_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function generate_field($profile_row, $preview_options = false)
|
||||||
|
{
|
||||||
|
$profile_row['field_ident'] = (isset($profile_row['var_name'])) ? $profile_row['var_name'] : 'pf_' . $profile_row['field_ident'];
|
||||||
|
$field_ident = $profile_row['field_ident'];
|
||||||
|
|
||||||
|
$now = getdate();
|
||||||
|
|
||||||
|
if (!$this->request->is_set($profile_row['field_ident'] . '_day'))
|
||||||
|
{
|
||||||
|
if ($profile_row['field_default_value'] == 'now')
|
||||||
|
{
|
||||||
|
$profile_row['field_default_value'] = sprintf('%2d-%2d-%4d', $now['mday'], $now['mon'], $now['year']);
|
||||||
|
}
|
||||||
|
list($day, $month, $year) = explode('-', ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $profile_row['field_default_value'] : $this->user->profile_fields[$field_ident]));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($preview_options !== false && $profile_row['field_default_value'] == 'now')
|
||||||
|
{
|
||||||
|
$profile_row['field_default_value'] = sprintf('%2d-%2d-%4d', $now['mday'], $now['mon'], $now['year']);
|
||||||
|
list($day, $month, $year) = explode('-', ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $profile_row['field_default_value'] : $this->user->profile_fields[$field_ident]));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$day = $this->request->variable($profile_row['field_ident'] . '_day', 0);
|
||||||
|
$month = $this->request->variable($profile_row['field_ident'] . '_month', 0);
|
||||||
|
$year = $this->request->variable($profile_row['field_ident'] . '_year', 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile_row['s_day_options'] = '<option value="0"' . ((!$day) ? ' selected="selected"' : '') . '>--</option>';
|
||||||
|
for ($i = 1; $i < 32; $i++)
|
||||||
|
{
|
||||||
|
$profile_row['s_day_options'] .= '<option value="' . $i . '"' . (($i == $day) ? ' selected="selected"' : '') . ">$i</option>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile_row['s_month_options'] = '<option value="0"' . ((!$month) ? ' selected="selected"' : '') . '>--</option>';
|
||||||
|
for ($i = 1; $i < 13; $i++)
|
||||||
|
{
|
||||||
|
$profile_row['s_month_options'] .= '<option value="' . $i . '"' . (($i == $month) ? ' selected="selected"' : '') . ">$i</option>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile_row['s_year_options'] = '<option value="0"' . ((!$year) ? ' selected="selected"' : '') . '>--</option>';
|
||||||
|
for ($i = $now['year'] - 100; $i <= $now['year'] + 100; $i++)
|
||||||
|
{
|
||||||
|
$profile_row['s_year_options'] .= '<option value="' . $i . '"' . (($i == $year) ? ' selected="selected"' : '') . ">$i</option>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile_row['field_value'] = 0;
|
||||||
|
$this->template->assign_block_vars('date', array_change_key_case($profile_row, CASE_UPPER));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_field_ident($field_data)
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_database_column_type()
|
||||||
|
{
|
||||||
|
return 'VCHAR:10';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_language_options($field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
'lang_name' => 'string',
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($field_data['lang_explain'])
|
||||||
|
{
|
||||||
|
$options['lang_explain'] = 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_excluded_options($key, $action, $current_value, &$field_data, $step)
|
||||||
|
{
|
||||||
|
if ($step == 2 && $key == 'field_default_value')
|
||||||
|
{
|
||||||
|
$always_now = $this->request->variable('always_now', -1);
|
||||||
|
|
||||||
|
if ($always_now == 1 || ($always_now === -1 && $current_value == 'now'))
|
||||||
|
{
|
||||||
|
$now = getdate();
|
||||||
|
|
||||||
|
$field_data['field_default_value_day'] = $now['mday'];
|
||||||
|
$field_data['field_default_value_month'] = $now['mon'];
|
||||||
|
$field_data['field_default_value_year'] = $now['year'];
|
||||||
|
$current_value = 'now';
|
||||||
|
$this->request->overwrite('field_default_value', $current_value, \phpbb\request\request_interface::POST);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($this->request->is_set('field_default_value_day'))
|
||||||
|
{
|
||||||
|
$field_data['field_default_value_day'] = $this->request->variable('field_default_value_day', 0);
|
||||||
|
$field_data['field_default_value_month'] = $this->request->variable('field_default_value_month', 0);
|
||||||
|
$field_data['field_default_value_year'] = $this->request->variable('field_default_value_year', 0);
|
||||||
|
$current_value = sprintf('%2d-%2d-%4d', $field_data['field_default_value_day'], $field_data['field_default_value_month'], $field_data['field_default_value_year']);
|
||||||
|
$this->request->overwrite('field_default_value', $current_value, \phpbb\request\request_interface::POST);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
list($field_data['field_default_value_day'], $field_data['field_default_value_month'], $field_data['field_default_value_year']) = explode('-', $current_value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $current_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return parent::get_excluded_options($key, $action, $current_value, $field_data, $step);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function prepare_hidden_fields($step, $key, $action, &$field_data)
|
||||||
|
{
|
||||||
|
if ($key == 'field_default_value')
|
||||||
|
{
|
||||||
|
$always_now = $this->request->variable('always_now', 0);
|
||||||
|
|
||||||
|
if ($always_now)
|
||||||
|
{
|
||||||
|
return 'now';
|
||||||
|
}
|
||||||
|
else if ($this->request->is_set('field_default_value_day'))
|
||||||
|
{
|
||||||
|
$field_data['field_default_value_day'] = $this->request->variable('field_default_value_day', 0);
|
||||||
|
$field_data['field_default_value_month'] = $this->request->variable('field_default_value_month', 0);
|
||||||
|
$field_data['field_default_value_year'] = $this->request->variable('field_default_value_year', 0);
|
||||||
|
return sprintf('%2d-%2d-%4d', $field_data['field_default_value_day'], $field_data['field_default_value_month'], $field_data['field_default_value_year']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::prepare_hidden_fields($step, $key, $action, $field_data);
|
||||||
|
}
|
||||||
|
}
|
298
phpBB/phpbb/profilefields/type/type_dropdown.php
Normal file
298
phpBB/phpbb/profilefields/type/type_dropdown.php
Normal file
|
@ -0,0 +1,298 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
class type_dropdown extends type_base
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Profile fields language helper
|
||||||
|
* @var \phpbb\profilefields\lang_helper
|
||||||
|
*/
|
||||||
|
protected $lang_helper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request object
|
||||||
|
* @var \phpbb\request\request
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template object
|
||||||
|
* @var \phpbb\template\template
|
||||||
|
*/
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User object
|
||||||
|
* @var \phpbb\user
|
||||||
|
*/
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\profilefields\lang_helper $lang_helper Profile fields language helper
|
||||||
|
* @param \phpbb\request\request $request Request object
|
||||||
|
* @param \phpbb\template\template $template Template object
|
||||||
|
* @param \phpbb\user $user User object
|
||||||
|
* @param string $language_table Table where the language strings are stored
|
||||||
|
*/
|
||||||
|
public function __construct(\phpbb\profilefields\lang_helper $lang_helper, \phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)
|
||||||
|
{
|
||||||
|
$this->lang_helper = $lang_helper;
|
||||||
|
$this->request = $request;
|
||||||
|
$this->template = $template;
|
||||||
|
$this->user = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_name_short()
|
||||||
|
{
|
||||||
|
return 'dropdown';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_options($default_lang_id, $field_data)
|
||||||
|
{
|
||||||
|
$profile_row[0] = array(
|
||||||
|
'var_name' => 'field_default_value',
|
||||||
|
'field_id' => 1,
|
||||||
|
'lang_name' => $field_data['lang_name'],
|
||||||
|
'lang_explain' => $field_data['lang_explain'],
|
||||||
|
'lang_id' => $default_lang_id,
|
||||||
|
'field_default_value' => $field_data['field_default_value'],
|
||||||
|
'field_ident' => 'field_default_value',
|
||||||
|
'field_type' => $this->get_service_name(),
|
||||||
|
'lang_options' => $field_data['lang_options'],
|
||||||
|
);
|
||||||
|
|
||||||
|
$profile_row[1] = $profile_row[0];
|
||||||
|
$profile_row[1]['var_name'] = 'field_novalue';
|
||||||
|
$profile_row[1]['field_ident'] = 'field_novalue';
|
||||||
|
$profile_row[1]['field_default_value'] = $field_data['field_novalue'];
|
||||||
|
|
||||||
|
$options = array(
|
||||||
|
0 => array('TITLE' => $this->user->lang['DEFAULT_VALUE'], 'FIELD' => $this->process_field_row('preview', $profile_row[0])),
|
||||||
|
1 => array('TITLE' => $this->user->lang['NO_VALUE_OPTION'], 'EXPLAIN' => $this->user->lang['NO_VALUE_OPTION_EXPLAIN'], 'FIELD' => $this->process_field_row('preview', $profile_row[1])),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_option_values()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'field_length' => 0,
|
||||||
|
'field_minlen' => 0,
|
||||||
|
'field_maxlen' => 5,
|
||||||
|
'field_validation' => '',
|
||||||
|
'field_novalue' => 0,
|
||||||
|
'field_default_value' => 0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_field_value($field_data)
|
||||||
|
{
|
||||||
|
return $field_data['field_default_value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_field($profile_row)
|
||||||
|
{
|
||||||
|
$var_name = 'pf_' . $profile_row['field_ident'];
|
||||||
|
return $this->request->variable($var_name, (int) $profile_row['field_default_value']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_profile_field(&$field_value, $field_data)
|
||||||
|
{
|
||||||
|
$field_value = (int) $field_value;
|
||||||
|
|
||||||
|
// retrieve option lang data if necessary
|
||||||
|
if (!$this->lang_helper->is_set($field_data['field_id'], $field_data['lang_id'], 1))
|
||||||
|
{
|
||||||
|
$this->lang_helper->get_option_lang($field_data['field_id'], $field_data['lang_id'], $this->get_service_name(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->lang_helper->is_set($field_data['field_id'], $field_data['lang_id'], $field_value))
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_INVALID_VALUE', $field_data['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($field_value == $field_data['field_novalue'] && $field_data['field_required'])
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_REQUIRED', $field_data['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_value($field_value, $field_data)
|
||||||
|
{
|
||||||
|
$field_id = $field_data['field_id'];
|
||||||
|
$lang_id = $field_data['lang_id'];
|
||||||
|
if (!$this->lang_helper->is_set($field_id, $lang_id))
|
||||||
|
{
|
||||||
|
$this->lang_helper->get_option_lang($field_id, $lang_id, $this->get_service_name(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($field_value == $field_data['field_novalue'] && !$field_data['field_show_novalue'])
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field_value = (int) $field_value;
|
||||||
|
|
||||||
|
// User not having a value assigned
|
||||||
|
if (!$this->lang_helper->is_set($field_id, $lang_id, $field_value))
|
||||||
|
{
|
||||||
|
if ($field_data['field_show_novalue'])
|
||||||
|
{
|
||||||
|
$field_value = $field_data['field_novalue'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->lang_helper->get($field_id, $lang_id, $field_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function generate_field($profile_row, $preview_options = false)
|
||||||
|
{
|
||||||
|
$profile_row['field_ident'] = (isset($profile_row['var_name'])) ? $profile_row['var_name'] : 'pf_' . $profile_row['field_ident'];
|
||||||
|
$field_ident = $profile_row['field_ident'];
|
||||||
|
$default_value = $profile_row['field_default_value'];
|
||||||
|
|
||||||
|
$value = ($this->request->is_set($field_ident)) ? $this->request->variable($field_ident, $default_value) : ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $default_value : $this->user->profile_fields[$field_ident]);
|
||||||
|
|
||||||
|
if (!$this->lang_helper->is_set($profile_row['field_id'], $profile_row['lang_id'], 1))
|
||||||
|
{
|
||||||
|
$this->lang_helper->get_option_lang($profile_row['field_id'], $profile_row['lang_id'], $this->get_service_name(), $preview_options);
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile_row['field_value'] = (int) $value;
|
||||||
|
$this->template->assign_block_vars('dropdown', array_change_key_case($profile_row, CASE_UPPER));
|
||||||
|
|
||||||
|
$options = $this->lang_helper->get($profile_row['field_id'], $profile_row['lang_id']);
|
||||||
|
foreach ($options as $option_id => $option_value)
|
||||||
|
{
|
||||||
|
$this->template->assign_block_vars('dropdown.options', array(
|
||||||
|
'OPTION_ID' => $option_id,
|
||||||
|
'SELECTED' => ($value == $option_id) ? ' selected="selected"' : '',
|
||||||
|
'VALUE' => $option_value,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_database_column_type()
|
||||||
|
{
|
||||||
|
return 'UINT';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_language_options($field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
'lang_name' => 'string',
|
||||||
|
'lang_options' => 'optionfield',
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($field_data['lang_explain'])
|
||||||
|
{
|
||||||
|
$options['lang_explain'] = 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function prepare_options_form(&$exclude_options, &$visibility_options)
|
||||||
|
{
|
||||||
|
$exclude_options[1][] = 'lang_options';
|
||||||
|
|
||||||
|
return $this->request->variable('lang_options', '', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_options_on_submit($error, $field_data)
|
||||||
|
{
|
||||||
|
if (!sizeof($field_data['lang_options']))
|
||||||
|
{
|
||||||
|
$error[] = $this->user->lang['NO_FIELD_ENTRIES'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_excluded_options($key, $action, $current_value, &$field_data, $step)
|
||||||
|
{
|
||||||
|
if ($step == 2 && $key == 'field_maxlen')
|
||||||
|
{
|
||||||
|
// Get the number of options if this key is 'field_maxlen'
|
||||||
|
return sizeof(explode("\n", $this->request->variable('lang_options', '', true)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return parent::get_excluded_options($key, $action, $current_value, $field_data, $step);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function display_options(&$template_vars, &$field_data)
|
||||||
|
{
|
||||||
|
// Initialize these array elements if we are creating a new field
|
||||||
|
if (!sizeof($field_data['lang_options']))
|
||||||
|
{
|
||||||
|
// No options have been defined for the dropdown menu
|
||||||
|
$field_data['lang_options'] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$template_vars = array_merge($template_vars, array(
|
||||||
|
'S_DROPDOWN' => true,
|
||||||
|
'L_LANG_OPTIONS_EXPLAIN' => $this->user->lang['DROPDOWN_ENTRIES_EXPLAIN'],
|
||||||
|
'LANG_OPTIONS' => implode("\n", $field_data['lang_options']),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
234
phpBB/phpbb/profilefields/type/type_int.php
Normal file
234
phpBB/phpbb/profilefields/type/type_int.php
Normal file
|
@ -0,0 +1,234 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
class type_int extends type_base
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Request object
|
||||||
|
* @var \phpbb\request\request
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template object
|
||||||
|
* @var \phpbb\template\template
|
||||||
|
*/
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User object
|
||||||
|
* @var \phpbb\user
|
||||||
|
*/
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\request\request $request Request object
|
||||||
|
* @param \phpbb\template\template $template Template object
|
||||||
|
* @param \phpbb\user $user User object
|
||||||
|
* @param string $language_table Table where the language strings are stored
|
||||||
|
*/
|
||||||
|
public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->template = $template;
|
||||||
|
$this->user = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_name_short()
|
||||||
|
{
|
||||||
|
return 'int';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_options($default_lang_id, $field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
0 => array('TITLE' => $this->user->lang['FIELD_LENGTH'], 'FIELD' => '<input type="number" min="0" max="99999" name="field_length" size="5" value="' . $field_data['field_length'] . '" />'),
|
||||||
|
1 => array('TITLE' => $this->user->lang['MIN_FIELD_NUMBER'], 'FIELD' => '<input type="number" min="0" max="99999" name="field_minlen" size="5" value="' . $field_data['field_minlen'] . '" />'),
|
||||||
|
2 => array('TITLE' => $this->user->lang['MAX_FIELD_NUMBER'], 'FIELD' => '<input type="number" min="0" max="99999" name="field_maxlen" size="5" value="' . $field_data['field_maxlen'] . '" />'),
|
||||||
|
3 => array('TITLE' => $this->user->lang['DEFAULT_VALUE'], 'FIELD' => '<input type="post" name="field_default_value" value="' . $field_data['field_default_value'] . '" />'),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_option_values()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'field_length' => 5,
|
||||||
|
'field_minlen' => 0,
|
||||||
|
'field_maxlen' => 100,
|
||||||
|
'field_validation' => '',
|
||||||
|
'field_novalue' => 0,
|
||||||
|
'field_default_value' => 0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_field_value($field_data)
|
||||||
|
{
|
||||||
|
if ($field_data['field_default_value'] === '')
|
||||||
|
{
|
||||||
|
// We cannot insert an empty string into an integer column.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $field_data['field_default_value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_field($profile_row)
|
||||||
|
{
|
||||||
|
$var_name = 'pf_' . $profile_row['field_ident'];
|
||||||
|
if ($this->request->is_set($var_name) && $this->request->variable($var_name, '') === '')
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return $this->request->variable($var_name, (int) $profile_row['field_default_value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_profile_field(&$field_value, $field_data)
|
||||||
|
{
|
||||||
|
if (trim($field_value) === '' && !$field_data['field_required'])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field_value = (int) $field_value;
|
||||||
|
|
||||||
|
if ($field_value < $field_data['field_minlen'])
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_TOO_SMALL', (int) $row['field_minlen'], $row['lang_name']);
|
||||||
|
}
|
||||||
|
else if ($field_value > $field_data['field_maxlen'])
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_TOO_LARGE', (int) $row['field_maxlen'], $row['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_value($field_value, $field_data)
|
||||||
|
{
|
||||||
|
if ($field_value === '' && !$field_data['field_show_novalue'])
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (int) $field_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function generate_field($profile_row, $preview_options = false)
|
||||||
|
{
|
||||||
|
$profile_row['field_ident'] = (isset($profile_row['var_name'])) ? $profile_row['var_name'] : 'pf_' . $profile_row['field_ident'];
|
||||||
|
$field_ident = $profile_row['field_ident'];
|
||||||
|
$default_value = $profile_row['field_default_value'];
|
||||||
|
|
||||||
|
if ($this->request->is_set($field_ident))
|
||||||
|
{
|
||||||
|
$value = ($this->request->variable($field_ident, '') === '') ? null : $this->request->variable($field_ident, $default_value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($preview_options === false && array_key_exists($field_ident, $this->user->profile_fields) && is_null($this->user->profile_fields[$field_ident]))
|
||||||
|
{
|
||||||
|
$value = null;
|
||||||
|
}
|
||||||
|
else if (!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false)
|
||||||
|
{
|
||||||
|
$value = $default_value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$value = $this->user->profile_fields[$field_ident];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile_row['field_value'] = (is_null($value) || $value === '') ? '' : (int) $value;
|
||||||
|
|
||||||
|
$this->template->assign_block_vars('int', array_change_key_case($profile_row, CASE_UPPER));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_field_ident($field_data)
|
||||||
|
{
|
||||||
|
return 'pf_' . $field_data['field_ident'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_database_column_type()
|
||||||
|
{
|
||||||
|
return 'BINT';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_language_options($field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
'lang_name' => 'string',
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($field_data['lang_explain'])
|
||||||
|
{
|
||||||
|
$options['lang_explain'] = 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_excluded_options($key, $action, $current_value, &$field_data, $step)
|
||||||
|
{
|
||||||
|
if ($step == 2 && $key == 'field_default_value')
|
||||||
|
{
|
||||||
|
// Permit an empty string
|
||||||
|
if ($action == 'create' && $this->request->variable('field_default_value', '') === '')
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::get_excluded_options($key, $action, $current_value, $field_data, $step);
|
||||||
|
}
|
||||||
|
}
|
177
phpBB/phpbb/profilefields/type/type_interface.php
Normal file
177
phpBB/phpbb/profilefields/type/type_interface.php
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
interface type_interface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the translated name of the type
|
||||||
|
*
|
||||||
|
* @return string Translated name of the field type
|
||||||
|
*/
|
||||||
|
public function get_name();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the short name of the type, used for error messages and template loops
|
||||||
|
*
|
||||||
|
* @return string lowercase version of the fields type
|
||||||
|
*/
|
||||||
|
public function get_name_short();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the name of service representing the type
|
||||||
|
*
|
||||||
|
* @return string lowercase version of the fields type
|
||||||
|
*/
|
||||||
|
public function get_service_name();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get dropdown options for second step in ACP
|
||||||
|
*
|
||||||
|
* @param string $default_lang_id ID of the default language
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @return array with the acp options
|
||||||
|
*/
|
||||||
|
public function get_options($default_lang_id, $field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get default values for the options of this type
|
||||||
|
*
|
||||||
|
* @return array with values like default field size and more
|
||||||
|
*/
|
||||||
|
public function get_default_option_values();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get default value for this type
|
||||||
|
*
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @return mixed default value for new users when no value is given
|
||||||
|
*/
|
||||||
|
public function get_default_field_value($field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get profile field value on submit
|
||||||
|
*
|
||||||
|
* @param array $profile_row Array with data for this field
|
||||||
|
* @return mixed Submitted value of the profile field
|
||||||
|
*/
|
||||||
|
public function get_profile_field($profile_row);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate entered profile field data
|
||||||
|
*
|
||||||
|
* @param mixed $field_value Field value to validate
|
||||||
|
* @param array $field_data Array with requirements of the field
|
||||||
|
* @return mixed String with the error message
|
||||||
|
*/
|
||||||
|
public function validate_profile_field(&$field_value, $field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Profile Value for display
|
||||||
|
*
|
||||||
|
* @param mixed $field_value Field value as stored in the database
|
||||||
|
* @param array $field_data Array with requirements of the field
|
||||||
|
* @return mixed Field value to display
|
||||||
|
*/
|
||||||
|
public function get_profile_value($field_value, $field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate the input field for display
|
||||||
|
*
|
||||||
|
* @param array $profile_row Array with data for this field
|
||||||
|
* @param mixed $preview_options When previewing we use different data
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function generate_field($profile_row, $preview_options = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the ident of the field
|
||||||
|
*
|
||||||
|
* Some types are multivalue, we can't give them a field_id
|
||||||
|
* as we would not know which to pick.
|
||||||
|
*
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @return string ident of the field
|
||||||
|
*/
|
||||||
|
public function get_field_ident($field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the column type for the database
|
||||||
|
*
|
||||||
|
* @return string Returns the database column type
|
||||||
|
*/
|
||||||
|
public function get_database_column_type();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the options we need to display for the language input fields in the ACP
|
||||||
|
*
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @return array Returns the language options we need to generate
|
||||||
|
*/
|
||||||
|
public function get_language_options($field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the input for the supplied language options
|
||||||
|
*
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @return array Returns the language options we need to generate
|
||||||
|
*/
|
||||||
|
public function get_language_options_input($field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows exclusion of options in single steps of the creation process
|
||||||
|
*
|
||||||
|
* @param array $exclude_options Array with options that should be excluded in the steps
|
||||||
|
* @param array $visibility_options Array with options responsible for the fields visibility
|
||||||
|
* @return mixed Returns the provided language options
|
||||||
|
*/
|
||||||
|
public function prepare_options_form(&$exclude_options, &$visibility_options);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows exclusion of options in single steps of the creation process
|
||||||
|
*
|
||||||
|
* @param array $error Array with error messages
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @return array Array with error messages
|
||||||
|
*/
|
||||||
|
public function validate_options_on_submit($error, $field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows manipulating the intended variables if needed
|
||||||
|
*
|
||||||
|
* @param string $key Name of the option
|
||||||
|
* @param string $action Currently performed action (create|edit)
|
||||||
|
* @param mixed $current_value Currently value of the option
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @param int $step Step on which the option is excluded
|
||||||
|
* @return mixed Final value of the option
|
||||||
|
*/
|
||||||
|
public function get_excluded_options($key, $action, $current_value, &$field_data, $step);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows manipulating the intended variables if needed
|
||||||
|
*
|
||||||
|
* @param string $key Name of the option
|
||||||
|
* @param int $step Step on which the option is hidden
|
||||||
|
* @param string $action Currently performed action (create|edit)
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @return mixed Final value of the option
|
||||||
|
*/
|
||||||
|
public function prepare_hidden_fields($step, $key, $action, &$field_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows assigning of additional template variables
|
||||||
|
*
|
||||||
|
* @param array $template_vars Template variables we are going to assign
|
||||||
|
* @param array $field_data Array with data for this field
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function display_options(&$template_vars, &$field_data);
|
||||||
|
}
|
156
phpBB/phpbb/profilefields/type/type_string.php
Normal file
156
phpBB/phpbb/profilefields/type/type_string.php
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
class type_string extends type_string_common
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Request object
|
||||||
|
* @var \phpbb\request\request
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template object
|
||||||
|
* @var \phpbb\template\template
|
||||||
|
*/
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User object
|
||||||
|
* @var \phpbb\user
|
||||||
|
*/
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\request\request $request Request object
|
||||||
|
* @param \phpbb\template\template $template Template object
|
||||||
|
* @param \phpbb\user $user User object
|
||||||
|
* @param string $language_table Table where the language strings are stored
|
||||||
|
*/
|
||||||
|
public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->template = $template;
|
||||||
|
$this->user = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_name_short()
|
||||||
|
{
|
||||||
|
return 'string';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_options($default_lang_id, $field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
0 => array('TITLE' => $this->user->lang['FIELD_LENGTH'], 'FIELD' => '<input type="number" min="0" name="field_length" size="5" value="' . $field_data['field_length'] . '" />'),
|
||||||
|
1 => array('TITLE' => $this->user->lang['MIN_FIELD_CHARS'], 'FIELD' => '<input type="number" min="0" name="field_minlen" size="5" value="' . $field_data['field_minlen'] . '" />'),
|
||||||
|
2 => array('TITLE' => $this->user->lang['MAX_FIELD_CHARS'], 'FIELD' => '<input type="number" min="0" size="5" value="' . $field_data['field_maxlen'] . '" />'),
|
||||||
|
3 => array('TITLE' => $this->user->lang['FIELD_VALIDATION'], 'FIELD' => '<select name="field_validation">' . $this->validate_options($field_data) . '</select>'),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_option_values()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'field_length' => 10,
|
||||||
|
'field_minlen' => 0,
|
||||||
|
'field_maxlen' => 20,
|
||||||
|
'field_validation' => '.*',
|
||||||
|
'field_novalue' => '',
|
||||||
|
'field_default_value' => '',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_field($profile_row)
|
||||||
|
{
|
||||||
|
$var_name = 'pf_' . $profile_row['field_ident'];
|
||||||
|
return $this->request->variable($var_name, (string) $profile_row['field_default_value'], true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_profile_field(&$field_value, $field_data)
|
||||||
|
{
|
||||||
|
return $this->validate_string_profile_field('string', $field_value, $field_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function generate_field($profile_row, $preview_options = false)
|
||||||
|
{
|
||||||
|
$profile_row['field_ident'] = (isset($profile_row['var_name'])) ? $profile_row['var_name'] : 'pf_' . $profile_row['field_ident'];
|
||||||
|
$field_ident = $profile_row['field_ident'];
|
||||||
|
$default_value = $profile_row['lang_default_value'];
|
||||||
|
$profile_row['field_value'] = ($this->request->is_set($field_ident)) ? $this->request->variable($field_ident, $default_value, true) : ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $default_value : $this->user->profile_fields[$field_ident]);
|
||||||
|
|
||||||
|
$this->template->assign_block_vars('string', array_change_key_case($profile_row, CASE_UPPER));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_database_column_type()
|
||||||
|
{
|
||||||
|
return 'VCHAR';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_language_options($field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
'lang_name' => 'string',
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($field_data['lang_explain'])
|
||||||
|
{
|
||||||
|
$options['lang_explain'] = 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen($field_data['lang_default_value']))
|
||||||
|
{
|
||||||
|
$options['lang_default_value'] = 'string';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function display_options(&$template_vars, &$field_data)
|
||||||
|
{
|
||||||
|
$template_vars = array_merge($template_vars, array(
|
||||||
|
'S_STRING' => true,
|
||||||
|
'L_DEFAULT_VALUE_EXPLAIN' => $this->user->lang['STRING_DEFAULT_VALUE_EXPLAIN'],
|
||||||
|
'LANG_DEFAULT_VALUE' => $field_data['lang_default_value'],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
114
phpBB/phpbb/profilefields/type/type_string_common.php
Normal file
114
phpBB/phpbb/profilefields/type/type_string_common.php
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
abstract class type_string_common extends type_base
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Return possible validation options
|
||||||
|
*/
|
||||||
|
function validate_options($field_data)
|
||||||
|
{
|
||||||
|
$validate_ary = array('CHARS_ANY' => '.*', 'NUMBERS_ONLY' => '[0-9]+', 'ALPHA_ONLY' => '[\w]+', 'ALPHA_SPACERS' => '[\w_\+\. \-\[\]]+');
|
||||||
|
|
||||||
|
$validate_options = '';
|
||||||
|
foreach ($validate_ary as $lang => $value)
|
||||||
|
{
|
||||||
|
$selected = ($field_data['field_validation'] == $value) ? ' selected="selected"' : '';
|
||||||
|
$validate_options .= '<option value="' . $value . '"' . $selected . '>' . $this->user->lang[$lang] . '</option>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $validate_options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_field_value($field_data)
|
||||||
|
{
|
||||||
|
return $field_data['lang_default_value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate entered profile field data
|
||||||
|
*
|
||||||
|
* @param string $field_type Field type (string or text)
|
||||||
|
* @param mixed $field_value Field value to validate
|
||||||
|
* @param array $field_data Array with requirements of the field
|
||||||
|
* @return mixed String with key of the error language string, false otherwise
|
||||||
|
*/
|
||||||
|
public function validate_string_profile_field($field_type, &$field_value, $field_data)
|
||||||
|
{
|
||||||
|
if (trim($field_value) === '' && !$field_data['field_required'])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (trim($field_value) === '' && $field_data['field_required'])
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_REQUIRED', $field_data['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($field_data['field_minlen'] && utf8_strlen($field_value) < $field_data['field_minlen'])
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_TOO_SHORT', (int) $row['field_minlen'], $row['lang_name']);
|
||||||
|
}
|
||||||
|
else if ($field_data['field_maxlen'] && utf8_strlen($field_value) > $field_data['field_maxlen'])
|
||||||
|
{
|
||||||
|
return $this->user->lang('FIELD_TOO_LONG', (int) $row['field_maxlen'], $row['lang_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($field_data['field_validation']) && $field_data['field_validation'] != '.*')
|
||||||
|
{
|
||||||
|
$field_validate = ($field_type != 'text') ? $field_value : bbcode_nl2br($field_value);
|
||||||
|
if (!preg_match('#^' . str_replace('\\\\', '\\', $field_data['field_validation']) . '$#i', $field_validate))
|
||||||
|
{
|
||||||
|
switch ($row['field_validation'])
|
||||||
|
{
|
||||||
|
case '[0-9]+':
|
||||||
|
return $this->user->lang('FIELD_INVALID_CHARS_NUMBERS_ONLY', $row['lang_name']);
|
||||||
|
|
||||||
|
case '[\w]+':
|
||||||
|
return $this->user->lang('FIELD_INVALID_CHARS_ALPHA_ONLY', $row['lang_name']);
|
||||||
|
|
||||||
|
case '[\w_\+\. \-\[\]]+':
|
||||||
|
return $this->user->lang('FIELD_INVALID_CHARS_SPACERS_ONLY', $row['lang_name']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_value($field_value, $field_data)
|
||||||
|
{
|
||||||
|
if (!$field_value && !$field_data['field_show_novalue'])
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field_value = make_clickable($field_value);
|
||||||
|
$field_value = censor_text($field_value);
|
||||||
|
$field_value = bbcode_nl2br($field_value);
|
||||||
|
return $field_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function prepare_options_form(&$exclude_options, &$visibility_options)
|
||||||
|
{
|
||||||
|
$exclude_options[1][] = 'lang_default_value';
|
||||||
|
|
||||||
|
return $this->request->variable('lang_options', '', true);
|
||||||
|
}
|
||||||
|
}
|
201
phpBB/phpbb/profilefields/type/type_text.php
Normal file
201
phpBB/phpbb/profilefields/type/type_text.php
Normal file
|
@ -0,0 +1,201 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package phpBB
|
||||||
|
* @copyright (c) 2014 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace phpbb\profilefields\type;
|
||||||
|
|
||||||
|
class type_text extends type_string_common
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Request object
|
||||||
|
* @var \phpbb\request\request
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template object
|
||||||
|
* @var \phpbb\template\template
|
||||||
|
*/
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User object
|
||||||
|
* @var \phpbb\user
|
||||||
|
*/
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct
|
||||||
|
*
|
||||||
|
* @param \phpbb\request\request $request Request object
|
||||||
|
* @param \phpbb\template\template $template Template object
|
||||||
|
* @param \phpbb\user $user User object
|
||||||
|
* @param string $language_table Table where the language strings are stored
|
||||||
|
*/
|
||||||
|
public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->template = $template;
|
||||||
|
$this->user = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_name_short()
|
||||||
|
{
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_options($default_lang_id, $field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
0 => array('TITLE' => $this->user->lang['FIELD_LENGTH'], 'FIELD' => '<input type="number" min="0" max="99999" name="rows" size="5" value="' . $field_data['rows'] . '" /> ' . $this->user->lang['ROWS'] . '</dd><dd><input type="number" min="0" max="99999" name="columns" size="5" value="' . $field_data['columns'] . '" /> ' . $this->user->lang['COLUMNS'] . ' <input type="hidden" name="field_length" value="' . $field_data['field_length'] . '" />'),
|
||||||
|
1 => array('TITLE' => $this->user->lang['MIN_FIELD_CHARS'], 'FIELD' => '<input type="number" min="0" max="9999999999" name="field_minlen" size="10" value="' . $field_data['field_minlen'] . '" />'),
|
||||||
|
2 => array('TITLE' => $this->user->lang['MAX_FIELD_CHARS'], 'FIELD' => '<input type="number" min="0" max="9999999999" name="field_maxlen" size="10" value="' . $field_data['field_maxlen'] . '" />'),
|
||||||
|
3 => array('TITLE' => $this->user->lang['FIELD_VALIDATION'], 'FIELD' => '<select name="field_validation">' . $this->validate_options($field_data) . '</select>'),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_default_option_values()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'field_length' => '5|80',
|
||||||
|
'field_minlen' => 0,
|
||||||
|
'field_maxlen' => 1000,
|
||||||
|
'field_validation' => '.*',
|
||||||
|
'field_novalue' => '',
|
||||||
|
'field_default_value' => '',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_profile_field($profile_row)
|
||||||
|
{
|
||||||
|
$var_name = 'pf_' . $profile_row['field_ident'];
|
||||||
|
return $this->request->variable($var_name, (string) $profile_row['field_default_value'], true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function validate_profile_field(&$field_value, $field_data)
|
||||||
|
{
|
||||||
|
return $this->validate_string_profile_field('text', $field_value, $field_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function generate_field($profile_row, $preview_options = false)
|
||||||
|
{
|
||||||
|
$field_length = explode('|', $profile_row['field_length']);
|
||||||
|
$profile_row['field_rows'] = $field_length[0];
|
||||||
|
$profile_row['field_cols'] = $field_length[1];
|
||||||
|
$profile_row['field_ident'] = (isset($profile_row['var_name'])) ? $profile_row['var_name'] : 'pf_' . $profile_row['field_ident'];
|
||||||
|
$field_ident = $profile_row['field_ident'];
|
||||||
|
$default_value = $profile_row['lang_default_value'];
|
||||||
|
|
||||||
|
$profile_row['field_value'] = ($this->request->is_set($field_ident)) ? $this->request->variable($field_ident, $default_value, true) : ((!isset($this->user->profile_fields[$field_ident]) || $preview_options !== false) ? $default_value : $this->user->profile_fields[$field_ident]);
|
||||||
|
|
||||||
|
$this->template->assign_block_vars('text', array_change_key_case($profile_row, CASE_UPPER));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_database_column_type()
|
||||||
|
{
|
||||||
|
return 'MTEXT';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_language_options($field_data)
|
||||||
|
{
|
||||||
|
$options = array(
|
||||||
|
'lang_name' => 'string',
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($field_data['lang_explain'])
|
||||||
|
{
|
||||||
|
$options['lang_explain'] = 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen($field_data['lang_default_value']))
|
||||||
|
{
|
||||||
|
$options['lang_default_value'] = 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function get_excluded_options($key, $action, $current_value, &$field_data, $step)
|
||||||
|
{
|
||||||
|
if ($step == 2 && $key == 'field_length')
|
||||||
|
{
|
||||||
|
if ($this->request->is_set('rows'))
|
||||||
|
{
|
||||||
|
$field_data['rows'] = $this->request->variable('rows', 0);
|
||||||
|
$field_data['columns'] = $this->request->variable('columns', 0);
|
||||||
|
$current_value = $field_data['rows'] . '|' . $field_data['columns'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$row_col = explode('|', $current_value);
|
||||||
|
$field_data['rows'] = $row_col[0];
|
||||||
|
$field_data['columns'] = $row_col[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $current_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::get_excluded_options($key, $action, $current_value, $field_data, $step);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function prepare_hidden_fields($step, $key, $action, &$field_data)
|
||||||
|
{
|
||||||
|
if ($key == 'field_length' && $this->request->is_set('rows'))
|
||||||
|
{
|
||||||
|
$field_data['rows'] = $this->request->variable('rows', 0);
|
||||||
|
$field_data['columns'] = $this->request->variable('columns', 0);
|
||||||
|
return $field_data['rows'] . '|' . $field_data['columns'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::prepare_hidden_fields($step, $key, $action, $field_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function display_options(&$template_vars, &$field_data)
|
||||||
|
{
|
||||||
|
$template_vars = array_merge($template_vars, array(
|
||||||
|
'S_TEXT' => true,
|
||||||
|
'L_DEFAULT_VALUE_EXPLAIN' => $this->user->lang['TEXT_DEFAULT_VALUE_EXPLAIN'],
|
||||||
|
'LANG_DEFAULT_VALUE' => $field_data['lang_default_value'],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,31 +0,0 @@
|
||||||
<!-- BEGIN dropdown -->
|
|
||||||
<select name="{dropdown.FIELD_IDENT}" id="{dropdown.FIELD_IDENT}">
|
|
||||||
<!-- BEGIN options --><option value="{dropdown.options.OPTION_ID}"{dropdown.options.SELECTED}>{dropdown.options.VALUE}</option><!-- END options -->
|
|
||||||
</select>
|
|
||||||
<!-- END dropdown -->
|
|
||||||
|
|
||||||
<!-- BEGIN text -->
|
|
||||||
<textarea name="{text.FIELD_IDENT}" id="{text.FIELD_IDENT}" rows="{text.FIELD_ROWS}" cols="{text.FIELD_COLS}" class="inputbox autowidth">{text.FIELD_VALUE}</textarea>
|
|
||||||
<!-- END text -->
|
|
||||||
|
|
||||||
<!-- BEGIN string -->
|
|
||||||
<input type="text" class="inputbox autowidth" name="{string.FIELD_IDENT}" id="{string.FIELD_IDENT}" size="{string.FIELD_LENGTH}" maxlength="{string.FIELD_MAXLEN}" value="{string.FIELD_VALUE}" />
|
|
||||||
<!-- END string -->
|
|
||||||
|
|
||||||
<!-- BEGIN bool -->
|
|
||||||
<!-- IF bool.FIELD_LENGTH eq 1 -->
|
|
||||||
<!-- BEGIN options --><label for="{bool.FIELD_IDENT}_{bool.options.OPTION_ID}"><input type="radio" class="radio" name="{bool.FIELD_IDENT}" id="{bool.FIELD_IDENT}_{bool.options.OPTION_ID}" value="{bool.options.OPTION_ID}"{bool.options.CHECKED} /> {bool.options.VALUE}</label> <!-- END options -->
|
|
||||||
<!-- ELSE -->
|
|
||||||
<input type="checkbox" class="radio" name="{bool.FIELD_IDENT}" id="{bool.FIELD_IDENT}"<!-- IF bool.FIELD_VALUE --> checked="checked"<!-- ENDIF --> />
|
|
||||||
<!-- ENDIF -->
|
|
||||||
<!-- END bool -->
|
|
||||||
|
|
||||||
<!-- BEGIN int -->
|
|
||||||
<input type="number" min="{int.FIELD_MINLEN}" max="{int.FIELD_MAXLEN}" class="inputbox autowidth" name="{int.FIELD_IDENT}" id="{int.FIELD_IDENT}" size="{int.FIELD_LENGTH}" value="{int.FIELD_VALUE}" />
|
|
||||||
<!-- END int -->
|
|
||||||
|
|
||||||
<!-- BEGIN date -->
|
|
||||||
<label for="{date.FIELD_IDENT}_day">{L_DAY}{L_COLON} <select name="{date.FIELD_IDENT}_day" id="{date.FIELD_IDENT}_day">{date.S_DAY_OPTIONS}</select></label>
|
|
||||||
<label for="{date.FIELD_IDENT}_month">{L_MONTH}{L_COLON} <select name="{date.FIELD_IDENT}_month" id="{date.FIELD_IDENT}_month">{date.S_MONTH_OPTIONS}</select></label>
|
|
||||||
<label for="{date.FIELD_IDENT}_year">{L_YEAR}{L_COLON} <select name="{date.FIELD_IDENT}_year" id="{date.FIELD_IDENT}_year">{date.S_YEAR_OPTIONS}</select></label>
|
|
||||||
<!-- END date -->
|
|
7
phpBB/styles/prosilver/template/profilefields/bool.html
Normal file
7
phpBB/styles/prosilver/template/profilefields/bool.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<!-- BEGIN bool -->
|
||||||
|
<!-- IF bool.FIELD_LENGTH eq 1 -->
|
||||||
|
<!-- BEGIN options --><label for="{bool.FIELD_IDENT}_{bool.options.OPTION_ID}"><input type="radio" class="radio" name="{bool.FIELD_IDENT}" id="{bool.FIELD_IDENT}_{bool.options.OPTION_ID}" value="{bool.options.OPTION_ID}"{bool.options.CHECKED} /> {bool.options.VALUE}</label> <!-- END options -->
|
||||||
|
<!-- ELSE -->
|
||||||
|
<input type="checkbox" class="radio" name="{bool.FIELD_IDENT}" id="{bool.FIELD_IDENT}"<!-- IF bool.FIELD_VALUE --> checked="checked"<!-- ENDIF --> />
|
||||||
|
<!-- ENDIF -->
|
||||||
|
<!-- END bool -->
|
5
phpBB/styles/prosilver/template/profilefields/date.html
Normal file
5
phpBB/styles/prosilver/template/profilefields/date.html
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<!-- BEGIN date -->
|
||||||
|
<label for="{date.FIELD_IDENT}_day">{L_DAY}{L_COLON} <select name="{date.FIELD_IDENT}_day" id="{date.FIELD_IDENT}_day">{date.S_DAY_OPTIONS}</select></label>
|
||||||
|
<label for="{date.FIELD_IDENT}_month">{L_MONTH}{L_COLON} <select name="{date.FIELD_IDENT}_month" id="{date.FIELD_IDENT}_month">{date.S_MONTH_OPTIONS}</select></label>
|
||||||
|
<label for="{date.FIELD_IDENT}_year">{L_YEAR}{L_COLON} <select name="{date.FIELD_IDENT}_year" id="{date.FIELD_IDENT}_year">{date.S_YEAR_OPTIONS}</select></label>
|
||||||
|
<!-- END date -->
|
|
@ -0,0 +1,5 @@
|
||||||
|
<!-- BEGIN dropdown -->
|
||||||
|
<select name="{dropdown.FIELD_IDENT}" id="{dropdown.FIELD_IDENT}">
|
||||||
|
<!-- BEGIN options --><option value="{dropdown.options.OPTION_ID}"{dropdown.options.SELECTED}>{dropdown.options.VALUE}</option><!-- END options -->
|
||||||
|
</select>
|
||||||
|
<!-- END dropdown -->
|
3
phpBB/styles/prosilver/template/profilefields/int.html
Normal file
3
phpBB/styles/prosilver/template/profilefields/int.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<!-- BEGIN int -->
|
||||||
|
<input type="number" min="{int.FIELD_MINLEN}" max="{int.FIELD_MAXLEN}" class="inputbox autowidth" name="{int.FIELD_IDENT}" id="{int.FIELD_IDENT}" size="{int.FIELD_LENGTH}" value="{int.FIELD_VALUE}" />
|
||||||
|
<!-- END int -->
|
|
@ -0,0 +1,3 @@
|
||||||
|
<!-- BEGIN string -->
|
||||||
|
<input type="text" class="inputbox autowidth" name="{string.FIELD_IDENT}" id="{string.FIELD_IDENT}" size="{string.FIELD_LENGTH}" maxlength="{string.FIELD_MAXLEN}" value="{string.FIELD_VALUE}" />
|
||||||
|
<!-- END string -->
|
3
phpBB/styles/prosilver/template/profilefields/text.html
Normal file
3
phpBB/styles/prosilver/template/profilefields/text.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<!-- BEGIN text -->
|
||||||
|
<textarea name="{text.FIELD_IDENT}" id="{text.FIELD_IDENT}" rows="{text.FIELD_ROWS}" cols="{text.FIELD_COLS}" class="inputbox">{text.FIELD_VALUE}</textarea>
|
||||||
|
<!-- END text -->
|
|
@ -1265,11 +1265,7 @@ $db->sql_freeresult($result);
|
||||||
// Load custom profile fields
|
// Load custom profile fields
|
||||||
if ($config['load_cpf_viewtopic'])
|
if ($config['load_cpf_viewtopic'])
|
||||||
{
|
{
|
||||||
if (!class_exists('custom_profile'))
|
$cp = $phpbb_container->get('profilefields.manager');
|
||||||
{
|
|
||||||
include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
|
|
||||||
}
|
|
||||||
$cp = new custom_profile();
|
|
||||||
|
|
||||||
// Grab all profile fields from users in id cache for later use - similar to the poster cache
|
// Grab all profile fields from users in id cache for later use - similar to the poster cache
|
||||||
$profile_fields_tmp = $cp->generate_profile_fields_template('grab', $id_cache);
|
$profile_fields_tmp = $cp->generate_profile_fields_template('grab', $id_cache);
|
||||||
|
|
|
@ -7,49 +7,75 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions_profile_fields.php';
|
|
||||||
|
|
||||||
class phpbb_profile_custom_test extends phpbb_database_test_case
|
class phpbb_profile_custom_test extends phpbb_database_test_case
|
||||||
{
|
{
|
||||||
public function getDataSet()
|
public function getDataSet()
|
||||||
{
|
{
|
||||||
return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/profile_fields.xml');
|
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/profile_fields.xml');
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function dropdownFields()
|
static public function dropdown_fields()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
// note, there is an offset of 1 between option_id (0-indexed)
|
// note, there is an offset of 1 between option_id (0-indexed)
|
||||||
// in the database and values (1-indexed) to avoid problems with
|
// in the database and values (1-indexed) to avoid problems with
|
||||||
// transmitting 0 in an HTML form
|
// transmitting 0 in an HTML form
|
||||||
// required, value, expected
|
// required, value, expected
|
||||||
array(1, '0', 'FIELD_INVALID_VALUE', 'Required field should throw error for out-of-range value'),
|
array(1, '0', 'FIELD_INVALID_VALUE-field', 'Required field should throw error for out-of-range value'),
|
||||||
array(1, '1', 'FIELD_REQUIRED', 'Required field should throw error for default value'),
|
array(1, '1', 'FIELD_REQUIRED-field', 'Required field should throw error for default value'),
|
||||||
array(1, '2', false, 'Required field should accept non-default value'),
|
array(1, '2', false, 'Required field should accept non-default value'),
|
||||||
array(0, '0', 'FIELD_INVALID_VALUE', 'Optional field should throw error for out-of-range value'),
|
array(0, '0', 'FIELD_INVALID_VALUE-field', 'Optional field should throw error for out-of-range value'),
|
||||||
array(0, '1', false, 'Optional field should accept default value'),
|
array(0, '1', false, 'Optional field should accept default value'),
|
||||||
array(0, '2', false, 'Optional field should accept non-default value'),
|
array(0, '2', false, 'Optional field should accept non-default value'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider dropdownFields
|
* @dataProvider dropdown_fields
|
||||||
*/
|
*/
|
||||||
public function test_dropdown_validate($field_required, $field_value, $expected, $description)
|
public function test_dropdown_validate($field_required, $field_value, $expected, $description)
|
||||||
{
|
{
|
||||||
global $db;
|
global $db, $table_prefix;
|
||||||
$db = $this->new_dbal();
|
$db = $this->new_dbal();
|
||||||
|
|
||||||
$field_data = array(
|
$field_data = array(
|
||||||
'field_id' => 1,
|
'field_id' => 1,
|
||||||
'lang_id' => 1,
|
'lang_id' => 1,
|
||||||
|
'lang_name' => 'field',
|
||||||
'field_novalue' => 1,
|
'field_novalue' => 1,
|
||||||
'field_required' => $field_required,
|
'field_required' => $field_required,
|
||||||
);
|
);
|
||||||
|
$user = $this->getMock('\phpbb\user');
|
||||||
|
$user->expects($this->any())
|
||||||
|
->method('lang')
|
||||||
|
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||||
|
|
||||||
$cp = new custom_profile;
|
$request = $this->getMock('\phpbb\request\request');
|
||||||
$result = $cp->validate_profile_field(FIELD_DROPDOWN, $field_value, $field_data);
|
$template = $this->getMock('\phpbb\template\template');
|
||||||
|
|
||||||
|
$cp = new \phpbb\profilefields\type\type_dropdown(
|
||||||
|
new \phpbb\profilefields\lang_helper($db, $table_prefix . 'profile_fields_lang'),
|
||||||
|
new \phpbb\profilefields\profilefields(
|
||||||
|
$this->getMock('\phpbb\auth\auth'),
|
||||||
|
$db,
|
||||||
|
$request,
|
||||||
|
$template,
|
||||||
|
$user,
|
||||||
|
$table_prefix . 'profile_fields',
|
||||||
|
$table_prefix . 'profile_lang',
|
||||||
|
$table_prefix . 'profile_fields_data'
|
||||||
|
),
|
||||||
|
$request,
|
||||||
|
$template,
|
||||||
|
$user
|
||||||
|
);
|
||||||
|
$result = $cp->validate_profile_field($field_value, $field_data);
|
||||||
|
|
||||||
$this->assertEquals($expected, $result, $description);
|
$this->assertEquals($expected, $result, $description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function return_callback_implode()
|
||||||
|
{
|
||||||
|
return implode('-', func_get_args());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,21 +10,21 @@
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
<value>5</value>
|
<value>profilefields.type.dropdown</value>
|
||||||
<value>Default Option</value>
|
<value>Default Option</value>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
<value>5</value>
|
<value>profilefields.type.dropdown</value>
|
||||||
<value>First Alternative</value>
|
<value>First Alternative</value>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
<value>5</value>
|
<value>profilefields.type.dropdown</value>
|
||||||
<value>Third Alternative</value>
|
<value>Third Alternative</value>
|
||||||
</row>
|
</row>
|
||||||
</table>
|
</table>
|
||||||
|
|
Loading…
Add table
Reference in a new issue