Merge branch 'develop-ascraeus' into develop

* develop-ascraeus:
  [ticket/12759] Fix type_bool and type_dropdown's UCP fields
  [ticket/12759] Remove lang_helper from profilefields_manager
  [ticket/12759] Cache all lang_options in lang_helper instead
  [ticket/12759] Extra line in profilefields_manager
  [ticket/12759] Cache lang_options for pm_viewmessage
  [ticket/12759] Cache lang_options on memberlist
  [ticket/12759] Add phpDoc comments to explain get_option_lang
  [ticket/12759] Little code cleanup
  [ticket/12759] Make sure $field_id has unique elements
  [ticket/12759] Cache the lang options earlier
  [ticket/12759] Cache lang options for all fields while displaying
  [ticket/12759] Allow multiple fields to be loaded via get_option_lang
This commit is contained in:
Joas Schilling 2014-06-27 15:20:55 +02:00
commit 79e909dcda
3 changed files with 55 additions and 34 deletions

View file

@ -49,43 +49,50 @@ class lang_helper
}
/**
* Get language entries for options and store them here for later use
* Loads preview options into language entries for options
*
* @param int $field_id
* @param int $lang_id
* @param mixed $preview_options
*/
public function get_option_lang($field_id, $lang_id, $field_type, $preview_options)
public function load_preview_options($field_id, $lang_id, $preview_options)
{
if ($preview_options !== false)
{
$lang_options = (!is_array($preview_options)) ? explode("\n", $preview_options) : $preview_options;
$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
foreach ($lang_options as $num => $var)
{
$sql = 'SELECT option_id, lang_value
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;
}
}
/**
* Fetches language entries for options from DB
*
* @param int $lang_id
*/
public function load_option_lang($lang_id)
{
$sql = 'SELECT field_id, 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) . "'
WHERE lang_id = ' . (int) $lang_id . "
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);
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
{
$this->options_lang[$row['field_id']][$lang_id][($row['option_id'] + 1)] = $row['lang_value'];
}
$this->db->sql_freeresult($result);
}
/**

View file

@ -155,7 +155,7 @@ class type_bool extends type_base
if (!$this->lang_helper->is_set($field_id, $lang_id))
{
$this->lang_helper->get_option_lang($field_id, $lang_id, FIELD_BOOL, false);
$this->lang_helper->load_option_lang($lang_id);
}
if (!$field_value && $field_data['field_show_novalue'])
@ -203,7 +203,14 @@ class type_bool extends type_base
{
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);
if ($preview_options)
{
$this->lang_helper->load_preview_options($profile_row['field_id'], $profile_row['lang_id'], $preview_options);
}
else
{
$this->lang_helper->load_option_lang($profile_row['lang_id']);
}
}
$options = $this->lang_helper->get($profile_row['field_id'], $profile_row['lang_id']);

View file

@ -135,7 +135,7 @@ class type_dropdown extends type_base
// 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);
$this->lang_helper->load_option_lang($field_data['lang_id']);
}
if (!$this->lang_helper->is_set($field_data['field_id'], $field_data['lang_id'], $field_value))
@ -160,7 +160,7 @@ class type_dropdown extends type_base
$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);
$this->lang_helper->load_option_lang($lang_id);
}
if ($field_value == $field_data['field_novalue'] && !$field_data['field_show_novalue'])
@ -199,7 +199,14 @@ class type_dropdown extends type_base
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);
if ($preview_options)
{
$this->lang_helper->load_preview_options($profile_row['field_id'], $profile_row['lang_id'], $preview_options);
}
else
{
$this->lang_helper->load_option_lang($profile_row['lang_id']);
}
}
$profile_row['field_value'] = (int) $value;