function rul_optionsmenu() { global $wpdb, $rul_db_addresses; // Upgrade check here because it's the only place we know they will visit rul_upgrade(); $rul_process_submit = ''; // Process submitted information to update redirect rules if (isset($_POST['rul_username_submit'])) { $rul_process_submit = rul_submit_rule($_POST['rul_username'], $_POST['rul_username_address'], $_POST['rul_username_logout'], 0, 'user'); } elseif (isset($_POST['rul_username_edit'])) { $rul_process_submit = rul_edit_rule($_POST['rul_username'], $_POST['rul_username_address'], $_POST['rul_username_logout'], 0, 'user'); } elseif (isset($_POST['rul_username_delete'])) { $rul_process_submit = rul_delete_rule($_POST['rul_username'], 'user'); } elseif (isset($_POST['rul_role_submit'])) { $rul_process_submit = rul_submit_rule($_POST['rul_role'], $_POST['rul_role_address'], $_POST['rul_role_logout'], 0, 'role'); } elseif (isset($_POST['rul_role_edit'])) { $rul_process_submit = rul_edit_rule($_POST['rul_role'], $_POST['rul_role_address'], $_POST['rul_role_logout'], 0, 'role'); } elseif (isset($_POST['rul_role_delete'])) { $rul_process_submit = rul_delete_rule($_POST['rul_role'], 'role'); } elseif (isset($_POST['rul_level_submit'])) { $rul_process_submit = rul_submit_rule($_POST['rul_level'], $_POST['rul_level_address'], $_POST['rul_level_logout'], $_POST['rul_level_order'], 'level'); } elseif (isset($_POST['rul_level_edit'])) { $rul_process_submit = rul_edit_rule($_POST['rul_level'], $_POST['rul_level_address'], $_POST['rul_level_logout'], $_POST['rul_level_order'], 'level'); } elseif (isset($_POST['rul_level_delete'])) { $rul_process_submit = rul_delete_rule($_POST['rul_level'], 'level'); } elseif (isset($_POST['rul_allupdatesubmit'])) { $rul_process_submit = rul_submit_all('update', $_POST['rul_all'], $_POST['rul_all_logout']); } elseif (isset($_POST['rul_alldeletesubmit'])) { $rul_process_submit = rul_submit_all('delete', $_POST['rul_all'], $_POST['rul_all_logout']); } elseif (isset($_POST['rul_registerupdatesubmit'])) { $rul_process_submit = rul_submit_register('update', $_POST['rul_register']); } elseif (isset($_POST['rul_registerdeletesubmit'])) { $rul_process_submit = rul_submit_register('delete', $_POST['rul_register']); } elseif (isset($_POST['rul_settingssubmit'])) { $rul_process_submit = rul_submit_settings(); } // Settings that can be updated $rul_settings = rulRedirectFunctionCollection::get_settings(); // ----------------------------------- // Get the existing rules // ----------------------------------- $rul_rules = $wpdb->get_results('SELECT rul_type, rul_value, rul_url, rul_url_logout, rul_order FROM ' . $rul_db_addresses . ' ORDER BY rul_type, rul_order, rul_value', ARRAY_N); $rul_usernamevalues = ''; $rul_rolevalues = ''; $rul_levelvalues = ''; $rul_usernames_existing = array(); $rul_roles_existing = array(); $rul_levels_existing = array(); if ($rul_rules) { $i = 0; $i_user = 0; $i_role = 0; $i_level = 0; while ($i < count($rul_rules)) { list($rul_type, $rul_value, $rul_url, $rul_url_logout, $rul_order) = $rul_rules[$i]; // Specific users if ($rul_type == 'user') { $rul_usernamevalues .= '<form name="rul_username_edit_form[' . $i_user . ']" action="?page=' . basename(__FILE__) . '" method="post">'; $rul_usernamevalues .= '<tr>'; $rul_usernamevalues .= '<td><p><input type="hidden" name="rul_username" value="' . $rul_value . '" /> ' . $rul_value . '</p></td>'; $rul_usernamevalues .= '<td>'; $rul_usernamevalues .= '<p>' . __('Login URL', 'peters-login-redirect') . '<br /><input type="text" size="90" maxlength="500" name="rul_username_address" value="' . $rul_url . '" /></p>'; $rul_usernamevalues .= '<p>' . __('Logout URL', 'peters-login-redirect') . '<br /><input type="text" size="60" maxlength="500" name="rul_username_logout" value="' . $rul_url_logout . '" /></p>'; $rul_usernamevalues .= '</td>'; $rul_usernamevalues .= '<td><p><input name="rul_username_edit" type="submit" value="' . __('Edit', 'peters-login-redirect') . '" /> <input type="submit" name="rul_username_delete" value="' . __('Delete', 'peters-login-redirect') . '" /></p></td>'; $rul_usernamevalues .= '</tr>'; $rul_usernamevalues .= '</form>'; $rul_usernames_existing[] = $rul_value; ++$i_user; } elseif ($rul_type == 'role') { $rul_rolevalues .= '<form name="rul_role_edit_form[' . $i_role . ']" action="?page=' . basename(__FILE__) . '" method="post">'; $rul_rolevalues .= '<tr>'; $rul_rolevalues .= '<td><p><input type="hidden" name="rul_role" value="' . $rul_value . '" /> ' . $rul_value . '</p></td>'; $rul_rolevalues .= '<td>'; $rul_rolevalues .= '<p>' . __('Login URL', 'peters-login-redirect') . '<br /><input type="text" size="90" maxlength="500" name="rul_role_address" value="' . $rul_url . '" /></p>'; $rul_rolevalues .= '<p>' . __('Logout URL', 'peters-login-redirect') . '<br /><input type="text" size="60" maxlength="500" name="rul_role_logout" value="' . $rul_url_logout . '" /></p>'; $rul_rolevalues .= '</td>'; $rul_rolevalues .= '<td><p><input name="rul_role_edit" type="submit" value="' . __('Edit', 'peters-login-redirect') . '" /> <input type="submit" name="rul_role_delete" value="' . __('Delete', 'peters-login-redirect') . '" /></p></td>'; $rul_rolevalues .= '</tr>'; $rul_rolevalues .= '</form>'; $rul_roles_existing[$rul_value] = ''; ++$i_role; } elseif ($rul_type == 'level') { $rul_levelvalues .= '<form name="rul_level_edit_form[' . $i_level . ']" action="?page=' . basename(__FILE__) . '" method="post">'; $rul_levelvalues .= '<tr>'; $rul_levelvalues .= '<td><p><input type="hidden" name="rul_level" value="' . $rul_value . '" /> ' . $rul_value . '</p></td>'; $rul_levelvalues .= '<td>'; $rul_levelvalues .= '<p>' . __('Login URL', 'peters-login-redirect') . '<br /><input type="text" size="90" maxlength="500" name="rul_level_address" value="' . $rul_url . '" /></p>'; $rul_levelvalues .= '<p>' . __('Logout URL', 'peters-login-redirect') . '<br /><input type="text" size="60" maxlength="500" name="rul_level_logout" value="' . $rul_url_logout . '" /></p>'; $rul_levelvalues .= '</td>'; $rul_levelvalues .= '<td><p><input name="rul_level_order" type="text" size="2" maxlength="2" value="' . $rul_order . '" /></td>'; $rul_levelvalues .= '<td><p><input name="rul_level_edit" type="submit" value="' . __('Edit', 'peters-login-redirect') . '" /> <input type="submit" name="rul_level_delete" value="' . __('Delete', 'peters-login-redirect') . '" /></p></td>'; $rul_levelvalues .= '</tr>'; $rul_levelvalues .= '</form>'; $rul_levels_existing[$rul_value] = ''; ++$i_level; } elseif ($rul_type == 'all') { $rul_allvalue = $rul_url; $rul_allvalue_logout = $rul_url_logout; } elseif ($rul_type == 'register') { $rul_registervalue = $rul_url; } ++$i; } } ?> <div class="wrap"> <h2><?php _e('Manage redirect rules', 'peters-login-redirect'); ?> </h2> <?php print $rul_process_submit; ?> <p><?php _e('Define custom URLs to which different users, users with specific roles, users with specific levels, and all other users will be redirected upon login.', 'peters-login-redirect'); ?> </p> <p><?php _e('Define a custom URL to which all users will be redirected upon logout', 'peters-login-redirect'); ?> </p> <p><?php _e('Note that you can use the syntax <strong>[variable]username[/variable]</strong> in your URLs so that the system will build a dynamic URL upon each login, replacing that text with the users username.', 'peters-login-redirect'); ?> </p> <h3><?php _e('Specific users', 'peters-login-redirect'); ?> </h3> <?php if ($rul_usernamevalues) { print '<table class="widefat">'; print $rul_usernamevalues; print '</table>'; } ?> <form name="rul_username_add_form" action="<?php print '?page=' . basename(__FILE__); ?> " method="post"> <p><?php _e('Add:', 'peters-login-redirect'); ?> <select name="rul_username" > <option value="-1"><?php _e('Select a username', 'peters-login-redirect'); ?> </option> <?php print rul_returnusernames($rul_usernames_existing); ?> </select> <br /><?php _e('URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_username_address" /> <br /><?php _e('Logout URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_username_logout" /> </p> <p class="submit"><input type="submit" name="rul_username_submit" value="<?php _e('Add username rule', 'peters-login-redirect'); ?> " /></p> </form> <h3><?php _e('Specific roles', 'peters-login-redirect'); ?> </h3> <?php if ($rul_rolevalues) { print '<table class="widefat">'; print $rul_rolevalues; print '</table>'; } ?> <form name="rul_role_add_form" action="<?php print '?page=' . basename(__FILE__); ?> " method="post"> <p><?php _e('Add:', 'peters-login-redirect'); ?> <select name="rul_role" > <option value="-1"><?php _e('Select a role', 'peters-login-redirect'); ?> </option> <?php print rul_returnroleoptions($rul_roles_existing); ?> </select> <br /><?php _e('URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_role_address" /> <br /><?php _e('Logout URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_role_logout" /> </p> <p class="submit"><input type="submit" name="rul_role_submit" value="<?php _e('Add role rule', 'peters-login-redirect'); ?> " /></p> </form> <h3><?php _e('Specific levels', 'peters-login-redirect'); ?> </h3> <?php if ($rul_levelvalues) { print '<table class="widefat">'; ?> <tr> <th></th> <th></th> <th><?php _e('Order', 'peters-login-redirect'); ?> </th> <th></th> </tr> <?php print $rul_levelvalues; print '</table>'; } ?> <form name="rul_level_add_form" action="<?php print '?page=' . basename(__FILE__); ?> " method="post"> <p><?php _e('Add:', 'peters-login-redirect'); ?> <select name="rul_level" > <option value="-1"><?php _e('Select a level', 'peters-login-redirect'); ?> </option> <?php print rul_returnleveloptions($rul_levels_existing); ?> </select> <br /><?php _e('Order:', 'peters-login-redirect'); ?> <input type="text" size="2" maxlength="2" name="rul_level_order" /> <br /><?php _e('URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_level_address" /> <br /><?php _e('Logout URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_level_logout" /> </p> <p class="submit"><input type="submit" name="rul_level_submit" value="<?php _e('Add level rule', 'peters-login-redirect'); ?> " /></p> </form> <h3><?php _e('All other users', 'peters-login-redirect'); ?> </h3> <form name="rul_allform" action="<?php '?page=' . basename(__FILE__); ?> " method="post"> <p><?php _e('URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_all" value="<?php print $rul_allvalue; ?> " /></p> <p><?php _e('Logout URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_all_logout" value="<?php print $rul_allvalue_logout; ?> " /></p> <p class="submit"><input type="submit" name="rul_allupdatesubmit" value="<?php _e('Update', 'peters-login-redirect'); ?> " /> <input type="submit" name="rul_alldeletesubmit" value="<?php _e('Delete', 'peters-login-redirect'); ?> " /></p> </form> <hr /> <h3><?php _e('Post-registration', 'peters-login-redirect'); ?> </h3> <form name="rul_registerform" action="<?php '?page=' . basename(__FILE__); ?> " method="post"> <p><?php _e('URL:', 'peters-login-redirect'); ?> <input type="text" size="90" maxlength="500" name="rul_register" value="<?php print $rul_registervalue; ?> " /></p> <p class="submit"><input type="submit" name="rul_registerupdatesubmit" value="<?php _e('Update', 'peters-login-redirect'); ?> " /> <input type="submit" name="rul_registerdeletesubmit" value="<?php _e('Delete', 'peters-login-redirect'); ?> " /></p> </form> <hr /> <h3><?php _e('Customize plugin settings', 'peters-login-redirect'); ?> </h3> <form name="rul_settingsform" action="<?php print '?page=' . basename(__FILE__); ?> " method="post"> <table class="widefat"> <tr> <td> <p><strong><?php _e('Redirect restrictions', 'peters-login-redirect'); ?> </strong></p> </td> <td> <select name="rul_local_only"> <option value="1"<?php if (1 == $rul_settings['rul_local_only']) { print ' selected="selected"'; } ?> ><?php _e('Any http or https URL', 'peters-login-redirect'); ?> </option> <option value="2"<?php if (2 == $rul_settings['rul_local_only']) { print ' selected="selected"'; } ?> ><?php _e('Any URL', 'peters-login-redirect'); ?> </option> <option value="3"<?php if (3 == $rul_settings['rul_local_only']) { print ' selected="selected"'; } ?> ><?php _e('Any URL on the same domain', 'peters-login-redirect'); ?> </option> </select> </td> </tr> <tr> <td> <p><strong><?php _e('Allow a POST or GET "redirect_to" variable to take redirect precedence', 'peters-login-redirect'); ?> </strong></p> </td> <td> <select name="rul_allow_post_redirect_override"> <option value="1"<?php if ($rul_settings['rul_allow_post_redirect_override']) { print ' selected="selected"'; } ?> ><?php _e('Yes', 'peters-login-redirect'); ?> </option> <option value="0"<?php if (!$rul_settings['rul_allow_post_redirect_override']) { print ' selected="selected"'; } ?> ><?php _e('No', 'peters-login-redirect'); ?> </option> </select> </td> </tr> <tr> <td> <p><strong><?php _e('Allow a POST or GET "redirect_to" logout variable to take redirect precedence', 'peters-login-redirect'); ?> </strong></p> </td> <td> <select name="rul_allow_post_redirect_override_logout"> <option value="1"<?php if ($rul_settings['rul_allow_post_redirect_override_logout']) { print ' selected="selected"'; } ?> ><?php _e('Yes', 'peters-login-redirect'); ?> </option> <option value="0"<?php if (!$rul_settings['rul_allow_post_redirect_override_logout']) { print ' selected="selected"'; } ?> ><?php _e('No', 'peters-login-redirect'); ?> </option> </select> </td> </tr> <tr> <td> <p><strong><?php print sprintf(__('Use external redirect file. Set this to "Yes" if you are using a plugin such as Gigya that bypasses the regular WordPress redirect process (and allows only one fixed redirect URL). Then, set the redirect URL in the other plugin to %s', 'peters-login-redirect'), '<br />http://www.yoursite.com/wp-content/plugins/peters-login-redirect/wplogin_redirect_control.php'); ?> </strong></p> </td> <td> <select name="rul_use_redirect_controller"> <option value="1"<?php if ($rul_settings['rul_use_redirect_controller']) { print ' selected="selected"'; } ?> ><?php _e('Yes', 'peters-login-redirect'); ?> </option> <option value="0"<?php if (!$rul_settings['rul_use_redirect_controller']) { print ' selected="selected"'; } ?> ><?php _e('No', 'peters-login-redirect'); ?> </option> </select> </td> </tr> <tr> <td> <p><strong><?php _e('Permission level required to edit redirect URLs', 'peters-login-redirect'); ?> </strong></p> </td> <td> <select name="rul_required_capability"> <?php $rul_levelnames = rul_returnlevelnames(); // Build the option HTML foreach ($rul_levelnames as $rul_levelname) { print '<option value="' . $rul_levelname . '"'; if ($rul_levelname == $rul_settings['rul_required_capability']) { print ' selected="selected"'; } print '>' . $rul_levelname . '</option>'; } ?> </select> </td> </tr> </table> <p class="submit"><input name="rul_settingssubmit" type="submit" value="<?php _e('Update', 'peters-login-redirect'); ?> " /></p> </form> </div> <?php }
function rul_submit_level($levels, $orders, $addresses) { global $wpdb, $rul_db_addresses; $rul_whitespace = ' '; // Open the informational div $rul_process_submit = '<div id="message" class="updated fade">' . "\n"; // Code for closing the informational div $rul_process_close = $rul_whitespace . '</div>' . "\n"; // ---------------------------------- // Process the rule changes // ---------------------------------- if ($levels && $addresses) { $rul_submit_success = true; $rul_levels_updated = array(); $rul_level_keys = array_keys($levels); $rul_level_loop = 0; // Loop through all submitted levels foreach ($levels as $level) { $i = $rul_level_keys[$rul_level_loop]; // Build the array of existing level names $rul_existing_levelnames = array_flip(rul_returnlevelnames()); // The order should only be between 0 and 99 $order = abs(intval($orders[$i])); if ($order > 99) { $order = 0; } if (isset($rul_existing_levelnames[$level])) { // Check to see whether it passes the "local URL" test $address = rul_safe_redirect($addresses[$i]); if (!$address) { $rul_submit_success = false; $rul_process_submit .= '<p><strong>****' . __('ERROR: Non-local or invalid URL submitted for level ', 'peterloginrd') . $level . '****</strong></p>' . "\n"; } else { // Update the existing entry or insert a new one $rul_update_level = $wpdb->query('REPLACE INTO ' . $rul_db_addresses . ' SET rul_url = \'' . $address . '\', rul_type = \'level\', rul_value = \'' . $level . '\', rul_order = ' . $order); if (!$rul_update_level) { $rul_submit_success = false; $rul_process_submit .= '<p><strong>****' . __('ERROR: Unknown error updating level-specific URL for level ', 'peterloginrd') . $level . '****</strong></p>' . "\n"; } } // Make a note that this level was updated $rul_levels_updated[] = $level; } elseif ($level != -1) { $rul_submit_success = false; $rul_process_submit .= '<p><strong>****' . __('ERROR: Non-existent level submitted ', 'peterloginrd') . '****</strong></p>' . "\n"; } ++$rul_level_loop; } // Build the "not in" MySQL code $rul_levels_notin = "'" . implode("','", $rul_levels_updated) . "'"; // Delete all level rules in the database that weren't updated (in other words, the user unchecked the box next to it) $wpdb->query('DELETE FROM ' . $rul_db_addresses . ' WHERE rul_type = \'level\' AND rul_value NOT IN (' . $rul_levels_notin . ')'); if ($rul_submit_success) { $rul_process_submit .= '<p>' . __('Successfully updated level-specific URLs', 'peterloginrd') . '</p>' . "\n"; } } // Close the informational div $rul_process_submit .= $rul_process_close; // We've made it this far, so success! return $rul_process_submit; }