Esempio n. 1
0
/**
 * Remove user and optionally reassign posts and links to another user.
 *
 * If the $reassign parameter is not assigned to a User ID, then all posts will
 * be deleted of that user. The action 'delete_user' that is passed the User ID
 * being deleted will be run after the posts are either reassigned or deleted.
 * The user meta will also be deleted that are for that User ID.
 *
 * @since 2.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int $id User ID.
 * @param int $reassign Optional. Reassign posts and links to new User ID.
 * @return bool True when finished.
 */
function wp_delete_user($id, $reassign = null)
{
    global $wpdb;
    if (!is_numeric($id)) {
        return false;
    }
    $id = (int) $id;
    $user = new WP_User($id);
    if (!$user->exists()) {
        return false;
    }
    // Normalize $reassign to null or a user ID. 'novalue' was an older default.
    if ('novalue' === $reassign) {
        $reassign = null;
    } elseif (null !== $reassign) {
        $reassign = (int) $reassign;
    }
    /**
     * Fires immediately before a user is deleted from the database.
     *
     * @since 2.0.0
     *
     * @param int      $id       ID of the user to delete.
     * @param int|null $reassign ID of the user to reassign posts and links to.
     *                           Default null, for no reassignment.
     */
    do_action('delete_user', $id, $reassign);
    if (null === $reassign) {
        $post_types_to_delete = array();
        foreach (get_post_types(array(), 'objects') as $post_type) {
            if ($post_type->delete_with_user) {
                $post_types_to_delete[] = $post_type->name;
            } elseif (null === $post_type->delete_with_user && post_type_supports($post_type->name, 'author')) {
                $post_types_to_delete[] = $post_type->name;
            }
        }
        /**
         * Filter the list of post types to delete with a user.
         *
         * @since 3.4.0
         *
         * @param array $post_types_to_delete Post types to delete.
         * @param int   $id                   User ID.
         */
        $post_types_to_delete = apply_filters('post_types_to_delete_with_user', $post_types_to_delete, $id);
        $post_types_to_delete = implode("', '", $post_types_to_delete);
        $post_ids = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_author = %d AND post_type IN ('{$post_types_to_delete}')", $id));
        if ($post_ids) {
            foreach ($post_ids as $post_id) {
                wp_delete_post($post_id);
            }
        }
        // Clean links
        $link_ids = $wpdb->get_col($wpdb->prepare("SELECT link_id FROM {$wpdb->links} WHERE link_owner = %d", $id));
        if ($link_ids) {
            foreach ($link_ids as $link_id) {
                wp_delete_link($link_id);
            }
        }
    } else {
        $post_ids = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_author = %d", $id));
        $wpdb->update($wpdb->posts, array('post_author' => $reassign), array('post_author' => $id));
        if (!empty($post_ids)) {
            foreach ($post_ids as $post_id) {
                clean_post_cache($post_id);
            }
        }
        $link_ids = $wpdb->get_col($wpdb->prepare("SELECT link_id FROM {$wpdb->links} WHERE link_owner = %d", $id));
        $wpdb->update($wpdb->links, array('link_owner' => $reassign), array('link_owner' => $id));
        if (!empty($link_ids)) {
            foreach ($link_ids as $link_id) {
                clean_bookmark_cache($link_id);
            }
        }
    }
    // FINALLY, delete user
    if (is_multisite()) {
        remove_user_from_blog($id, get_current_blog_id());
    } else {
        $meta = $wpdb->get_col($wpdb->prepare("SELECT umeta_id FROM {$wpdb->usermeta} WHERE user_id = %d", $id));
        foreach ($meta as $mid) {
            delete_metadata_by_mid('user', $mid);
        }
        $wpdb->delete($wpdb->users, array('ID' => $id));
    }
    clean_user_cache($user);
    /**
     * Fires immediately after a user is deleted from the database.
     *
     * @since 2.9.0
     *
     * @param int      $id       ID of the deleted user.
     * @param int|null $reassign ID of the user to reassign posts and links to.
     *                           Default null, for no reassignment.
     */
    do_action('deleted_user', $id, $reassign);
    return true;
}
Esempio n. 2
0
 function link_library_insert_link($linkdata, $wp_error = false, $addlinknoaddress = false)
 {
     global $wpdb;
     $defaults = array('link_id' => 0, 'link_name' => '', 'link_url' => '', 'link_rating' => 0);
     $linkdata = wp_parse_args($linkdata, $defaults);
     $linkdata = sanitize_bookmark($linkdata, 'db');
     extract(stripslashes_deep($linkdata), EXTR_SKIP);
     $update = false;
     if (!empty($link_id)) {
         $update = true;
     }
     if (isset($link_name) && trim($link_name) == '') {
         if (isset($link_url) && trim($link_url) != '') {
             $link_name = $link_url;
         } else {
             return 0;
         }
     }
     if ($addlinknoaddress == false) {
         if (trim($link_url) == '') {
             return 0;
         }
     }
     if (empty($link_rating)) {
         $link_rating = 0;
     }
     if (empty($link_image)) {
         $link_image = '';
     }
     if (empty($link_target)) {
         $link_target = '';
     }
     if (empty($link_visible)) {
         $link_visible = 'Y';
     }
     if (empty($link_owner)) {
         $link_owner = get_current_user_id();
     }
     if (empty($link_notes)) {
         $link_notes = '';
     }
     if (empty($link_description)) {
         $link_description = '';
     }
     if (empty($link_rss)) {
         $link_rss = '';
     }
     if (empty($link_rel)) {
         $link_rel = '';
     }
     // Make sure we set a valid category
     if (!isset($link_category) || 0 == count($link_category) || !is_array($link_category)) {
         $link_category = array(get_option('default_link_category'));
     }
     if ($update) {
         if (false === $wpdb->update($wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_rating', 'link_rel', 'link_notes', 'link_rss'), compact('link_id'))) {
             if ($wp_error) {
                 return new WP_Error('db_update_error', __('Could not update link in the database', 'link-library'), $wpdb->last_error);
             } else {
                 return 0;
             }
         }
     } else {
         if (false === $wpdb->insert($wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_owner', 'link_rating', 'link_rel', 'link_notes', 'link_rss'))) {
             if ($wp_error) {
                 return new WP_Error('db_insert_error', __('Could not insert link into the database', 'link-library'), $wpdb->last_error);
             } else {
                 return 0;
             }
         }
         $link_id = (int) $wpdb->insert_id;
     }
     wp_set_link_cats($link_id, $link_category);
     if ($update) {
         do_action('edit_link', $link_id);
     } else {
         do_action('add_link', $link_id);
     }
     clean_bookmark_cache($link_id);
     return $link_id;
 }
Esempio n. 3
0
/**
 * Remove user and optionally reassign posts and links to another user.
 *
 * If the $reassign parameter is not assigned to an User ID, then all posts will
 * be deleted of that user. The action 'delete_user' that is passed the User ID
 * being deleted will be run after the posts are either reassigned or deleted.
 * The user meta will also be deleted that are for that User ID.
 *
 * @since 2.0.0
 *
 * @param int $id User ID.
 * @param int $reassign Optional. Reassign posts and links to new User ID.
 * @return bool True when finished.
 */
function wp_delete_user($id, $reassign = 'novalue')
{
    global $wpdb;
    $id = (int) $id;
    $user = new WP_User($id);
    if (!$user->exists()) {
        return false;
    }
    // allow for transaction statement
    do_action('delete_user', $id);
    if ('novalue' === $reassign || null === $reassign) {
        $post_types_to_delete = array();
        foreach (get_post_types(array(), 'objects') as $post_type) {
            if ($post_type->delete_with_user) {
                $post_types_to_delete[] = $post_type->name;
            } elseif (null === $post_type->delete_with_user && post_type_supports($post_type->name, 'author')) {
                $post_types_to_delete[] = $post_type->name;
            }
        }
        $post_types_to_delete = apply_filters('post_types_to_delete_with_user', $post_types_to_delete, $id);
        $post_types_to_delete = implode("', '", $post_types_to_delete);
        $post_ids = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_author = %d AND post_type IN ('{$post_types_to_delete}')", $id));
        if ($post_ids) {
            foreach ($post_ids as $post_id) {
                wp_delete_post($post_id);
            }
        }
        // Clean links
        $link_ids = $wpdb->get_col($wpdb->prepare("SELECT link_id FROM {$wpdb->links} WHERE link_owner = %d", $id));
        if ($link_ids) {
            foreach ($link_ids as $link_id) {
                wp_delete_link($link_id);
            }
        }
    } else {
        $reassign = (int) $reassign;
        $post_ids = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_author = %d", $id));
        $wpdb->update($wpdb->posts, array('post_author' => $reassign), array('post_author' => $id));
        if (!empty($post_ids)) {
            foreach ($post_ids as $post_id) {
                clean_post_cache($post_id);
            }
        }
        $link_ids = $wpdb->get_col($wpdb->prepare("SELECT link_id FROM {$wpdb->links} WHERE link_owner = %d", $id));
        $wpdb->update($wpdb->links, array('link_owner' => $reassign), array('link_owner' => $id));
        if (!empty($link_ids)) {
            foreach ($link_ids as $link_id) {
                clean_bookmark_cache($link_id);
            }
        }
    }
    // FINALLY, delete user
    if (is_multisite()) {
        remove_user_from_blog($id, get_current_blog_id());
    } else {
        $meta = $wpdb->get_col($wpdb->prepare("SELECT umeta_id FROM {$wpdb->usermeta} WHERE user_id = %d", $id));
        foreach ($meta as $mid) {
            delete_metadata_by_mid('user', $mid);
        }
        $wpdb->delete($wpdb->users, array('ID' => $id));
    }
    clean_user_cache($user);
    // allow for commit transaction
    do_action('deleted_user', $id);
    return true;
}
	function save_settings ($reload = false) {
		global $wpdb;

		// Save channel-level meta-data
		foreach (array('link_name', 'link_description', 'link_url') as $what) :
			$alter[] = "{$what} = '".$wpdb->escape($this->link->{$what})."'";
		endforeach;

		// Save settings to the notes field
		$alter[] = "link_notes = '".$wpdb->escape($this->settings_to_notes())."'";

		// Update the properties of the link from settings changes, etc.
		$update_set = implode(", ", $alter);

		$result = $wpdb->query("
		UPDATE $wpdb->links
		SET $update_set
		WHERE link_id='$this->id'
		");
		
		if ($reload) :
			// force reload of link information from DB
			if (function_exists('clean_bookmark_cache')) :
				clean_bookmark_cache($this->id);
			endif;
		endif;
	} /* SyndicatedLink::save_settings () */
Esempio n. 5
0
/**
 * {@internal Missing Short Description}}
 *
 * @since unknown
 *
 * @param unknown_type $link_id
 * @param unknown_type $link_categories
 */
function wp_set_link_cats( $link_id = 0, $link_categories = array() ) {
	// If $link_categories isn't already an array, make it one:
	if ( !is_array( $link_categories ) || 0 == count( $link_categories ) )
		$link_categories = array( get_option( 'default_link_category' ) );

	$link_categories = array_map( 'intval', $link_categories );
	$link_categories = array_unique( $link_categories );

	wp_set_object_terms( $link_id, $link_categories, 'link_category' );

	clean_bookmark_cache( $link_id );
}	// wp_set_link_cats()
 function save_settings($reload = false)
 {
     global $wpdb;
     // Save channel-level meta-data
     foreach (array('link_name', 'link_description', 'link_url') as $what) {
         $alter[] = "{$what} = '" . esc_sql($this->link->{$what}) . "'";
     }
     // Save settings to the notes field
     $alter[] = "link_notes = '" . esc_sql($this->settings_to_notes()) . "'";
     // Update the properties of the link from settings changes, etc.
     $update_set = implode(", ", $alter);
     $result = $wpdb->query("\n\t\tUPDATE {$wpdb->links}\n\t\tSET {$update_set}\n\t\tWHERE link_id='{$this->id}'\n\t\t");
     if ($reload) {
         // force reload of link information from DB
         if (function_exists('clean_bookmark_cache')) {
             clean_bookmark_cache($this->id);
         }
     }
 }
function fwp_linkedit_page()
{
    global $wpdb, $wp_db_version;
    check_admin_referer();
    // Make sure we arrived here from the Dashboard
    $special_settings = array('cats', 'cat_split', 'hardcode name', 'hardcode url', 'hardcode description', 'hardcode categories', 'post status', 'comment status', 'ping status', 'unfamiliar author', 'unfamliar categories', 'unfamiliar category', 'map authors', 'tags', 'update/.*', 'feed/.*', 'link/.*');
    if (!current_user_can('manage_links')) {
        die(__("Cheatin' uh ?"));
    } elseif (isset($_REQUEST['feedfinder'])) {
        return fwp_feedfinder_page();
        // re-route to Feed Finder page
    } else {
        $link_id = (int) $_REQUEST['link_id'];
        $link =& new SyndicatedLink($link_id);
        if ($link->found()) {
            if (isset($GLOBALS['fwp_post']['save'])) {
                $alter = array();
                // custom feed settings first
                foreach ($GLOBALS['fwp_post']['notes'] as $mn) {
                    $mn['key0'] = trim($mn['key0']);
                    $mn['key1'] = trim($mn['key1']);
                    if (preg_match("^((" . implode(')|(', $special_settings) . "))\$i", $mn['key1'])) {
                        $mn['key1'] = 'user/' . $mn['key1'];
                    }
                    if (strlen($mn['key0']) > 0) {
                        unset($link->settings[$mn['key0']]);
                        // out with the old
                    }
                    if ($mn['action'] == 'update' and strlen($mn['key1']) > 0) {
                        $link->settings[$mn['key1']] = $mn['value'];
                        // in with the new
                    }
                }
                // now stuff through the web form
                // hardcoded feed info
                if (isset($GLOBALS['fwp_post']['hardcode_name'])) {
                    $link->settings['hardcode name'] = $GLOBALS['fwp_post']['hardcode_name'];
                    if (FeedWordPress::affirmative($link->settings, 'hardcode name')) {
                        $alter[] = "link_name = '" . $wpdb->escape($GLOBALS['fwp_post']['name']) . "'";
                    }
                }
                if (isset($GLOBALS['fwp_post']['hardcode_description'])) {
                    $link->settings['hardcode description'] = $GLOBALS['fwp_post']['hardcode_description'];
                    if (FeedWordPress::affirmative($link->settings, 'hardcode description')) {
                        $alter[] = "link_description = '" . $wpdb->escape($GLOBALS['fwp_post']['description']) . "'";
                    }
                }
                if (isset($GLOBALS['fwp_post']['hardcode_url'])) {
                    $link->settings['hardcode url'] = $GLOBALS['fwp_post']['hardcode_url'];
                    if (FeedWordPress::affirmative($link->settings, 'hardcode url')) {
                        $alter[] = "link_url = '" . $wpdb->escape($GLOBALS['fwp_post']['linkurl']) . "'";
                    }
                }
                // Update scheduling
                if (isset($GLOBALS['fwp_post']['update_schedule'])) {
                    $link->settings['update/hold'] = $GLOBALS['fwp_post']['update_schedule'];
                }
                // Categories
                if (isset($GLOBALS['fwp_post']['post_category'])) {
                    $link->settings['cats'] = array();
                    foreach ($GLOBALS['fwp_post']['post_category'] as $cat_id) {
                        $link->settings['cats'][] = '{#' . $cat_id . '}';
                    }
                } else {
                    unset($link->settings['cats']);
                }
                // Tags
                if (isset($GLOBALS['fwp_post']['tags_input'])) {
                    $link->settings['tags'] = array();
                    foreach (explode(',', $GLOBALS['fwp_post']['tags_input']) as $tag) {
                        $link->settings['tags'][] = trim($tag);
                    }
                }
                // Post status, comment status, ping status
                foreach (array('post', 'comment', 'ping') as $what) {
                    $sfield = "feed_{$what}_status";
                    if (isset($GLOBALS['fwp_post'][$sfield])) {
                        if ($GLOBALS['fwp_post'][$sfield] == 'site-default') {
                            unset($link->settings["{$what} status"]);
                        } else {
                            $link->settings["{$what} status"] = $GLOBALS['fwp_post'][$sfield];
                        }
                    }
                }
                // Unfamiliar author, unfamiliar categories
                foreach (array("author", "category") as $what) {
                    $sfield = "unfamiliar_{$what}";
                    if (isset($GLOBALS['fwp_post'][$sfield])) {
                        if ('site-default' == $GLOBALS['fwp_post'][$sfield]) {
                            unset($link->settings["unfamiliar {$what}"]);
                        } elseif ('newuser' == $GLOBALS['fwp_post'][$sfield]) {
                            $newuser_name = trim($GLOBALS['fwp_post']["{$sfield}_newuser"]);
                            if (strlen($newuser_name) > 0) {
                                $userdata = array();
                                $userdata['ID'] = NULL;
                                $userdata['user_login'] = sanitize_user($newuser_name);
                                $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
                                $userdata['user_nicename'] = sanitize_title($newuser_name);
                                $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
                                $userdata['display_name'] = $wpdb->escape($newuser_name);
                                $newuser_id = wp_insert_user($userdata);
                                if (is_numeric($newuser_id)) {
                                    $link->settings["unfamiliar {$what}"] = $newuser_id;
                                } else {
                                    // TODO: Add some error detection and reporting
                                }
                            } else {
                                // TODO: Add some error reporting
                            }
                        } else {
                            $link->settings["unfamiliar {$what}"] = $GLOBALS['fwp_post'][$sfield];
                        }
                    }
                }
                // Handle author mapping rules
                if (isset($GLOBALS['fwp_post']['author_rules_name']) and isset($GLOBALS['fwp_post']['author_rules_action'])) {
                    unset($link->settings['map authors']);
                    foreach ($GLOBALS['fwp_post']['author_rules_name'] as $key => $name) {
                        // Normalize for case and whitespace
                        $name = strtolower(trim($name));
                        $author_action = strtolower(trim($GLOBALS['fwp_post']['author_rules_action'][$key]));
                        if (strlen($name) > 0) {
                            if ('newuser' == $author_action) {
                                $newuser_name = trim($GLOBALS['fwp_post']['author_rules_newuser'][$key]);
                                if (strlen($newuser_name) > 0) {
                                    $userdata = array();
                                    $userdata['ID'] = NULL;
                                    $userdata['user_login'] = sanitize_user($newuser_name);
                                    $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
                                    $userdata['user_nicename'] = sanitize_title($newuser_name);
                                    $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
                                    $userdata['display_name'] = $wpdb->escape($newuser_name);
                                    $newuser_id = wp_insert_user($userdata);
                                    if (is_numeric($newuser_id)) {
                                        $link->settings['map authors']['name'][$name] = $newuser_id;
                                    } else {
                                        // TODO: Add some error detection and reporting
                                    }
                                } else {
                                    // TODO: Add some error reporting
                                }
                            } else {
                                $link->settings['map authors']['name'][$name] = $author_action;
                            }
                        }
                    }
                }
                if (isset($GLOBALS['fwp_post']['add_author_rule_name']) and isset($GLOBALS['fwp_post']['add_author_rule_action'])) {
                    $name = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_name']));
                    $author_action = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_action']));
                    if (strlen($name) > 0) {
                        if ('newuser' == $author_action) {
                            $newuser_name = trim($GLOBALS['fwp_post']['add_author_rule_newuser']);
                            if (strlen($newuser_name) > 0) {
                                $userdata = array();
                                $userdata['ID'] = NULL;
                                $userdata['user_login'] = sanitize_user($newuser_name);
                                $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
                                $userdata['user_nicename'] = sanitize_title($newuser_name);
                                $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
                                $userdata['display_name'] = $wpdb->escape($newuser_name);
                                $newuser_id = wp_insert_user($userdata);
                                if (is_numeric($newuser_id)) {
                                    $link->settings['map authors']['name'][$name] = $newuser_id;
                                } else {
                                    // TODO: Add some error detection and reporting
                                }
                            } else {
                                // TODO: Add some error reporting
                            }
                        } else {
                            $link->settings['map authors']['name'][$name] = $author_action;
                        }
                    }
                }
                if (isset($GLOBALS['fwp_post']['cat_split'])) {
                    if (strlen(trim($GLOBALS['fwp_post']['cat_split'])) > 0) {
                        $link->settings['cat_split'] = trim($GLOBALS['fwp_post']['cat_split']);
                    } else {
                        unset($link->settings['cat_split']);
                    }
                }
                $alter[] = "link_notes = '" . $wpdb->escape($link->settings_to_notes()) . "'";
                $alter_set = implode(", ", $alter);
                // issue update query
                $result = $wpdb->query("\n\t\t\t\tUPDATE {$wpdb->links}\n\t\t\t\tSET {$alter_set}\n\t\t\t\tWHERE link_id='{$link_id}'\n\t\t\t\t");
                $updated_link = true;
                // reload link information from DB
                if (function_exists('clean_bookmark_cache')) {
                    clean_bookmark_cache($link_id);
                }
                $link =& new SyndicatedLink($link_id);
            } else {
                $updated_link = false;
            }
            $db_link = $link->link;
            $link_url = wp_specialchars($db_link->link_url, 1);
            $link_name = wp_specialchars($db_link->link_name, 1);
            $link_description = wp_specialchars($db_link->link_description, 'both');
            $link_rss_uri = wp_specialchars($db_link->link_rss, 'both');
            $post_status_global = get_option('feedwordpress_syndicated_post_status');
            $comment_status_global = get_option('feedwordpress_syndicated_comment_status');
            $ping_status_global = get_option('feedwordpress_syndicated_ping_status');
            $status['post'] = array('publish' => '', 'private' => '', 'draft' => '', 'site-default' => '');
            if (SyndicatedPost::use_api('post_status_pending')) {
                $status['post']['pending'] = '';
            }
            $status['comment'] = array('open' => '', 'closed' => '', 'site-default' => '');
            $status['ping'] = array('open' => '', 'closed' => '', 'site-default' => '');
            foreach (array('post', 'comment', 'ping') as $what) {
                if (isset($link->settings["{$what} status"])) {
                    $status[$what][$link->settings["{$what} status"]] = ' checked="checked"';
                } else {
                    $status[$what]['site-default'] = ' checked="checked"';
                }
            }
            $unfamiliar['author'] = array('create' => '', 'default' => '', 'filter' => '');
            $unfamiliar['category'] = array('create' => '', 'tag' => '', 'default' => '', 'filter' => '');
            foreach (array('author', 'category') as $what) {
                if (is_string($link->settings["unfamiliar {$what}"]) and array_key_exists($link->settings["unfamiliar {$what}"], $unfamiliar[$what])) {
                    $key = $link->settings["unfamiliar {$what}"];
                } else {
                    $key = 'site-default';
                }
                $unfamiliar[$what][$key] = ' checked="checked"';
            }
            if (is_array($link->settings['cats'])) {
                $cats = $link->settings['cats'];
            } else {
                $cats = array();
            }
            $dogs = SyndicatedPost::category_ids($cats, NULL);
        } else {
            die(__('Link not found.'));
        }
        ?>
<script type="text/javascript">
	function flip_hardcode (item) {
		ed=document.getElementById('basics-'+item+'-edit');
		view=document.getElementById('basics-'+item+'-view');
		
		o = document.getElementById('basics-hardcode-'+item);
		if (o.value=='yes') { ed.style.display='inline'; view.style.display='none'; }
		else { ed.style.display='none'; view.style.display='inline'; }
	}
	function flip_newuser (item) {
		rollup=document.getElementById(item);
		newuser=document.getElementById(item+'-newuser');
		sitewide=document.getElementById(item+'-default');
		if (rollup) {
			if ('newuser'==rollup.value) {
				if (newuser) newuser.style.display='block';
				if (sitewide) sitewide.style.display='none';
			} else if ('site-default'==rollup.value) {
				if (newuser) newuser.style.display='none';
				if (sitewide) sitewide.style.display='block';
			} else {
				if (newuser) newuser.style.display='none';
				if (sitewide) sitewide.style.display='none';
			}
		}
	}
</script>

<?php 
        if ($updated_link) {
            ?>
<div class="updated"><p>Syndicated feed settings updated.</p></div>
<?php 
        }
        ?>

<form action="admin.php?page=<?php 
        print $GLOBALS['fwp_path'];
        ?>
/<?php 
        echo basename(__FILE__);
        ?>
" method="post">
<div class="wrap">
<input type="hidden" name="link_id" value="<?php 
        echo $link_id;
        ?>
" />
<input type="hidden" name="action" value="linkedit" />
<input type="hidden" name="save" value="link" />

<h2>Edit a syndicated feed:</h2>
<div id="poststuff">
<?php 
        fwp_linkedit_single_submit($status);
        ?>

<div id="post-body">
<?php 
        fwp_option_box_opener('Feed Information', 'feedinformationdiv');
        ?>
	<table class="editform" width="100%" cellspacing="2" cellpadding="5">
	<tr>
	<th scope="row" width="20%"><?php 
        _e('Feed URI:');
        ?>
</th>
	<td width="60%"><a href="<?php 
        echo wp_specialchars($link_rss_uri, 'both');
        ?>
"><?php 
        echo $link_rss_uri;
        ?>
</a>
	(<a href="<?php 
        echo FEEDVALIDATOR_URI;
        ?>
?url=<?php 
        echo urlencode($link_rss_uri);
        ?>
"
	title="Check feed &lt;<?php 
        echo wp_specialchars($link_rss_uri, 'both');
        ?>
&gt; for validity">validate</a>)
	</td>
	<td width="20%"><input type="submit" name="feedfinder" value="switch &rarr;" style="font-size:smaller" /></td>
	</tr>
	<tr>
	<th scope="row" width="20%"><?php 
        _e('Link Name:');
        ?>
</th>
	<td width="60%"><input type="text" id="basics-name-edit" name="name"
	value="<?php 
        echo $link_name;
        ?>
" style="width: 95%" />
	<span id="basics-name-view"><strong><?php 
        echo $link_name;
        ?>
</strong></span>
	</td>
	<td>
	<select id="basics-hardcode-name" onchange="flip_hardcode('name')" name="hardcode_name">
	<option value="no" <?php 
        echo $link->hardcode('name') ? '' : 'selected="selected"';
        ?>
>update automatically</option>
	<option value="yes" <?php 
        echo $link->hardcode('name') ? 'selected="selected"' : '';
        ?>
>edit manually</option>
	</select>
	</td>
	</tr>
	<tr>
	<th scope="row" width="20%"><?php 
        _e('Short description:');
        ?>
</th>
	<td width="60%">
	<input id="basics-description-edit" type="text" name="description" value="<?php 
        echo $link_description;
        ?>
" style="width: 95%" />
	<span id="basics-description-view"><strong><?php 
        echo $link_description;
        ?>
</strong></span>
	</td>
	<td>
	<select id="basics-hardcode-description" onchange="flip_hardcode('description')"
	name="hardcode_description">
	<option value="no" <?php 
        echo $link->hardcode('description') ? '' : 'selected="selected"';
        ?>
>update automatically</option>
	<option value="yes" <?php 
        echo $link->hardcode('description') ? 'selected="selected"' : '';
        ?>
>edit manually</option>
	</select></td>
	</tr>
	<tr>
	<th width="20%" scope="row"><?php 
        _e('Homepage:');
        ?>
</th>
	<td width="60%">
	<input id="basics-url-edit" type="text" name="linkurl" value="<?php 
        echo $link_url;
        ?>
" style="width: 95%;" />
	<a id="basics-url-view" href="<?php 
        echo $link_url;
        ?>
"><?php 
        echo $link_url;
        ?>
</a></td>
	<td>
	<select id="basics-hardcode-url" onchange="flip_hardcode('url')" name="hardcode_url">
	<option value="no"<?php 
        echo $link->hardcode('url') ? '' : ' selected="selected"';
        ?>
>update automatically</option>
	<option value="yes"<?php 
        echo $link->hardcode('url') ? ' selected="selected"' : '';
        ?>
>edit manually</option>
	</select></td></tr>
	
	<tr>
	<th width="20%"><?php 
        _e('Last update');
        ?>
:</th>
	<td colspan="2"><?php 
        if (isset($link->settings['update/last'])) {
            echo fwp_time_elapsed($link->settings['update/last']) . " ";
        } else {
            echo " none yet";
        }
        ?>
</td></tr>
	<tr><th width="20%">Next update:</th>
	<td colspan="2"><?php 
        $holdem = isset($link->settings['update/hold']) ? $link->settings['update/hold'] : 'scheduled';
        ?>
	<select name="update_schedule">
	<option value="scheduled"<?php 
        echo $holdem == 'scheduled' ? ' selected="selected"' : '';
        ?>
>update on schedule <?php 
        echo " (";
        if (isset($link->settings['update/ttl']) and is_numeric($link->settings['update/ttl'])) {
            if (isset($link->settings['update/timed']) and $link->settings['update/timed'] == 'automatically') {
                echo 'next: ';
                $next = $link->settings['update/last'] + (int) $link->settings['update/ttl'] * 60;
                if (strftime('%x', time()) != strftime('%x', $next)) {
                    echo strftime('%x', $next) . " ";
                }
                echo strftime('%X', $link->settings['update/last'] + (int) $link->settings['update/ttl'] * 60);
            } else {
                echo "every " . $link->settings['update/ttl'] . " minute" . ($link->settings['update/ttl'] != 1 ? "s" : "");
            }
        } else {
            echo "next scheduled update";
        }
        echo ")";
        ?>
</option>
	<option value="next"<?php 
        echo $holdem == 'next' ? ' selected="selected"' : '';
        ?>
>update ASAP</option>
	<option value="ping"<?php 
        echo $holdem == 'ping' ? ' selected="selected"' : '';
        ?>
>update only when pinged</option>
	</select></tr>
	</table>
<?php 
        fwp_option_box_closer();
        ?>

<script type="text/javascript">
flip_hardcode('name');
flip_hardcode('description');
flip_hardcode('url');
</script>

<?php 
        fwp_linkedit_periodic_submit();
        ?>

<?php 
        if (!(isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25)) {
            fwp_option_box_opener('Syndicated Posts', 'syndicatedpostsdiv', 'postbox');
            ?>
<table class="editform" width="75%" cellspacing="2" cellpadding="5">
<tr><th width="27%" scope="row" style="vertical-align:top">Publication:</th>
<td width="73%" style="vertical-align:top"><ul style="margin:0; list-style:none">
<li><label><input type="radio" name="feed_post_status" value="site-default"
<?php 
            echo $status['post']['site-default'];
            ?>
 /> Use site-wide setting from <a href="admin.php?page=<?php 
            print $GLOBALS['fwp_path'];
            ?>
/syndication-options.php">Syndication Options</a>
(currently: <strong><?php 
            echo $post_status_global ? $post_status_global : 'publish';
            ?>
</strong>)</label></li>
<li><label><input type="radio" name="feed_post_status" value="publish"
<?php 
            echo $status['post']['publish'];
            ?>
 /> Publish posts from this feed immediately</label></li>

<?php 
            if (SyndicatedPost::use_api('post_status_pending')) {
                ?>
<li><label><input type="radio" name="feed_post_status" value="pending"
<?php 
                echo $status['post']['pending'];
                ?>
/> Hold posts from this feed for review; mark as Pending</label></li>
<?php 
            }
            ?>

<li><label><input type="radio" name="feed_post_status" value="draft"
<?php 
            echo $status['post']['draft'];
            ?>
 /> Save posts from this feed as drafts</label></li>
<li><label><input type="radio" name="feed_post_status" value="private"
<?php 
            echo $status['post']['private'];
            ?>
 /> Save posts from this feed as private posts</label></li>
</ul></td>
</tr>
</table>
<?php 
            fwp_option_box_closer();
            fwp_linkedit_periodic_submit();
        }
        fwp_option_box_opener(__('Categories'), 'categorydiv', 'postbox');
        fwp_category_box($dogs, 'all syndicated posts from this feed');
        ?>
<table>
<tr>
<th width="20%" scope="row" style="vertical-align:top">Unfamiliar categories:</th>
<td width="80%"><p>When one of the categories on a syndicated post is a category that FeedWordPress has not encountered before ...</p>

<ul style="margin: 0; list-style:none">
<li><label><input type="radio" name="unfamiliar_category" value="site-default"<?php 
        echo $unfamiliar['category']['site-default'];
        ?>
 /> use the site-wide setting from <a href="admin.php?page=<?php 
        print $GLOBALS['fwp_path'];
        ?>
/syndication-options.php">Syndication Options</a>
(currently <strong><?php 
        echo FeedWordPress::on_unfamiliar('category');
        ?>
</strong>)</label></li>
<li><label><input type="radio" name="unfamiliar_category" value="create"<?php 
        echo $unfamiliar['category']['create'];
        ?>
 /> create a new category</label></li>
<?php 
        if (fwp_test_wp_version(FWP_SCHEMA_23)) {
            ?>
<li><label><input type="radio" name="unfamiliar_category" value="tag"<?php 
            echo $unfamiliar['category']['tag'];
            ?>
/> create a new tag</label></li>
<?php 
        }
        ?>
<li><label><input type="radio" name="unfamiliar_category" value="default"<?php 
        echo $unfamiliar['category']['default'];
        ?>
 /> don't create new categories<?php 
        if (fwp_test_wp_version(FWP_SCHEMA_23)) {
            ?>
 or tags<?php 
        }
        ?>
</label></li>
<li><label><input type="radio" name="unfamiliar_category" value="filter"<?php 
        echo $unfamiliar['category']['filter'];
        ?>
 /> don't create new categories<?php 
        if (fwp_test_wp_version(FWP_SCHEMA_23)) {
            ?>
 or tags<?php 
        }
        ?>
 and don't syndicate posts unless they match at least one familiar category</label></li>
</ul></td>
</tr>

<tr>
<th width="20%" scope="row" style="vertical-align:top">Multiple categories:</th>
<td width="80%"> 
<input type="text" size="20" id="cat_split" name="cat_split" value="<?php 
        if (isset($link->settings['cat_split'])) {
            echo htmlspecialchars($link->settings['cat_split']);
        }
        ?>
" /><br/>
Enter a <a href="http://us.php.net/manual/en/reference.pcre.pattern.syntax.php">Perl-compatible regular expression</a> here if the feed provides multiple
categories in a single category element. The regular expression should match
the characters used to separate one category from the next. If the feed uses
spaces (like <a href="http://del.icio.us/">del.icio.us</a>), use the pattern "\s".
If the feed does not provide multiple categories in a single element, leave this
blank.</td>
</tr>
</table>
<?php 
        fwp_option_box_closer();
        fwp_linkedit_periodic_submit();
        if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) {
            fwp_tags_box($link->settings['tags']);
            fwp_linkedit_periodic_submit();
        }
        ?>

<?php 
        fwp_option_box_opener('Syndicated Authors', 'authordiv', 'postbox');
        $authorlist = fwp_author_list();
        ?>
<table>
<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">For posts by authors that haven't been syndicated before:</th></tr>
<tr>
  <th style="text-align: left">Posts by new authors</th>
  <td> 
  <select id="unfamiliar-author" name="unfamiliar_author" onchange="flip_newuser('unfamiliar-author');">
    <option value="site-default"<?php 
        if (!isset($link->settings['unfamiliar author'])) {
            ?>
selected="selected"<?php 
        }
        ?>
>are handled using site-wide settings</option>
    <option value="create"<?php 
        if ('create' == $link->settings['unfamiliar author']) {
            ?>
selected="selected"<?php 
        }
        ?>
>create a new author account</option>
    <?php 
        foreach ($authorlist as $author_id => $author_name) {
            ?>
      <option value="<?php 
            echo $author_id;
            ?>
"<?php 
            if ($author_id == $link->settings['unfamiliar author']) {
                ?>
selected="selected"<?php 
            }
            ?>
>are assigned to <?php 
            echo $author_name;
            ?>
</option>
    <?php 
        }
        ?>
    <option value="newuser">will be assigned to a new user...</option>
    <option value="filter"<?php 
        if ('filter' == $link->settings['unfamiliar author']) {
            ?>
selected="selected"<?php 
        }
        ?>
>get filtered out</option>
  </select>
  </td>
  <td>
  <div id="unfamiliar-author-default">Site-wide settings can be set in <a href="admin.php?page=<?php 
        print $GLOBALS['fwp_path'];
        ?>
/syndication-options.php">Syndication Options</a></div>
  <div id="unfamiliar-author-newuser">named <input type="text" name="unfamiliar_author_newuser" value="" /></div>
  </td>
</tr>

<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">For posts by specific authors. Blank out a name to delete the rule.</th></tr>

<?php 
        if (isset($link->settings['map authors'])) {
            $i = 0;
            foreach ($link->settings['map authors'] as $author_rules) {
                foreach ($author_rules as $author_name => $author_action) {
                    $i++;
                    ?>
<tr>
  <th style="text-align: left">Posts by <input type="text" name="author_rules_name[]" value="<?php 
                    echo htmlspecialchars($author_name);
                    ?>
" /></th>
  <td>
  <select id="author-rules-<?php 
                    echo $i;
                    ?>
" name="author_rules_action[]" onchange="flip_newuser('author-rules-<?php 
                    echo $i;
                    ?>
');">
    <?php 
                    foreach ($authorlist as $local_author_id => $local_author_name) {
                        ?>
    <option value="<?php 
                        echo $local_author_id;
                        ?>
"<?php 
                        if ($local_author_id == $author_action) {
                            echo ' selected="selected"';
                        }
                        ?>
>are assigned to <?php 
                        echo $local_author_name;
                        ?>
</option>
    <?php 
                    }
                    ?>
    <option value="newuser">will be assigned to a new user...</option>
    <option value="filter"<?php 
                    if ('filter' == $author_action) {
                        echo ' selected="selected"';
                    }
                    ?>
>get filtered out</option>
  </select>
  </td>
  <td><div id="author-rules-<?php 
                    echo $i;
                    ?>
-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></div></td>
</tr>
<?php 
                }
            }
        }
        ?>

<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">Fill in to set up a new rule:</th></tr>

<tr>
  <th style="text-align: left">Posts by <input type="text" name="add_author_rule_name" /></th>
  <td>
    <select id="add-author-rule" name="add_author_rule_action" onchange="flip_newuser('add-author-rule');">
      <?php 
        foreach ($authorlist as $author_id => $author_name) {
            ?>
      <option value="<?php 
            echo $author_id;
            ?>
">are assigned to <?php 
            echo $author_name;
            ?>
</option>
      <?php 
        }
        ?>
      <option value="newuser">will be assigned to a new user...</option>
      <option value="filter">get filtered out</option>
    </select>
  </td>
  <td><div id="add-author-rule-newuser">named <input type="text" name="add_author_rule_newuser" value="" /></div></td>
</tr>

</table>
<?php 
        fwp_option_box_closer();
        ?>

<script>
	flip_newuser('unfamiliar-author');
<?php 
        for ($j = 1; $j <= $i; $j++) {
            ?>
	flip_newuser('author-rules-<?php 
            echo $j;
            ?>
');
<?php 
        }
        ?>
	flip_newuser('add-author-rule');
</script>

<?php 
        fwp_linkedit_periodic_submit();
        fwp_option_box_opener('Comments & Pings', 'commentstatusdiv', 'postbox');
        ?>
<table class="editform" width="75%" cellspacing="2" cellpadding="5">
<tr><th width="27%" scope="row" style="vertical-align:top"><?php 
        print __('Comments');
        ?>
:</th>
<td width="73%"><ul style="margin:0; list-style:none">
<li><label><input type="radio" name="feed_comment_status" value="site-default"
<?php 
        echo $status['comment']['site-default'];
        ?>
 /> Use site-wide setting from <a href="admin.php?page=<?php 
        print $GLOBALS['fwp_path'];
        ?>
/syndication-options.php">Syndication Options</a>
(currently: <strong><?php 
        echo $comment_status_global ? $comment_status_global : 'closed';
        ?>
)</strong></label></li>
<li><label><input type="radio" name="feed_comment_status" value="open"
<?php 
        echo $status['comment']['open'];
        ?>
 /> Allow comments on syndicated posts from this feed</label></li>
<li><label><input type="radio" name="feed_comment_status" value="closed"
<?php 
        echo $status['comment']['closed'];
        ?>
 /> Don't allow comments on syndicated posts from this feed</label></li>
</ul></td></tr>

<tr><th width="27%" scope="row" style="vertical-align:top"><?php 
        print __('Pings');
        ?>
:</th>
<td width="73%"><ul style="margin:0; list-style:none">
<li><label><input type="radio" name="feed_ping_status" value="site-default"
<?php 
        echo $status['ping']['site-default'];
        ?>
 /> Use site-wide setting from <a href="admin.php?page=<?php 
        print $GLOBALS['fwp_path'];
        ?>
/syndication-options.php">Syndication Options</a>
(currently: <strong><?php 
        echo $ping_status_global ? $ping_status_global : 'closed';
        ?>
)</strong></label></li>
<li><label><input type="radio" name="feed_ping_status" value="open"
<?php 
        echo $status['ping']['open'];
        ?>
 /> Accept pings on syndicated posts from this feed</label></li>
<li><label><input type="radio" name="feed_ping_status" value="closed"
<?php 
        echo $status['ping']['closed'];
        ?>
 /> Don't accept pings on syndicated posts from this feed</label></li>
</ul></td></tr>

</table>
<?php 
        fwp_option_box_closer();
        fwp_linkedit_periodic_submit();
        ?>

<?php 
        fwp_option_box_opener('Custom Settings (for use in templates)', 'postcustom', 'postbox');
        ?>
<div id="postcustomstuff">
<table id="meta-list" cellpadding="3">
	<tr>
	<th>Key</th>
	<th>Value</th>
	<th>Action</th>
	</tr>

<?php 
        $i = 0;
        foreach ($link->settings as $key => $value) {
            if (!preg_match("^((" . implode(')|(', $special_settings) . "))\$i", $key)) {
                ?>
			<tr style="vertical-align:top">
			<th width="30%" scope="row"><input type="hidden" name="notes[<?php 
                echo $i;
                ?>
][key0]" value="<?php 
                echo wp_specialchars($key, 'both');
                ?>
" />
			<input id="notes-<?php 
                echo $i;
                ?>
-key" name="notes[<?php 
                echo $i;
                ?>
][key1]" value="<?php 
                echo wp_specialchars($key, 'both');
                ?>
" /></th>
			<td width="60%"><textarea rows="2" cols="40" id="notes-<?php 
                echo $i;
                ?>
-value" name="notes[<?php 
                echo $i;
                ?>
][value]"><?php 
                echo wp_specialchars($value, 'both');
                ?>
</textarea></td>
			<td width="10%"><select name="notes[<?php 
                echo $i;
                ?>
][action]">
			<option value="update">save changes</option>
			<option value="delete">delete this setting</option>
			</select></td>
			</tr>
<?php 
                $i++;
            }
        }
        ?>
	<tr>
	<th scope="row"><input type="text" size="10" name="notes[<?php 
        echo $i;
        ?>
][key1]" value="" /></th>
	<td><textarea name="notes[<?php 
        echo $i;
        ?>
][value]" rows="2" cols="40"></textarea></td>
	<td><em>add new setting...</em><input type="hidden" name="notes[<?php 
        echo $i;
        ?>
][action]" value="update" /></td>
	</tr>
</table>
<?php 
        fwp_option_box_closer();
        ?>

<?php 
        fwp_linkedit_periodic_submit();
        fwp_linkedit_single_submit_closer();
        ?>
</div> <!-- id="post-body" -->
</div> <!-- id="poststuff" -->
</div>
	<?php 
    }
    return false;
    // Don't continue
}
 function save_settings($reload = false)
 {
     $link = get_bookmark($this->id, ARRAY_A);
     // Save channel-level meta-data
     foreach (array('link_name', 'link_description', 'link_url') as $what) {
         $link[$what] = $this->link->{$what};
     }
     // Save settings to the notes field
     $link['link_notes'] = $this->settings_to_notes();
     $result = wp_update_link($link);
     if ($reload) {
         // force reload of link information from DB
         if (function_exists('clean_bookmark_cache')) {
             clean_bookmark_cache($this->id);
         }
     }
 }
