protected function column_name(WP_MSM_Profile $profile)
 {
     echo '<strong>' . esc_html($profile->displayName) . '</strong>';
     $urlBase = WP_MSM_Admin::pageURL('profiles');
     $editUrl = add_query_arg(array('action' => 'edit', 'profile' => $profile->name), $urlBase);
     $duplicateUrl = add_query_arg(array('action' => 'duplicate', 'profile' => $profile->name, '_wpnonce' => wp_create_nonce('wpmsm_duplicate_profile_' . $profile->name)), $urlBase);
     $deleteUrl = add_query_arg(array('action' => 'delete', 'profile' => $profile->name, '_wpnonce' => wp_create_nonce('wpmsm_delete_profile_' . $profile->name)), $urlBase);
     $actions = array('edit' => '<a href="' . esc_url($editUrl) . '">' . _x('Edit', 'verb', 'WordPress-MultiServer-Migration') . '</a>', 'duplicate' => '<a href="' . esc_url($duplicateUrl) . '">' . _x('Duplicate', 'verb', 'WordPress-MultiServer-Migration') . '</a>', 'delete' => '<a href="' . esc_url($deleteUrl) . '">' . __('Delete', 'WordPress-MultiServer-Migration') . '</a>');
     if ($this->profileManager->is_default_profile($profile->name)) {
         unset($actions['edit']);
         unset($actions['delete']);
     }
     echo $this->row_actions($actions);
 }
 public static function preLoadPage()
 {
     if (!empty($_GET['subpage']) && $_GET['subpage'] == 'profiles') {
         $action = empty($_GET['action']) ? '' : stripslashes($_GET['action']);
         switch ($action) {
             case 'edit':
                 $submitted = empty($_POST['wpmsm']) ? false : $_POST['wpmsm'];
                 if (empty($_POST['_wpnonce']) || !$submitted) {
                     break;
                 }
                 check_admin_referer("wpmsm_edit_profile_{$_GET['profile']}");
                 $submitted = stripslashes_deep($submitted);
                 $profileManager = new WP_MSM_Profile_Manager();
                 $profile = $profileManager->get_profile($_GET['profile']);
                 if (!$profile) {
                     wp_die(__('That profile does not exist.', 'WordPress-MultiServer-Migration'));
                 }
                 $slugName = $submitted['name'];
                 $slugName = sanitize_title_with_dashes($slugName);
                 if ($slugName != $profile->name && $profileManager->get_profile($slugName)) {
                     add_settings_error('', 'name-collision', __('Invalid name. Name already exists.', 'WordPress-MultiServer-Migration'));
                     break;
                 }
                 if (empty($submitted['exclude_table'])) {
                     $submitted['exclude_table'] = array();
                 }
                 $profile->name = $slugName;
                 $profile->displayName = $submitted['name'];
                 $profile->description = $submitted['description'];
                 $profile->canExport = 'no' === $submitted['disable_export'];
                 $profile->dbTablesToExclude = $submitted['exclude_table'];
                 $profileManager->update_profile($_GET['profile'], $profile);
                 if ($_GET['profile'] != $profile->name) {
                     $redirectUrl = add_query_arg(array('action' => 'edit', 'profile' => $profile->name), self::pageURL('profiles'));
                     wp_redirect($redirectUrl);
                     exit;
                 }
                 add_settings_error('', 'profile-updated', __('The profile was updated.', 'WordPress-MultiServer-Migration'), 'updated');
                 break;
             case 'delete':
                 $profile = empty($_GET['profile']) ? '' : $_GET['profile'];
                 check_admin_referer("wpmsm_delete_profile_{$profile}");
                 $profileManager = new WP_MSM_Profile_Manager();
                 if (!$profileManager->get_profile($profile)) {
                     wp_die(__('That profile does not exist.', 'WordPress-MultiServer-Migration'));
                 } elseif ($profileManager->is_default_profile($profile)) {
                     wp_die(__('Cannot delete default profiles.', 'WordPress-MultiServer-Migration'));
                 }
                 $profileManager->delete_profile($profile);
                 $redirectUrl = add_query_arg(array('action' => 'deleted'), self::pageURL('profiles'));
                 wp_redirect($redirectUrl);
                 exit;
                 break;
             case 'duplicate':
                 $profile = empty($_GET['profile']) ? '' : $_GET['profile'];
                 check_admin_referer("wpmsm_duplicate_profile_{$profile}");
                 $profileManager = new WP_MSM_Profile_Manager();
                 $theProfile = $profileManager->get_profile($profile);
                 if (!$theProfile) {
                     wp_die(__("That profile does not exist.", 'WordPress-MultiServer-Migration'));
                 }
                 $newProfile = $theProfile->_toArray();
                 $counter = 2;
                 while ($profileManager->get_profile($theProfile->name . $counter)) {
                     $counter++;
                 }
                 $newProfile['name'] = $theProfile->name . $counter;
                 $newProfile['displayName'] = $theProfile->displayName . " {$counter}";
                 $newProfile = new WP_MSM_Profile($newProfile);
                 $profileManager->add_profile($newProfile->name, $newProfile);
                 $redirectUrl = add_query_arg(array('action' => 'edit', 'profile' => $newProfile->name), self::pageURL('profiles'));
                 wp_redirect($redirectUrl);
                 exit;
                 break;
             case 'deleted':
                 // Add a settings error and then intentionally fall through to the default listing action.
                 add_settings_error('', 'profile-deleted', __('The profile was successfully deleted.', 'WordPress-MultiServer-Migration'), 'updated');
             default:
                 self::$profileListTable = new WP_MSM_Profile_List_Table();
                 self::$profileListTable->prepare_items();
         }
     }
 }