aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Guse <nathaniel.guse@gmail.com>2013-10-03 20:31:16 -0700
committerNathan Guse <nathaniel.guse@gmail.com>2013-10-03 20:31:16 -0700
commitfdae60c146be5cf04dd1cbd318016a3a3301d122 (patch)
tree4e1375e905514e0be99807729201055788733b36
parentb54d0f2da61c22df1e6a117360a9681c7f6eabb3 (diff)
parent2ab3ee7d67f99f1e6b7702b22e79c3a5af85adf8 (diff)
downloadforums-fdae60c146be5cf04dd1cbd318016a3a3301d122.tar
forums-fdae60c146be5cf04dd1cbd318016a3a3301d122.tar.gz
forums-fdae60c146be5cf04dd1cbd318016a3a3301d122.tar.bz2
forums-fdae60c146be5cf04dd1cbd318016a3a3301d122.tar.xz
forums-fdae60c146be5cf04dd1cbd318016a3a3301d122.zip
Merge pull request #1739 from nickvergessen/ticket/11871
[ticket/11871] Allow backslash in classnames for Modules
-rw-r--r--phpBB/includes/acp/acp_modules.php2
-rw-r--r--phpBB/includes/functions_module.php31
-rw-r--r--phpBB/phpbb/db/migration/tool/module.php7
3 files changed, 29 insertions, 11 deletions
diff --git a/phpBB/includes/acp/acp_modules.php b/phpBB/includes/acp/acp_modules.php
index 6792886d2a..100e33044b 100644
--- a/phpBB/includes/acp/acp_modules.php
+++ b/phpBB/includes/acp/acp_modules.php
@@ -565,7 +565,7 @@ class acp_modules
{
// Skip entries we do not need if we know the module we are
// looking for
- if ($module && strpos(str_replace('\\', '_', $cur_module), $module) === false)
+ if ($module && strpos(str_replace('\\', '_', $cur_module), $module) === false && $module !== $cur_module)
{
continue;
}
diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php
index b33f3d6866..dca720c36e 100644
--- a/phpBB/includes/functions_module.php
+++ b/phpBB/includes/functions_module.php
@@ -519,7 +519,7 @@ class p_master
}
// Not being able to overwrite ;)
- $this->module->u_action = append_sid("{$phpbb_admin_path}index.$phpEx", "i={$this->p_name}") . (($icat) ? '&amp;icat=' . $icat : '') . "&amp;mode={$this->p_mode}";
+ $this->module->u_action = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=' . $this->get_module_identifier($this->p_name, $this->p_id)) . (($icat) ? '&amp;icat=' . $icat : '') . "&amp;mode={$this->p_mode}";
}
else
{
@@ -551,7 +551,7 @@ class p_master
$this->module->u_action = $phpbb_root_path . (($user->page['page_dir']) ? $user->page['page_dir'] . '/' : '') . $user->page['page_name'];
}
- $this->module->u_action = append_sid($this->module->u_action, "i={$this->p_name}") . (($icat) ? '&amp;icat=' . $icat : '') . "&amp;mode={$this->p_mode}";
+ $this->module->u_action = append_sid($this->module->u_action, 'i=' . $this->get_module_identifier($this->p_name, $this->p_id)) . (($icat) ? '&amp;icat=' . $icat : '') . "&amp;mode={$this->p_mode}";
}
// Add url_extra parameter to u_action url
@@ -799,12 +799,12 @@ class p_master
// if the item has a name use it, else use its id
if (empty($item_ary['name']))
{
- $u_title .= $item_ary['id'];
+ $u_title .= $item_ary['id'];
}
else
{
// if the category has a name, then use it.
- $u_title .= $item_ary['name'];
+ $u_title .= $this->get_module_identifier($item_ary['name'], $item_ary['id']);
}
// If the item is not a category append the mode
if (!$item_ary['cat'])
@@ -983,6 +983,29 @@ class p_master
}
/**
+ * If the basename contains a \ we dont use that for the URL.
+ *
+ * Firefox is currently unable to correctly copy a urlencoded \
+ * so users will be unable to post links to modules.
+ * However we can still fallback to the id instead of the name,
+ * so we do that in this case.
+ *
+ * @param string $basename Basename of the module
+ * @param int $id Id of the module
+ * @return mixed Identifier that should be used for
+ * module link creation
+ */
+ protected function get_module_identifier($basename, $id)
+ {
+ if (strpos($basename, '\\') === false)
+ {
+ return $basename;
+ }
+
+ return $id;
+ }
+
+ /**
* Checks whether the given module basename is a correct class name
*
* @param string $basename A module basename
diff --git a/phpBB/phpbb/db/migration/tool/module.php b/phpBB/phpbb/db/migration/tool/module.php
index 9869dd4230..3e39d87c04 100644
--- a/phpBB/phpbb/db/migration/tool/module.php
+++ b/phpBB/phpbb/db/migration/tool/module.php
@@ -182,9 +182,6 @@ class module implements \phpbb\db\migration\tool\tool_interface
{
// The "automatic" way
$basename = (isset($data['module_basename'])) ? $data['module_basename'] : '';
- $basename = str_replace(array('/', '\\'), '', $basename);
- $class = str_replace(array('/', '\\'), '', $class);
-
$module = $this->get_module_info($class, $basename);
$result = '';
@@ -353,9 +350,7 @@ class module implements \phpbb\db\migration\tool\tool_interface
}
// Automatic method
- $basename = str_replace(array('/', '\\'), '', $module['module_basename']);
- $class = str_replace(array('/', '\\'), '', $class);
-
+ $basename = $module['module_basename'];
$module_info = $this->get_module_info($class, $basename);
foreach ($module_info['modes'] as $mode => $info)