function fwp_authors_page()
{
    global $wpdb, $wp_db_version;
    check_admin_referer();
    // Make sure we arrived here from the Dashboard
    if (isset($GLOBALS['fwp_post']['save']) or isset($GLOBALS['fwp_post']['fix_mismatch'])) {
        $link_id = $_REQUEST['save_link_id'];
    } elseif (isset($_REQUEST['link_id'])) {
        $link_id = $_REQUEST['link_id'];
    } else {
        $link_id = NULL;
    }
    if (is_numeric($link_id) and $link_id) {
        $link =& new SyndicatedLink($link_id);
    } else {
        $link = NULL;
    }
    $mesg = null;
    if (!current_user_can('manage_links')) {
        die(__("Cheatin' uh ?"));
    } else {
        if (isset($GLOBALS['fwp_post']['fix_mismatch'])) {
            if ('newuser' == $GLOBALS['fwp_post']['fix_mismatch_to']) {
                $newuser_name = trim($GLOBALS['fwp_post']['fix_mismatch_to_newuser']);
                if (strlen($newuser_name) > 0) {
                    $userdata = array();
                    $userdata['ID'] = NULL;
                    $userdata['user_login'] = sanitize_user($newuser_name);
                    $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
                    $userdata['user_nicename'] = sanitize_title($newuser_name);
                    $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
                    $userdata['display_name'] = $wpdb->escape($newuser_name);
                    $newuser_id = wp_insert_user($userdata);
                    if (is_numeric($newuser_id)) {
                        $fix_mismatch_to_id = $newuser_id;
                    } else {
                        // TODO: Add some error detection and reporting
                    }
                } else {
                    // TODO: Add some error reporting
                }
            } else {
                $fix_mismatch_to_id = $GLOBALS['fwp_post']['fix_mismatch_to'];
            }
            $fix_mismatch_from_id = (int) $GLOBALS['fwp_post']['fix_mismatch_from'];
            if (is_numeric($fix_mismatch_from_id)) {
                // Make a list of all the items by this author syndicated from this feed...
                $post_ids = $wpdb->get_col("\n\t\t\t\tSELECT {$wpdb->posts}.id\n\t\t\t\tFROM {$wpdb->posts}, {$wpdb->postmeta}\n\t\t\t\tWHERE ({$wpdb->posts}.id = {$wpdb->postmeta}.post_id)\n\t\t\t\tAND {$wpdb->postmeta}.meta_key = 'syndication_feed_id'\n\t\t\t\tAND {$wpdb->postmeta}.meta_value = '{$link_id}'\n\t\t\t\tAND {$wpdb->posts}.post_author = '{$fix_mismatch_from_id}'\n\t\t\t\t");
                if (count($post_ids) > 0) {
                    // Re-assign them all to the correct author
                    if (is_numeric($fix_mismatch_to_id)) {
                        // re-assign to a particular user
                        $post_set = "(" . implode(",", $post_ids) . ")";
                        // Getting the revisions too, if there are any
                        if (fwp_test_wp_version(FWP_SCHEMA_26)) {
                            $parent_in_clause = "OR {$wpdb->posts}.post_parent IN {$post_set}";
                        } else {
                            $parent_in_clause = '';
                        }
                        $wpdb->query("\n\t\t\t\t\t\tUPDATE {$wpdb->posts}\n\t\t\t\t\t\tSET post_author='{$fix_mismatch_to_id}'\n\t\t\t\t\t\tWHERE ({$wpdb->posts}.id IN {$post_set}\n\t\t\t\t\t\t{$parent_in_clause})\n\t\t\t\t\t\t");
                        $mesg = "Re-assigned " . count($post_ids) . " post" . (count($post_ids) == 1 ? '' : 's') . ".";
                        // ... and kill them all
                    } elseif ($fix_mismatch_to_id == 'filter') {
                        foreach ($post_ids as $post_id) {
                            wp_delete_post($post_id);
                        }
                        $mesg = "Deleted " . count($post_ids) . " post" . (count($post_ids) == 1 ? '' : 's') . ".";
                    }
                } else {
                    $mesg = "Couldn't find any posts that matched your criteria.";
                }
            }
        } elseif (isset($GLOBALS['fwp_post']['save'])) {
            if (is_object($link) and $link->found()) {
                $alter = array();
                // Unfamiliar author rule
                if (isset($GLOBALS['fwp_post']["unfamiliar_author"])) {
                    if ('site-default' == $GLOBALS['fwp_post']["unfamiliar_author"]) {
                        unset($link->settings["unfamiliar author"]);
                    } elseif ('newuser' == $GLOBALS['fwp_post']["unfamiliar_author"]) {
                        $newuser_name = trim($GLOBALS['fwp_post']["unfamiliar_author_newuser"]);
                        $link->map_name_to_new_user(NULL, $newuser_name);
                    } else {
                        $link->settings["unfamiliar author"] = $GLOBALS['fwp_post']["unfamiliar_author"];
                    }
                }
                // Handle author mapping rules
                if (isset($GLOBALS['fwp_post']['author_rules_name']) and isset($GLOBALS['fwp_post']['author_rules_action'])) {
                    unset($link->settings['map authors']);
                    foreach ($GLOBALS['fwp_post']['author_rules_name'] as $key => $name) {
                        // Normalize for case and whitespace
                        $name = strtolower(trim($name));
                        $author_action = strtolower(trim($GLOBALS['fwp_post']['author_rules_action'][$key]));
                        if (strlen($name) > 0) {
                            if ('newuser' == $author_action) {
                                $newuser_name = trim($GLOBALS['fwp_post']['author_rules_newuser'][$key]);
                                $link->map_name_to_new_user($name, $newuser_name);
                            } else {
                                $link->settings['map authors']['name'][$name] = $author_action;
                            }
                        }
                    }
                }
                if (isset($GLOBALS['fwp_post']['add_author_rule_name']) and isset($GLOBALS['fwp_post']['add_author_rule_action'])) {
                    $name = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_name']));
                    $author_action = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_action']));
                    if (strlen($name) > 0) {
                        if ('newuser' == $author_action) {
                            $newuser_name = trim($GLOBALS['fwp_post']['add_author_rule_newuser']);
                            $link->map_name_to_new_user($name, $newuser_name);
                        } else {
                            $link->settings['map authors']['name'][$name] = $author_action;
                        }
                    }
                }
                $alter[] = "link_notes = '" . $wpdb->escape($link->settings_to_notes()) . "'";
                $alter_set = implode(", ", $alter);
                // issue update query
                $result = $wpdb->query("\n\t\t\t\tUPDATE {$wpdb->links}\n\t\t\t\tSET {$alter_set}\n\t\t\t\tWHERE link_id='{$link_id}'\n\t\t\t\t");
                $updated_link = true;
                // reload link information from DB
                if (function_exists('clean_bookmark_cache')) {
                    clean_bookmark_cache($link_id);
                }
                $link =& new SyndicatedLink($link_id);
            } else {
                if ('newuser' == $GLOBALS['fwp_post']['unfamiliar_author']) {
                    $newuser_name = trim($GLOBALS['fwp_post']['unfamiliar_author_newuser']);
                    if (strlen($newuser_name) > 0) {
                        $userdata = array();
                        $userdata['ID'] = NULL;
                        $userdata['user_login'] = sanitize_user($newuser_name);
                        $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
                        $userdata['user_nicename'] = sanitize_title($newuser_name);
                        $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
                        $userdata['display_name'] = $wpdb->escape($newuser_name);
                        $newuser_id = wp_insert_user($userdata);
                        if (is_numeric($newuser_id)) {
                            update_option('feedwordpress_unfamiliar_author', $newuser_id);
                        } else {
                            // TODO: Add some error detection and reporting
                        }
                    } else {
                        // TODO: Add some error reporting
                    }
                } else {
                    update_option('feedwordpress_unfamiliar_author', $GLOBALS['fwp_post']['unfamiliar_author']);
                }
                if (isset($GLOBALS['fwp_post']['match_author_by_email']) and $GLOBALS['fwp_post']['match_author_by_email'] == 'yes') {
                    update_option('feedwordpress_do_not_match_author_by_email', 'no');
                } else {
                    update_option('feedwordpress_do_not_match_author_by_email', 'yes');
                }
                if (isset($GLOBALS['fwp_post']['null_emails'])) {
                    update_option('feedwordpress_null_email_set', $GLOBALS['fwp_post']['null_emails']);
                }
                $updated_link = true;
            }
        } else {
            $updated_link = false;
        }
        $unfamiliar = array('create' => '', 'default' => '', 'filter' => '');
        if (is_object($link) and $link->found()) {
            if (is_string($link->settings["unfamiliar author"])) {
                $key = $link->settings["unfamiliar author"];
            } else {
                $key = 'site-default';
            }
        } else {
            $key = FeedWordPress::on_unfamiliar('author');
        }
        $unfamiliar[$key] = ' selected="selected"';
        $match_author_by_email = !('yes' == get_option("feedwordpress_do_not_match_author_by_email"));
        $null_emails = FeedWordPress::null_email_set();
        ?>
<script type="text/javascript">
	function contextual_appearance (item, appear, disappear, value, visibleStyle, checkbox) {
		if (typeof(visibleStyle)=='undefined') visibleStyle = 'block';

		var rollup=document.getElementById(item);
		var newuser=document.getElementById(appear);
		var sitewide=document.getElementById(disappear);
		if (rollup) {
			if ((checkbox && rollup.checked) || (!checkbox && value==rollup.value)) {
				if (newuser) newuser.style.display=visibleStyle;
				if (sitewide) sitewide.style.display='none';
			} else {
				if (newuser) newuser.style.display='none';
				if (sitewide) sitewide.style.display=visibleStyle;
			}
		}
	}
</script>

<?php 
        if ($updated_link) {
            ?>
<div class="updated"><p>Syndicated author settings updated.</p></div>
<?php 
        } elseif (!is_null($mesg)) {
            ?>
<div class="updated"><p><?php 
            print wp_specialchars($mesg, 1);
            ?>
</p></div>
<?php 
        }
        ?>

<div class="wrap">
<form style="position: relative" action="admin.php?page=<?php 
        print $GLOBALS['fwp_path'];
        ?>
/<?php 
        echo basename(__FILE__);
        ?>
" method="post">
<?php 
        if (is_numeric($link_id) and $link_id) {
            ?>
<input type="hidden" name="save_link_id" value="<?php 
            echo $link_id;
            ?>
" />
<?php 
        } else {
            ?>
<input type="hidden" name="save_link_id" value="*" />
<?php 
        }
        ?>

<?php 
        $links = FeedWordPress::syndicated_links();
        if (fwp_test_wp_version(FWP_SCHEMA_27)) {
            ?>
	<div class="icon32"><img src="<?php 
            print htmlspecialchars(WP_PLUGIN_URL . '/' . $GLOBALS['fwp_path'] . '/feedwordpress.png');
            ?>
" alt="" /></div>
<?php 
        }
        ?>
<h2>Syndicated Author Settings<?php 
        if (!is_null($link) and $link->found()) {
            ?>
: <?php 
            echo wp_specialchars($link->link->link_name, 1);
        }
        ?>
</h2>
<?php 
        if (fwp_test_wp_version(FWP_SCHEMA_27)) {
            ?>
	<style type="text/css">
	#post-search {
		float: right;
		margin:11px 12px 0;
		min-width: 130px;
		position:relative;
	}
	.fwpfs {
		color: #dddddd;
		background:#797979 url(<?php 
            bloginfo('home');
            ?>
/wp-admin/images/fav.png) repeat-x scroll left center;
		border-color:#777777 #777777 #666666 !important; -moz-border-radius-bottomleft:12px;
		-moz-border-radius-bottomright:12px;
		-moz-border-radius-topleft:12px;
		-moz-border-radius-topright:12px;
		border-style:solid;
		border-width:1px;
		line-height:15px;
		padding:3px 30px 4px 12px;
	}
	.fwpfs.slide-down {
		border-bottom-color: #626262;
		-moz-border-radius-bottomleft:0;
		-moz-border-radius-bottomright:0;
		-moz-border-radius-topleft:12px;
		-moz-border-radius-topright:12px;
		background-image:url(<?php 
            bloginfo('home');
            ?>
/wp-admin/images/fav-top.png);
		background-position:0 top;
		background-repeat:repeat-x;
		border-bottom-style:solid;
		border-bottom-width:1px;
	}
	</style>
	
	<script type="text/javascript">
		jQuery(document).ready(function($){
			$('.fwpfs').toggle(
				function(){$('.fwpfs').removeClass('slideUp').addClass('slideDown'); setTimeout(function(){if ( $('.fwpfs').hasClass('slideDown') ) { $('.fwpfs').addClass('slide-down'); }}, 10) },
				function(){$('.fwpfs').removeClass('slideDown').addClass('slideUp'); setTimeout(function(){if ( $('.fwpfs').hasClass('slideUp') ) { $('.fwpfs').removeClass('slide-down'); }}, 10) }
			);
			$('.fwpfs').bind(
				'change',
				function () { this.form.submit(); }
			);
			$('#post-search .button').css( 'display', 'none' );
		});
	</script>
<?php 
        }
        /* else : */
        ?>
