Esempio n. 1
0
/**
 * Load external configuration file.
 *
 * @param $file
 *   Path to external file to load.
 * @return Array of settings, users, groups and plugins.
 */
function ft_settings_external($file)
{
    if (file_exists($file)) {
        @(include_once $file);
        $json = ft_settings_external_load();
        if (!$json) {
            // Not translateable. Language info is not available yet.
            ft_set_message('Could not load external configuration.', 'error');
            return FALSE;
        }
        return $json;
    }
    return FALSE;
}
Esempio n. 2
0
/**
 * Implementation of hook_action.
 */
function ft_config_action($act)
{
    global $ft;
    // Change the default settings and plugins.
    if ($act == 'config_default_submit') {
        // Check for cancel.
        if (strtolower($_REQUEST["ft_submit"]) == strtolower(t("Cancel"))) {
            ft_redirect("act=config");
        }
        // Loop through settings.
        $ext = ft_settings_external_load();
        foreach ($ft['default_settings'] as $k => $v) {
            if (isset($_POST['setting_setting'][$k])) {
                if ($_POST['setting_setting'][$k] == 'TRUE') {
                    $ext['settings'][$k] = TRUE;
                } elseif ($_POST['setting_setting'][$k] == 'FALSE') {
                    $ext['settings'][$k] = FALSE;
                } elseif (($k == 'UPLOAD' || $k == 'FILEACTIONS') && $_POST['setting_setting'][$k] == 'OTHER') {
                    // UPLOAD and FILEACTIONS can have an 'other' value.
                    if (empty($_POST['setting_other_setting'][$k])) {
                        // If the other value is empty, turn off the setting.
                        $ext['settings'][$k] = FALSE;
                    } else {
                        $ext['settings'][$k] = ft_settings_external_clean($_POST['setting_other_setting'][$k]);
                    }
                } else {
                    $ext['settings'][$k] = ft_settings_external_clean($_POST['setting_setting'][$k]);
                }
            }
        }
        // Loop through plugins. Reset existing plugins.
        $ext['plugins'] = array();
        foreach ($_POST['plugins'] as $plugin_name => $plugin_status) {
            if ($plugin_status != '') {
                // Plugin enabled.
                $ext['plugins'][$plugin_name] = TRUE;
                // Check if there are settings attached to this plugin.
                if (isset($_POST['setting_plugins']) && is_array($_POST['setting_plugins']) && isset($_POST['setting_plugins'][$plugin_name])) {
                    $ext['plugins'][$plugin_name] = array();
                    $ext['plugins'][$plugin_name]['settings'] = array();
                    foreach ($_POST['setting_plugins'][$plugin_name] as $plugin_setting_name => $plugin_setting_value) {
                        if ($plugin_setting_value == 'TRUE') {
                            $ext['plugins'][$plugin_name]['settings'][$plugin_setting_name] = TRUE;
                        } elseif ($plugin_setting_value == 'FALSE') {
                            $ext['plugins'][$plugin_name]['settings'][$plugin_setting_name] = FALSE;
                        } else {
                            $ext['plugins'][$plugin_name]['settings'][$plugin_setting_name] = ft_settings_external_clean($plugin_setting_value);
                        }
                    }
                }
            }
        }
        // Save new settings.
        if (function_exists('ft_settings_external_load') && function_exists('ft_settings_external_save')) {
            // Save.
            if (ft_settings_external_save($ext)) {
                ft_set_message(t("Settings saved."), 'ok');
            } else {
                ft_set_message(t("Settings could not be saved. Config file could not be updated."), 'error');
            }
        } else {
            ft_set_message(t("External config file not found."), 'error');
            ft_redirect("act=config_default");
        }
        ft_redirect("act=config");
        // Add new group or edit group.
    } elseif ($act == 'user_add_submit_group' || $act == 'user_edit_submit_group') {
        // Check for cancel.
        if (strtolower($_REQUEST["ft_submit"]) == strtolower(t("Cancel"))) {
            ft_redirect("act=config");
        }
        $group = array();
        $group_name = (string) $_POST['user_group'];
        $group_name = ft_settings_external_clean($group_name);
        $group_old = '';
        if ($act == 'user_edit_submit_group') {
            $group_old = (string) $_POST['group_old'];
            $group_old = ft_settings_external_clean($group_old);
        }
        // Loop through defaults.
        if (!empty($_POST['setting_default']) && is_array($_POST['setting_default'])) {
            foreach ($_POST['setting_default'] as $setting => $v) {
                // Differs from default. Add setting.
                if ($v != '') {
                    if ($_POST['setting_setting'][$setting] == 'TRUE') {
                        $group[$setting] = TRUE;
                    } elseif ($_POST['setting_setting'][$setting] == 'FALSE') {
                        $group[$setting] = FALSE;
                    } elseif (($setting == 'UPLOAD' || $setting == 'FILEACTIONS') && $_POST['setting_setting'][$setting] == 'OTHER') {
                        // UPLOAD and FILEACTIONS can have an 'other' value.
                        if (empty($_POST['setting_other_setting'][$setting])) {
                            // If the other value is empty, turn off the setting.
                            $group[$setting] = FALSE;
                        } else {
                            $group[$setting] = ft_settings_external_clean($_POST['setting_other_setting'][$setting]);
                        }
                    } else {
                        $group[$setting] = ft_settings_external_clean($_POST['setting_setting'][$setting]);
                    }
                }
            }
        }
        // Loop through group plugins.
        if (!empty($_POST['plugins']) && is_array($_POST['plugins'])) {
            $group['plugins'] = array();
            foreach ($_POST['plugins'] as $plugin_name => $plugin_status) {
                if ($plugin_status != '') {
                    // Plugin enabled. Add to group.
                    $group['plugins'][$plugin_name] = TRUE;
                    // Check if there are settings attached to this plugin.
                    if (isset($_POST['setting_plugins']) && is_array($_POST['setting_plugins']) && isset($_POST['setting_plugins'][$plugin_name])) {
                        // $group['plugins'][$plugin_name] = array('test', 'test2');
                        $group['plugins'][$plugin_name] = array();
                        $group['plugins'][$plugin_name]['settings'] = array();
                        foreach ($_POST['setting_plugins'][$plugin_name] as $plugin_setting_name => $plugin_setting_value) {
                            if ($plugin_setting_value == 'TRUE') {
                                $group['plugins'][$plugin_name]['settings'][$plugin_setting_name] = TRUE;
                            } elseif ($plugin_setting_value == 'FALSE') {
                                $group['plugins'][$plugin_name]['settings'][$plugin_setting_name] = FALSE;
                            } else {
                                $group['plugins'][$plugin_name]['settings'][$plugin_setting_name] = ft_settings_external_clean($plugin_setting_value);
                            }
                        }
                    }
                }
            }
        }
        // Make sure group name is not in use or that we're editing without changing name.
        if (!isset($ft['groups'][$group_name]) || $act == 'user_edit_submit_group' && $group_name == $group_old) {
            // New group okay.
            if (function_exists('ft_settings_external_load') && function_exists('ft_settings_external_save')) {
                $ext = ft_settings_external_load();
                if (!isset($ext['groups'])) {
                    $ext['groups'] = array();
                }
                // Splice in new/updated user.
                $ext['groups'][$group_name] = $group;
                // Save.
                if (ft_settings_external_save($ext)) {
                    ft_set_message(t("!group was added/updated.", array('!group' => $group_name)), 'ok');
                } else {
                    ft_set_message(t("Group could not be added/updated. Config file could not be updated."), 'error');
                }
            } else {
                ft_set_message(t("External config file not found."), 'error');
                ft_redirect("act=user_add_group");
            }
        } else {
            // New group name already in use.
            ft_set_message(t("Group could not be added. Name already in use."), 'error');
            ft_redirect("act=user_add_group");
        }
        ft_redirect("act=config");
    } elseif ($act == 'user_add_submit' || $act == 'user_edit_submit') {
        // Adding new user or editing user.
        // Check for cancel.
        if (strtolower($_REQUEST["ft_submit"]) == strtolower(t("Cancel"))) {
            ft_redirect("act=config");
        }
        $user = (string) $_POST['user_user'];
        $user_old = '';
        if (!empty($_POST['user_old'])) {
            $user_old = (string) $_POST['user_old'];
        }
        $pass = (string) $_POST['user_pass'];
        $pass2 = (string) $_POST['user_pass2'];
        $group = (string) $_POST['user_group'];
        // Make sure passwords match.
        if ($pass == $pass2) {
            // Strip tags and other nasty characters.
            $user = ft_settings_external_clean($user);
            $user_old = ft_settings_external_clean($user_old);
            $pass = ft_settings_external_clean($pass);
            $group = ft_settings_external_clean($group);
            // Make sure there are no empty strings.
            if (strlen($user) > 0 && (strlen($pass) > 0 || $act == 'user_edit_submit')) {
                // Check that user doesn't already exists. Or that we're editing a user.
                if (!ft_check_user($user) || $act == 'user_edit_submit' && $user == $user_old) {
                    // Make new user.
                    $new = array();
                    $new['password'] = $pass;
                    if (!empty($group) && isset($ft['groups']) && isset($ft['groups'][$group])) {
                        $new['group'] = $group;
                    }
                    // If we're editing and the password is blank load existing password.
                    if ($act == 'user_edit_submit' && empty($pass)) {
                        $new['password'] = $ft['users'][$user_old]['password'];
                    }
                    if (function_exists('ft_settings_external_load') && function_exists('ft_settings_external_save')) {
                        $ext = ft_settings_external_load();
                        // Splice in new/updated user.
                        $ext['users'][$user] = $new;
                        // Remove old user.
                        if ($act == 'user_edit_submit' && $user != $user_old) {
                            unset($ext['users'][$user_old]);
                        }
                        // Save.
                        if (ft_settings_external_save($ext)) {
                            ft_set_message(t("!user was added/updated.", array('!user' => $user)), 'ok');
                        } else {
                            ft_set_message(t("User could not be added/updated. Config file could not be updated."), 'error');
                        }
                    } else {
                        ft_set_message(t("External config file not found."), 'error');
                    }
                } else {
                    ft_set_message(t("User could not be added. Username already in use."), 'error');
                }
            } else {
                ft_set_message(t("You must enter both a username and a password."), 'error');
            }
        } else {
            ft_set_message(t("Passwords didn't match."), 'error');
        }
        ft_redirect("act=config");
    } elseif ($act == 'user_delete_submit') {
        // Check for cancel.
        if (strtolower($_REQUEST["ft_submit"]) == strtolower(t("Cancel"))) {
            ft_redirect("act=config");
        }
        $ext = ft_settings_external_load();
        if ($_POST['type'] == 'user') {
            $msg = t("User was deleted.");
            // Remove user.
            unset($ext['users'][$_POST['value']]);
        } elseif ($_POST['type'] == 'group') {
            $msg = t("Group was deleted.");
            // Remove group.
            unset($ext['groups'][$_POST['value']]);
            // Loop through users and remove.
            foreach ($ext['users'] as $user => $v) {
                if ($v['group'] == $_POST['value']) {
                    unset($ext['users'][$user]);
                }
            }
        }
        // Save config file.
        if (ft_settings_external_save($ext)) {
            ft_set_message($msg);
        } else {
            ft_set_message(t("Config file could not be updated."), 'error');
        }
        ft_redirect("act=config");
    }
}