function get_settings_from_notes () { // Read off feed settings from link_notes $notes = explode("\n", $this->link->link_notes); foreach ($notes as $note): $pair = explode(": ", $note, 2); $key = (isset($pair[0]) ? $pair[0] : null); $value = (isset($pair[1]) ? $pair[1] : null); if (!is_null($key) and !is_null($value)) : // Unescape and trim() off the whitespace. // Thanks to Ray Lischner for pointing out the // need to trim off whitespace. $this->settings[$key] = stripcslashes (trim($value)); endif; endforeach; // "Magic" feed settings $this->settings['link/uri'] = $this->link->link_rss; $this->settings['link/name'] = $this->link->link_name; $this->settings['link/id'] = $this->link->link_id; // `hardcode categories` and `unfamiliar categories` are // deprecated in favor of `unfamiliar category` if ( isset($this->settings['unfamiliar categories']) and !isset($this->settings['unfamiliar category']) ) : $this->settings['unfamiliar category'] = $this->settings['unfamiliar categories']; endif; if ( FeedWordPress::affirmative($this->settings, 'hardcode categories') and !isset($this->settings['unfamiliar category']) ) : $this->settings['unfamiliar category'] = 'default'; endif; // Set this up automagically for del.icio.us $bits = parse_url($this->link->link_rss); $tagspacers = array('del.icio.us', 'feeds.delicious.com'); if (!isset($this->settings['cat_split']) and in_array($bits['host'], $tagspacers)) : $this->settings['cat_split'] = '\s'; // Whitespace separates multiple tags in del.icio.us RSS feeds endif; // Simple lists foreach ($this->imploded_settings() as $what) : if (isset($this->settings[$what])): $this->settings[$what] = explode( FEEDWORDPRESS_CAT_SEPARATOR, $this->settings[$what] ); endif; endforeach; if (isset($this->settings['terms'])) : // Look for new format $this->settings['terms'] = maybe_unserialize($this->settings['terms']); if (!is_array($this->settings['terms'])) : // Deal with old format instead. Ugh. // Split on two *or more* consecutive breaks // because in the old format, a taxonomy // without any associated terms would // produce tax_name#1\n\n\ntax_name#2\nterm, // and the naive split on the first \n\n // would screw up the tax_name#2 list. // // Props to David Morris for pointing this // out. $this->settings['terms'] = preg_split( "/".FEEDWORDPRESS_CAT_SEPARATOR."{2,}/", $this->settings['terms'] ); $terms = array(); foreach ($this->settings['terms'] as $line) : $line = explode(FEEDWORDPRESS_CAT_SEPARATOR, $line); $tax = array_shift($line); $terms[$tax] = $line; endforeach; $this->settings['terms'] = $terms; endif; endif; if (isset($this->settings['map authors'])) : $author_rules = explode("\n\n", $this->settings['map authors']); $ma = array(); foreach ($author_rules as $rule) : list($rule_type, $author_name, $author_action) = explode("\n", $rule); // Normalize for case and whitespace $rule_type = strtolower(trim($rule_type)); $author_name = strtolower(trim($author_name)); $author_action = strtolower(trim($author_action)); $ma[$rule_type][$author_name] = $author_action; endforeach; $this->settings['map authors'] = $ma; endif; } /* SyndicatedLink::get_settings_from_notes () */
function save_settings($post) { if ($this->for_feed_settings()) { if (isset($post['link_rss_params_key'])) { $qp = array(); foreach ($post['link_rss_params_key'] as $index => $key) { if (strlen($key) > 0) { if (isset($post['link_rss_params_value'][$index]) and strlen($post['link_rss_params_value'][$index])) { $value = $post['link_rss_params_value'][$index]; $qp[] = array($key, $value); } } } $this->update_setting('query parameters', serialize($qp)); } // custom feed settings first foreach ($post['notes'] as $mn) { $mn['key0'] = isset($mn['key0']) ? trim($mn['key0']) : NULL; $mn['key1'] = trim($mn['key1']); if (preg_match("^((" . implode(')|(', $this->special_settings) . "))\$i", $mn['key1'])) { $mn['key1'] = 'user/' . $mn['key1']; } if (strlen($mn['key0']) > 0) { unset($this->link->settings[$mn['key0']]); // out with the old } if ($mn['action'] == 'update' and strlen($mn['key1']) > 0) { $this->link->settings[$mn['key1']] = $mn['value']; // in with the new } } // now stuff through the web form // hardcoded feed info foreach (array('name', 'description', 'url') as $what) { // We have a checkbox for "No," so if it's unchecked, mark as "Yes." $this->link->settings["hardcode {$what}"] = isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'; if (FeedWordPress::affirmative($this->link->settings, "hardcode {$what}")) { $this->link->link->{'link_' . $what} = $post['link' . $what]; } } // Update scheduling if (isset($post['update_schedule'])) { $this->link->settings['update/hold'] = $post['update_schedule']; } if (isset($post['use_default_update_window']) and strtolower($post['use_default_update_window']) == 'yes') { unset($this->link->settings['update/window']); } elseif (isset($post['update_window'])) { if ((int) $post['update_window'] > 0) { $this->link->settings['update/window'] = (int) $post['update_window']; } } } else { // Global update_option('feedwordpress_cat_id', $post['syndication_category']); if (!isset($post['automatic_updates']) or !in_array($post['automatic_updates'], array('init', 'shutdown'))) { $automatic_updates = NULL; } else { $automatic_updates = $post['automatic_updates']; } update_option('feedwordpress_automatic_updates', $automatic_updates); if (isset($post['update_window'])) { if ((int) $post['update_window'] > 0) { update_option('feedwordpress_update_window', (int) $post['update_window']); } } update_option('feedwordpress_update_time_limit', $post['update_time_limit'] == 'yes' ? (int) $post['time_limit_seconds'] : 0); foreach (array('name', 'description', 'url') as $what) { // We have a checkbox for "No," so if it's unchecked, mark as "Yes." $hardcode = isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'; update_option("feedwordpress_hardcode_{$what}", $hardcode); } } if (isset($post['fetch_timeout'])) { if (isset($post['fetch_timeout_default']) and $post['fetch_timeout_default'] == 'yes') { $timeout = NULL; } else { $timeout = $post['fetch_timeout']; } if (is_int($timeout)) { $timeout = intval($timeout); } $this->update_setting('fetch timeout', $timeout); } if (isset($post['update_minimum'])) { $this->update_setting('update/minimum', $post['update_minimum']); } if (isset($post['link_rss_auth_method']) and $post['link_rss_auth_method'] and '-' != $post['link_rss_auth_method']) { $this->update_setting('http auth method', $post['link_rss_auth_method']); } else { $this->update_setting('http auth method', NULL); } if (isset($post['link_rss_username']) and strlen($post['link_rss_username']) > 0 and '-' != $post['link_rss_auth_method']) { $this->update_setting('http username', $post['link_rss_username']); } else { $this->update_setting('http username', NULL); } if (isset($post['link_rss_password']) and strlen($post['link_rss_password']) > 0 and '-' != $post['link_rss_auth_method']) { $this->update_setting('http password', $post['link_rss_password']); } else { $this->update_setting('http password', NULL); } $this->updatedPosts->accept_POST($post); parent::save_settings($post); }
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 <<?php echo wp_specialchars($link_rss_uri, 'both'); ?> > for validity">validate</a>) </td> <td width="20%"><input type="submit" name="feedfinder" value="switch →" 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 accept_POST($post) { // User mashed a Save Changes button if (isset($post['save']) or isset($post['submit'])) { if ($this->for_feed_settings()) { $alter = array(); // custom feed settings first foreach ($post['notes'] as $mn) { $mn['key0'] = trim($mn['key0']); $mn['key1'] = trim($mn['key1']); if (preg_match("^((" . implode(')|(', $this->special_settings) . "))\$i", $mn['key1'])) { $mn['key1'] = 'user/' . $mn['key1']; } if (strlen($mn['key0']) > 0) { unset($this->link->settings[$mn['key0']]); // out with the old } if ($mn['action'] == 'update' and strlen($mn['key1']) > 0) { $this->link->settings[$mn['key1']] = $mn['value']; // in with the new } } // now stuff through the web form // hardcoded feed info foreach (array('name', 'description', 'url') as $what) { // We have a checkbox for "No," so if it's unchecked, mark as "Yes." $this->link->settings["hardcode {$what}"] = isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'; if (FeedWordPress::affirmative($this->link->settings, "hardcode {$what}")) { $this->link->link->{'link_' . $what} = $post['link' . $what]; } } // Update scheduling if (isset($post['update_schedule'])) { $this->link->settings['update/hold'] = $post['update_schedule']; } if (isset($post['use_default_update_window']) and strtolower($post['use_default_update_window']) == 'yes') { unset($this->link->settings['update/window']); } elseif (isset($post['update_window'])) { if ((int) $post['update_window'] > 0) { $this->link->settings['update/window'] = (int) $post['update_window']; } } } else { // Global update_option('feedwordpress_cat_id', $post['syndication_category']); if (!isset($post['automatic_updates']) or !in_array($post['automatic_updates'], array('init', 'shutdown'))) { $automatic_updates = false; } else { $automatic_updates = $post['automatic_updates']; } update_option('feedwordpress_automatic_updates', $automatic_updates); if (isset($post['update_window'])) { if ((int) $post['update_window'] > 0) { update_option('feedwordpress_update_window', (int) $post['update_window']); } } update_option('feedwordpress_update_time_limit', $post['update_time_limit'] == 'yes' ? (int) $post['time_limit_seconds'] : 0); foreach (array('name', 'description', 'url') as $what) { // We have a checkbox for "No," so if it's unchecked, mark as "Yes." $hardcode = isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'; update_option("feedwordpress_hardcode_{$what}", $hardcode); } $this->updated = true; } $this->updatedPosts->accept_POST($post); if ($this->for_feed_settings()) { // Save settings $this->link->save_settings(true); $this->updated = true; // Reset, reload $link_id = $this->link->id; unset($this->link); $this->link = new SyndicatedLink($link_id); } // Probably a "Go" button for the drop-down } else { $this->updated = false; } }
function hardcode($what) { $default = get_option("feedwordpress_hardcode_{$what}"); if ($default === 'yes') { // If the default is to hardcode, then we want the // negation of negative(): TRUE by default and FALSE if // the setting is explicitly "no" $ret = !FeedWordPress::negative($this->settings, "hardcode {$what}"); } else { // If the default is NOT to hardcode, then we want // affirmative(): FALSE by default and TRUE if the // setting is explicitly "yes" $ret = FeedWordPress::affirmative($this->settings, "hardcode {$what}"); } return $ret; }