<p id="post-search">
<select name="link_id" class="fwpfs" style="max-width: 20.0em;">
  <option value="*"<?php 
        if (is_null($link) or !$link->found()) {
            ?>
 selected="selected"<?php 
        }
        ?>
>- defaults for all feeds -</option>
<?php 
        if ($links) {
            foreach ($links as $ddlink) {
                ?>
  <option value="<?php 
                print (int) $ddlink->link_id;
                ?>
"<?php 
                if (!is_null($link) and $link->link->link_id == $ddlink->link_id) {
                    ?>
 selected="selected"<?php 
                }
                ?>
><?php 
                print wp_specialchars($ddlink->link_name, 1);
                ?>
</option>
<?php 
            }
        }
        ?>
</select>
<input class="button" type="submit" name="go" value="<?php 
        _e('Go');
        ?>
 &raquo;" />
</p>
<?php 
        /* endif; */
        ?>

<?php 
        if (!is_null($link) and $link->found()) {
            ?>
	<p>These settings only affect posts syndicated from
	<strong><?php 
            echo wp_specialchars($link->link->link_name, 1);
            ?>
</strong>.</p>
<?php 
        } else {
            ?>
	<p>These settings affect posts syndicated from any feed unless they are overridden
	by settings for that specific feed.</p>
<?php 
        }
        ?>

