aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2011-01-27 14:23:33 +0100
committerJoas Schilling <nickvergessen@gmx.de>2011-02-08 14:57:43 +0100
commit65020fd5c1d71f44ef74824a27eaf4929b19635c (patch)
tree5cce85c3b9dd611936928abf634f81d146ece996
parent0e02f5cb0b7f615f1eadd6606a89bfd1b28f0d0d (diff)
downloadforums-65020fd5c1d71f44ef74824a27eaf4929b19635c.tar
forums-65020fd5c1d71f44ef74824a27eaf4929b19635c.tar.gz
forums-65020fd5c1d71f44ef74824a27eaf4929b19635c.tar.bz2
forums-65020fd5c1d71f44ef74824a27eaf4929b19635c.tar.xz
forums-65020fd5c1d71f44ef74824a27eaf4929b19635c.zip
[ticket/9675] Correctly check whether the style/component is still in use.
And don't allow to delete it in that case. PHPBB3-9675
-rw-r--r--phpBB/includes/acp/acp_styles.php92
1 files changed, 64 insertions, 28 deletions
diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php
index 2e2807c8cb..0f157ceff3 100644
--- a/phpBB/includes/acp/acp_styles.php
+++ b/phpBB/includes/acp/acp_styles.php
@@ -1662,7 +1662,7 @@ parse_css_file = {PARSE_CSS_FILE}
{
$new_id = request_var('new_' . $component . '_id', 0);
$component_id = $style_row[$component . '_id'];
- $this->remove_component($component, $component_id, $new_id);
+ $this->remove_component($component, $component_id, $new_id, $style_id);
}
}
else
@@ -1708,20 +1708,32 @@ parse_css_file = {PARSE_CSS_FILE}
/**
* Remove template/theme/imageset entry from the database
*/
- function remove_component($component, $style_id, $new_id)
+ function remove_component($component, $component_id, $new_id, $style_id = false)
{
global $db;
- if (($new_id == 0) || ($component === 'template' && ($conflicts = $this->check_inheritance($component, $style_id))))
+ if (($new_id == 0) || ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id))))
{
- // We can not delete the template, as the selected one is inheriting from this one.
+ // We can not delete the template, as the user wants to keep the component or an other template is inheriting from this one.
+ return;
+ }
+
+ $component_in_use = array();
+ if ($component != 'style')
+ {
+ $component_in_use = $this->component_in_use($component, $component_id, $style_id);
+ }
+
+ if (($new_id == -1) && !empty($component_in_use))
+ {
+ // We can not delete the component, as it is still in use
return;
}
if ($component == 'imageset')
{
$sql = 'DELETE FROM ' . STYLES_IMAGESET_DATA_TABLE . "
- WHERE imageset_id = $style_id";
+ WHERE imageset_id = $component_id";
$db->sql_query($sql);
}
@@ -1741,12 +1753,12 @@ parse_css_file = {PARSE_CSS_FILE}
}
$sql = "DELETE FROM $sql_from
- WHERE {$component}_id = $style_id";
+ WHERE {$component}_id = $component_id";
$db->sql_query($sql);
$sql = 'UPDATE ' . STYLES_TABLE . "
SET {$component}_id = $new_id
- WHERE {$component}_id = $style_id";
+ WHERE {$component}_id = $component_id";
$db->sql_query($sql);
}
@@ -1758,27 +1770,9 @@ parse_css_file = {PARSE_CSS_FILE}
global $db, $template, $user;
$component_in_use = array();
- if (($component != 'style') && $style_id)
+ if ($component != 'style')
{
- $sql = 'SELECT style_id, style_name
- FROM ' . STYLES_TABLE . "
- WHERE {$component}_id = {$component_id}
- AND style_id <> {$style_id}
- ORDER BY style_name ASC";
- $result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
- {
- $component_in_use[] = $row['style_name'];
- }
- $db->sql_freeresult($result);
-
- if ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id)))
- {
- foreach ($conflicts as $temp_id => $conflict_data)
- {
- $component_in_use[] = $conflict_data['template_name'];
- }
- }
+ $component_in_use = $this->component_in_use($component, $component_id, $style_id);
}
$sql_where = '';
@@ -1852,13 +1846,55 @@ parse_css_file = {PARSE_CSS_FILE}
$components = array('template', 'theme', 'imageset');
foreach ($components as $component)
{
- $this->display_component_options($component, $style_row[$component . '_id'], false, $component_id);
+ $this->display_component_options($component, $style_row[$component . '_id'], false, $component_id, true);
}
}
}
}
/**
+ * Check whether the component is still used by another style or component
+ */
+ function component_in_use($component, $component_id, $style_id = false)
+ {
+ global $db;
+
+ $component_in_use = array();
+
+ if ($style_id)
+ {
+ $sql = 'SELECT style_id, style_name
+ FROM ' . STYLES_TABLE . "
+ WHERE {$component}_id = {$component_id}
+ AND style_id <> {$style_id}
+ ORDER BY style_name ASC";
+ }
+ else
+ {
+ $sql = 'SELECT style_id, style_name
+ FROM ' . STYLES_TABLE . "
+ WHERE {$component}_id = {$component_id}
+ ORDER BY style_name ASC";
+ }
+ $result = $db->sql_query($sql);
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $component_in_use[] = $row['style_name'];
+ }
+ $db->sql_freeresult($result);
+
+ if ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id)))
+ {
+ foreach ($conflicts as $temp_id => $conflict_data)
+ {
+ $component_in_use[] = $conflict_data['template_name'];
+ }
+ }
+
+ return $component_in_use;
+ }
+
+ /**
* Export style or style elements
*/
function export($mode, $style_id)