Line 696 | Line 696 |
---|
$cur_options = array();
|
$cur_options = array();
|
| // Determine current options
|
$sql = 'SELECT auth_option, is_global, is_local FROM ' . ACL_OPTIONS_TABLE . ' ORDER BY auth_option_id';
| $sql = 'SELECT auth_option, is_global, is_local FROM ' . ACL_OPTIONS_TABLE . ' ORDER BY auth_option_id';
|
Line 703 | Line 704 |
---|
while ($row = $db->sql_fetchrow($result)) {
|
while ($row = $db->sql_fetchrow($result)) {
|
if ($row['is_global']) { $cur_options['global'][] = $row['auth_option']; }
if ($row['is_local']) { $cur_options['local'][] = $row['auth_option']; }
| $cur_options[$row['auth_option']] = ($row['is_global'] && $row['is_local']) ? 'both' : (($row['is_global']) ? 'global' : 'local');
|
} $db->sql_freeresult($result);
| } $db->sql_freeresult($result);
|
Line 725 | Line 718 |
---|
$option_ary = array_unique($option_ary);
foreach ($option_ary as $option_value)
|
$option_ary = array_unique($option_ary);
foreach ($option_ary as $option_value)
|
{ if (!in_array($option_value, $cur_options[$type]))
| |
{ $new_options[$type][] = $option_value;
|
{ $new_options[$type][] = $option_value;
|
}
| |
$flag = substr($option_value, 0, strpos($option_value, '_') + 1);
|
$flag = substr($option_value, 0, strpos($option_value, '_') + 1);
|
if (!in_array($flag, $cur_options[$type]) && !in_array($flag, $new_options[$type]))
| if (!in_array($flag, $new_options[$type]))
|
{ $new_options[$type][] = $flag; }
| { $new_options[$type][] = $flag; }
|
Line 744 | Line 734 |
---|
$options = array(); $options['local'] = array_diff($new_options['local'], $new_options['global']); $options['global'] = array_diff($new_options['global'], $new_options['local']);
|
$options = array(); $options['local'] = array_diff($new_options['local'], $new_options['global']); $options['global'] = array_diff($new_options['global'], $new_options['local']);
|
$options['local_global'] = array_intersect($new_options['local'], $new_options['global']);
| $options['both'] = array_intersect($new_options['local'], $new_options['global']);
|
|
|
$sql_ary = array();
| // Now check which options to add/update $add_options = $update_options = array();
|
|
|
| // First local ones...
|
foreach ($options as $type => $option_ary) { foreach ($option_ary as $option) {
|
foreach ($options as $type => $option_ary) { foreach ($option_ary as $option) {
|
$sql_ary[] = array(
| if (!isset($cur_options[$option])) { $add_options[] = array(
|
'auth_option' => (string) $option,
|
'auth_option' => (string) $option,
|
'is_global' => ($type == 'global' || $type == 'local_global') ? 1 : 0, 'is_local' => ($type == 'local' || $type == 'local_global') ? 1 : 0
| 'is_global' => ($type == 'global' || $type == 'both') ? 1 : 0, 'is_local' => ($type == 'local' || $type == 'both') ? 1 : 0
|
);
|
);
|
| continue;
|
}
|
}
|
| // Else, update existing entry if it is changed... if ($type === $cur_options[$option]) { continue;
|
}
|
}
|
$db->sql_multi_insert(ACL_OPTIONS_TABLE, $sql_ary);
| // New type is always both: // If is now both, we set both. // If it was global the new one is local and we need to set it to both // If it was local the new one is global and we need to set it to both $update_options[] = $option; } }
if (!empty($add_options)) { $db->sql_multi_insert(ACL_OPTIONS_TABLE, $add_options); }
if (!empty($update_options)) { $sql = 'UPDATE ' . ACL_OPTIONS_TABLE . ' SET is_global = 1, is_local = 1 WHERE ' . $db->sql_in_set('auth_option', $update_options); $db->sql_query($sql); }
|
$cache->destroy('_acl_options'); $this->acl_clear_prefetch();
| $cache->destroy('_acl_options'); $this->acl_clear_prefetch();
|