<?php 
        $authorlist = fwp_author_list();
        ?>
<table class="form-table">
<tbody>
<tr>
  <th>New authors</th>
  <td><span>Authors who haven't been syndicated before</span>
  <select style="max-width: 27.0em" id="unfamiliar-author" name="unfamiliar_author" onchange="contextual_appearance('unfamiliar-author', 'unfamiliar-author-newuser', 'unfamiliar-author-default', 'newuser', 'inline');">
<?php 
        if (is_object($link) and $link->found()) {
            ?>
    <option value="site-default"<?php 
            print $unfamiliar['site-default'];
            ?>
>are handled according to the default for all feeds</option>
<?php 
        }
        ?>
    <option value="create"<?php 
        $unfamiliar['create'];
        ?>
>will have a new author account created for them</option>
    <?php 
        foreach ($authorlist as $author_id => $author_name) {
            ?>
      <option value="<?php 
            echo $author_id;
            ?>
"<?php 
            print $unfamiliar[$author_id];
            ?>
>will have their posts attributed to <?php 
            echo $author_name;
            ?>
</option>
    <?php 
        }
        ?>
    <option value="newuser">will have their posts attributed to a new user...</option>
    <option value="filter"<?php 
        print $unfamiliar['filter'];
        ?>
>get filtered out</option>
  </select>

  <span id="unfamiliar-author-newuser">named <input type="text" name="unfamiliar_author_newuser" value="" /></span></p>
  </td>
</tr>

<?php 
        if (is_object($link) and $link->found()) {
            ?>
<tr><th>Syndicated authors</th>
<td>For attributing posts by specific authors. Blank out a name to delete the rule. Fill in a new name at the bottom to create a new rule.</p>
<table style="width: 100%">
<?php 
            if (isset($link->settings['map authors'])) {
                $i = 0;
                foreach ($link->settings['map authors'] as $author_rules) {
                    foreach ($author_rules as $author_name => $author_action) {
                        $i++;
                        ?>
<tr>
<th style="text-align: left; width: 15.0em">Posts by <input type="text" name="author_rules_name[]" value="<?php 
                        echo htmlspecialchars($author_name);
                        ?>
" size="11" /></th>
  <td>
  <select id="author-rules-<?php 
                        echo $i;
                        ?>
" name="author_rules_action[]" onchange="contextual_appearance('author-rules-<?php 
                        echo $i;
                        ?>
', 'author-rules-<?php 
                        echo $i;
                        ?>
-newuser', 'author-rules-<?php 
                        echo $i;
                        ?>
-default', 'newuser', 'inline');">
    <?php 
                        foreach ($authorlist as $local_author_id => $local_author_name) {
                            ?>
    <option value="<?php 
                            echo $local_author_id;
                            ?>
"<?php 
                            if ($local_author_id == $author_action) {
                                echo ' selected="selected"';
                            }
                            ?>
>are assigned to <?php 
                            echo $local_author_name;
                            ?>
</option>
    <?php 
                        }
                        ?>
    <option value="newuser">will be assigned to a new user...</option>
    <option value="filter"<?php 
                        if ('filter' == $author_action) {
                            echo ' selected="selected"';
                        }
                        ?>
>get filtered out</option>
  </select>
  
  <span id="author-rules-<?php 
                        echo $i;
                        ?>
-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></span>
  </td>
</tr>
<?php 
                    }
                }
            }
            ?>

<tr>
<th style="text-align: left; width: 15.0em">Posts by <input type="text" name="add_author_rule_name" size="11" /></th>
  <td>
    <select id="add-author-rule" name="add_author_rule_action" onchange="contextual_appearance('add-author-rule', 'add-author-rule-newuser', 'add-author-rule-default', 'newuser', 'inline');">
      <?php 
            foreach ($authorlist as $author_id => $author_name) {
                ?>
      <option value="<?php 
                echo $author_id;
                ?>
">are assigned to <?php 
                echo $author_name;
                ?>
</option>
      <?php 
            }
            ?>
      <option value="newuser">will be assigned to a new user...</option>
      <option value="filter">get filtered out</option>
    </select>
   
   <span id="add-author-rule-newuser">named <input type="text" name="add_author_rule_newuser" value="" /></span>
   </td>
</tr>
</table>
</td>
</tr>
<?php 
        }
        ?>

<?php 
        if (!(is_object($link) and $link->found())) {
            ?>
<tr>
<th scope="row">Matching Authors</th>
<td><ul style="list-style: none; margin: 0; padding: 0;">
<li><div><label><input id="match-author-by-email" type="checkbox" name="match_author_by_email" value="yes" <?php 
            if ($match_author_by_email) {
                ?>
checked="checked" <?php 
            }
            ?>
onchange="contextual_appearance('match-author-by-email', 'unless-null-email', null, 'yes', 'block', /*checkbox=*/ true);" /> Treat syndicated authors with the same e-mail address as the same author.</label></div>
<div id="unless-null-email">
<p>Unless the e-mail address is one of the following anonymous e-mail addresses:</p>
<textarea name="null_emails" rows="3" style="width: 100%">
<?php 
            print implode("\n", $null_emails);
            ?>
</textarea>
</div></li>
</ul></td>
</tr>
<?php 
        } else {
            ?>
<th scope="row">Fixing mis-matched authors:</th>
<td><p style="margin: 0.5em 0px">Take all the posts from this feed attributed to
<select name="fix_mismatch_from">
<?php 
            foreach ($authorlist as $author_id => $author_name) {
                ?>
      <option value="<?php 
                echo $author_id;
                ?>
"><?php 
                echo $author_name;
                ?>
</option>
<?php 
            }
            ?>
</select>
and instead
<select id="fix-mismatch-to" name="fix_mismatch_to" onchange="contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');">
<?php 
            foreach ($authorlist as $author_id => $author_name) {
                ?>
      <option value="<?php 
                echo $author_id;
                ?>
">re-assign them to <?php 
                echo $author_name;
                ?>
</option>
<?php 
            }
            ?>
      <option value="newuser">re-assign them to a new user...</option>
      <option value="filter">delete them</option>
</select>

   <span id="fix-mismatch-to-newuser">named <input type="text" name="fix_mismatch_to_newuser" value="" /></span>
   <input type="submit" class="button" name="fix_mismatch" value="Fix it!" />
   </td>
</td>
<?php 
        }
        ?>
</tbody>
</table>

<p class="submit">
<input class="button-primary" type="submit" name="save" value="Save Changes" />
</p>

<script type="text/javascript">
	contextual_appearance('unfamiliar-author', 'unfamiliar-author-newuser', 'unfamiliar-author-default', 'newuser', 'inline');
<?php 
        if (is_object($link) and $link->found()) {
            for ($j = 1; $j <= $i; $j++) {
                ?>
	contextual_appearance('author-rules-<?php 
                echo $j;
                ?>
', 'author-rules-<?php 
                echo $j;
                ?>
-newuser', 'author-rules-<?php 
                echo $j;
                ?>
-default', 'newuser', 'inline');
<?php 
            }
            ?>
	contextual_appearance('add-author-rule', 'add-author-rule-newuser', 'add-author-rule-default', 'newuser', 'inline');
	contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');
<?php 
        } else {
            ?>
	contextual_appearance('match-author-by-email', 'unless-null-email', null, 'yes', 'block', /*checkbox=*/ true);
<?php 
        }
        ?>
</script>
</form>
</div> <!-- class="wrap" -->
	<?php 
    }
}