There was a problem initializing the feedlist plugin. Make sure the file feedlist.php is directly under your wp-content/plugins directory and not a subdirectory.
args = $args; $this->id = md5(uniqid(rand(), true)); } function GetID(){ $this->Debug($this->id); } /* core methods */ // called automagically if you use an inline filter (inside a post/page). function FeedListFilter(){ return $this->BuildFeedOutput(); } // call this if you want to process one feed function FeedListFeed(){ echo $this->BuildFeedOutput(); } // call this if you want to process a feed file function FeedListFile(){ $this->args = $this->GetArgumentArray(); $this->output = ''; // Seed the random number generator: srand((double)microtime()*1000000); $feed = Array(); $feedInfo = $this->LoadFile($this->args['file']); if(count($feedInfo)){ // we have some feeds // Randomize the array: shuffle($feedInfo); // Make sure we are set to show something: ($this->args['feedsToShow'] < 1) ? 1 : $this->args['feedsToShow']; ($this->args['feedsToShow'] > sizeof($feedInfo)) ? sizeof($feedInfo) : $this->args['feedsToShow']; // we will fetch each feed, then coallate items for($i=0;$i<$this->args['feedsToShow'];$i++){ $thisFeed = $feedInfo[$i]; $urlAndTitle = preg_split("/~/", $thisFeed); $feedUrl = trim($urlAndTitle[0]); $feedTitle = trim($urlAndTitle[1]); $this->rs = $this->GetFeed($feedUrl); if($this->rs){ $this->items = $this->rs->items; if($this->args['random']){ shuffle($this->items); } // Slice off the number of items that we want: if ($this->args['num_items'] > 0) { $this->items = array_slice($this->items, 0, $this->args['num_items']); } if(!$this->args['mergeFeeds']){ $this->output.= '
'.$feedTitle.'
'; if($this->args['show_date']){ $this->output .= '
updated: '. $this->NormalizeDate($this->rs) . '
'; // fl_tz_convert($this->rs->last_modified,0,Date('I')).''; } $this->output.=$this->Draw($this->items,$this->args); } else { $feed = array_merge($feed,$this->items); } } } $this->output .= ''; } else { $this->output = $this->args['before'] . 'No Items Were Found In the Provided Feeds. Perhaps there is a communication problem.' . $this->args['after']; } // coallate feed items echo $this->output; } /* end core methods */ /* basic settings - you can edit these */ function GetSettings(){ /* CONFIGURATION SETTINGS ---------------------- cacheTimeout how long should your cache file live in seconds? By default it is 21600 or 6 hours. most sites prefer you use caching so please make sure you do! connectionTimeout how long should I try to connect the feed provider before I give up, default is 15 seconds showRssLinkListJS TRUE by default and will include a small block of JS in your header. If it is false the JS will not be included. If you want the $new_window = 'true' option to use the JS then this must also be true. Otherwise both true and simple will hardcode the target="_blank" into the new window links */ // DEFINE THE SETTINGS -- EDIT AS YOU NEED: $feedListDebug = false; // To debug this script during programming (true/false). $cacheTimeout = 21600; // 21600 sec is 6 hours. $connectionTimeout = 15; // 15 seconds is default $showRSSLinkListJS = true; $Language = 'en_US'; // Choose your language (from the available languages below,in the translations): $Translations = array(); // Please send in your suggestions/translations: // English: $Translations['en_US'] = array(); $Translations['en_US']['ReadMore'] = 'Read more...'; // Dutch: $Translations['nl_NL'] = array(); $Translations['nl_NL']['ReadMore'] = '[lees verder]'; // French: $Translations['fr_FR'] = array(); $Translations['fr_FR']['ReadMore'] = 'Lisez davantage'; $feedListFile = '/feeds.txt'; // IF you are going to use the random feedlist generator make sure this holds the correct name for your feed file: // Build an array out of the settings and send them back: $settings = array ( 'feedListDebug' => $feedListDebug, 'cacheTimeout' => $cacheTimeout, 'connectionTimeout' => $connectionTimeout, 'showRSSLinkListJS' => $showRSSLinkListJS, 'language' => $Language, 'translations' => $Translations, 'feedListFile' => $feedListFile ); return $settings; } function GetDefaults(){ $settings = $this->GetSettings(); return array( 'rss_feed_url' => 'http://del.icio.us/rss', 'num_items' => 15, 'show_description' => true, 'random' => false, 'before' => '
  • ', 'after' => '
  • ', 'description_separator' => ' - ', 'encoding' => false, 'sort' => 'none', 'new_window' => false, 'ignore_cache' => false, 'suppress_link' => false, 'show_date' => false, 'additional_fields' => '', 'max_characters' => 0, 'max_char_wordbreak' => true, 'file'=>$settings['file'], 'feedsToShow'=>0, 'mergeFeeds'=>false, 'show_date_per_item' => false, 'show_description_only' => false ); } /* end basic settings */ function BuildFeedOutput(){ $this->args = $this->GetArgumentArray(); $this->rs = $this->GetFeed($this->args['rss_feed_url']); $this->output = ''; if($this->rs){ $this->items = $this->rs->items; if($this->args['random']){ shuffle($this->items); } // Slice off the number of items that we want: if ($this->args['num_items'] > 0) { $this->items = array_slice($this->items, 0, $this->args['num_items']); } $this->output = $this->Draw(); } return $this->output; } function Draw(){ $settings = $this->GetSettings(); $this->items = $this->NormalizeDates($this->items); $this->items = $this->SortItems($this->items,$this->args['sort']); // Explicitly set this because $new_window could be "simple": $target = ''; if($this->args["new_window"] == true && $settings["showRSSLinkListJS"]) { $target=' rel="external" '; } elseif ($this->args["new_window"] == true || $settings["new_window"] == 'simple') { $target=' target="_blank" '; } $this->output =''; foreach($this->items as $item){ $thisLink = ''; $linkTitle = ''; $thisDescription = ''; $thisTitle = $item['title']; $thisItemDate = ''; if($this->args['show_description_only']){ $this->args['show_description'] = true; } if ($this->args['encoding']){ // very poor and limited internationalization effort $thisTitle = htmlentities(utf8_decode($thisTitle)); } if (isset($item['content']['encoded']) || isset($item['description'])){ if (isset($item['description'])){ $thisDescription = $item['description']; } else{ $thisDescription = $item['content']['encoded']; } // Handle max_characters and max_char_wordbreak before the htmlentities makes it more complicated: if (!empty($this->args['max_characters']) && is_numeric($this->args['max_characters'])) { $thisDescription = substr($thisDescription, 0, $this->args['max_characters']); // If true, we cut on the last space: if (!empty($this->args['max_char_wordbreak'])) { $max_char_pos = strrpos($thisDescription, ' '); if ($max_char_pos > 0) { $thisDescription = substr($thisDescription, 0, $max_char_pos); } } } else if ($encoding) { //further really weak attempt at internationalization $thisDescription = htmlentities(utf8_decode($thisDescription)); } $linkTitle = $thisDescription; $linkTitle = strip_tags($linkTitle); $linkTitle = str_replace(array("\n", "\t", '"'), array('', '', "'"), $linkTitle); $linkTitle = substr($linkTitle, 0, 300); // if we are only showing the description we don't need the separator.. if (strlen(trim($thisDescription)) && !$this->args['show_description_only']) { $thisDescription = $this->args['description_separator'].$thisDescription; } } // Only build the hyperlink if a link is provided..and we are not told to suppress the link: if (!$this->args['suppress_link'] && strlen(trim($item['link'])) && strlen(trim($thisTitle)) && !$this->args['show_description_only']){ $thisLink = ''.$thisTitle.''; } elseif (strlen(trim($item['link'])) && $this->args['show_description']) { // If we don't have a title but we do have a description we want to show.. link the description $thisLink = ''.$thisDescription.''; $thisDescription = ''; } else { $thisLink = '' . $thisTitle . ''; } if($this->args['show_date_per_item']){ $thisItemDate = '
    ' . $item['feeddate'] . '
    '; } // Determine if any extra data should be shown: $extraData = ''; if (strlen($this->args['additional_fields'])){ // Magpie converts all key names to lowercase so we do too: $this->args['additional_fields'] = strtolower($this->args['additional_fields']); // Get each additional field: $addFields = explode('~', $this->args['additional_fields']); foreach ($addFields as $addField) { // Determine if the field was a nested field: $fieldDef = explode('.', $addField); $thisNode = $item; foreach($fieldDef as $fieldName) { // Check to see if the fieldName has a COLON in it, if so then we are referencing an array: $thisField = explode(':', $fieldName); $fieldName = $thisField[0]; $thisNode = $thisNode[$fieldName]; if (count($thisField) == 2) { $fieldName = $thisField[1]; $thisNode = $thisNode[$fieldName]; } } if (is_string($thisNode) && isset($thisNode)) { $extraData .= '
    ' . $thisNode . '
    '; } } } if($this->args['show_description_only']){ $this->output .= $this->args['before'].$thisLink.$thisItemDate.$extraData; } else if ($this->args['show_description']){ $this->output .= $this->args['before'].$thisLink.$thisItemDate.$thisDescription.$extraData; }else{ $this->output .= $this->args['before'].$thisLink.$thisItemDate.$extraData; } if (is_numeric($this->args['max_characters']) && $this->args['max_characters'] > 0) { $this->output .= ''; } $this->output .= $this->args['after']; } return $this->output; } function ArrayPush(&$arr) { $args = func_get_args(); foreach ($args as $arg) { if (is_array($arg)) { foreach ($arg as $key => $value) { $arr[$key] = $value; $ret++; } }else{ $arr[$arg] = ""; } } return $ret; } /* utility functions */ function NormalizeDates(){ $newItems = array(); foreach($this->items as $item){ $this->ArrayPush($item,array("feeddate"=>$this->NormalizeDate($item))); array_push($newItems,$item); } return $newItems; } function NormalizeDate($item){ $d=""; if(array_key_exists('pubdate',$item)) { $d = date($this->dateFormat,strtotime($item['pubdate'])); } else if (array_key_exists('published',$item)) { $d = date($this->dateFormat,strtotime($item['published'])); } else if (array_key_exists('dc',$item) && array_key_exists('date',$item['dc'])) { $d = date($this->dateFormat,strtotime($item['dc']['date'])); } else if (array_key_exists('last_modified',$item)) { $d = $this->TimezoneConvert($item['last_modified'],0,Date('I')); } else { $d = date($this->dateFormat); } return $d; } function TimezoneConvert($datetime,$tz_from,$tz_to,$format='d M Y h:ia T'){ return date($format,strtotime($datetime)+(3600*($tz_to - $tz_from))); } function MakeNumericOnly($val){ return ereg_replace( '[^0-9]+', '', $val); } function GetMonthNum($month){ $months = array('jan'=>'01','feb'=>'02','mar'=>'03','apr'=>'04','may'=>'05','jun'=>'06','jul'=>'07','aug'=>'08','sep'=>'09','oct'=>'10','nov'=>'11','dec'=>'12'); $month = strtolower($month); return $months[$month]; } function SortItems(){ $sort = strtolower($this->args['sort']); $sort = explode(" ",$sort); if((count($sort) ==1 || $sort[0] == 'asc') && $sort[0] != 'none'){ $sort[1] = SORT_ASC; } elseif ($sort[1] == 'desc') { $sort[1] = SORT_DESC; } else { $sort[1] = ''; } if($sort[0] == 'feeddate'){ $sort[2] = SORT_NUMERIC; } else { $sort[2] = SORT_STRING; } if (($sort[1]!='') && count($this->items)) { // Order by sortCol: foreach($this->items as $item) { $sortBy[] = $item[$sort[0]]; } // Make titles lowercase (otherwise capitals will come before lowercase): $sortByLower = array_map('strtolower', $sortBy); array_multisort($sortByLower, $sort[1], $sort[2], $this->items); } return $this->items; } function LoadFile($file){ /* load the $feedListFile contents into an array, using the --NEXT-- text as a delimeter between feeds and a tilde (~) between URL and TITLE */ $x = file($file); return preg_split("/--NEXT--/", join('', file($file))); } function GetArgumentArray(){ $this->args = $this->AssignDefaults(); $a = array(); foreach($this->args as $d=>$v){ if($this->args[$d] === 'true') { $a[$d] = 1; }else if($this->args[$d] === 'false'){ $a[$d] = 0; }else{ $a[$d] = $v; } $a[$d] = html_entity_decode($a[$d]); } return $a; } function AssignDefaults(){ $defaults = $this->GetDefaults(); $a = array(); $i=0; foreach ($defaults as $d => $v) { $a[$d] = isset($this->args[$d]) ? $this->args[$d] : $v; $a[$d] = isset($this->args[$i]) ? $this->args[$i] : $a[$d]; $i++; } return $a; } function GetFeed($feedUrl){ $this->feed = false; if(function_exists('fetch_rss')){ $this->feed = fetch_rss($feedUrl); } return $this->feed; } function InitializeReader($ignore_cache){ $settings = $this->GetSettings(); if ($ignore_cache) { if (is_numeric($ignore_cache)) { define('MAGPIE_CACHE_AGE', $ignore_cache); } else { define('MAGPIE_CACHE_ON', false); } } else { define('MAGPIE_CACHE_AGE', $settings["cacheTimeout"]); } define('MAGPIE_DEBUG', false); define('MAGPIE_FETCH_TIME_OUT', $settings["connectionTimeout"]); } function Debug($val,$name=''){ if(strlen($name)){ print('

    '.$name.'

    '); } print('
    ');
    				print_r($val);
    				print('
    '); } /* end utility functions */ } function rssLinkListFilter($text) { return preg_replace_callback("//", "feedListFilter", $text); } /* Templates can call any of these functions */ function rssLinkList($args){ if(!is_array($args)){ $args = func_get_args(); } return feedList($args); } function feedList($args){ if(!is_array($args)){ $args = func_get_args(); } $feed = new FeedList($args); return $feed->FeedListFeed(); } function randomFeedList($args){ if(!is_array($args)){ $this->args = parse_str($args,$a); $this->args = $a; } $feed = new FeedList($args); return $feed->FeedListFile(); } function feedListFilter($args){ $args = explode(",",$args[1]); if(count($args) == 1 && !strpos($args[0],":=")){ $a = array(); $a["rss_feed_url"] = $args[0]; $args = $a; } else { $a = array(); foreach($args as $arg){ $arg = explode(":=",$arg); $a[$arg[0]] = $arg[1]; } $args = $a; } $feed = new FeedList($args); return $feed->FeedListFilter(); } /* end template functions */ if (function_exists('add_filter')) { add_filter('the_content', 'rssLinkListFilter'); } if(function_exists('FeedListInitError')){ add_action('admin_head','FeedListInitError'); } if(function_exists('add_action')) { function rssLinkList_JS(){ $jsstring = ' '; echo $jsstring; } $jsFeed = new FeedList(''); $settings = $jsFeed->GetSettings(); if($settings["showRSSLinkListJS"]){ add_action('wp_head', 'rssLinkList_JS'); } } ?> 2009 January-- Heart To Hand: Quilt Talk with Wendy

    Got the Winter Blahs?
    Pull out your colors and play!

    January 28th, 2009

    I love this article from Quilting Arts:

    “The whites, grays, and browns of winter have their appeal—but after a while they can become monotonous, even depressing. Fortunately, you have the tools to revive your spirits and your artwork with some color therapy. Here are some ideas:

    Get out your toys. Take out your brightest, cheeriest fabrics and look for interesting combinations. Try pairings you never thought of before (a good way to do this is to mess up a pile of fabrics on a table and look for juxtapositions that catch your eye). If you find an inspiring match, cut a snippet of each and glue or staple them into your sketchbook.

    Organize your stash. Just folding and stacking your fabrics or sorting embroidery threads by color will stimulate your senses. A great mood lifter!

    Over-dye. Tired of black-and-white designs? Got a vintage piece that could use some pizzazz? Over-dye it with Procion® dyes or diluted fluid acrylic paints. It’s so much fun to see how color changes the character of the fabric.

    Color your mood. See if you can change your mood by making a fabric or mixed-media self-portrait in shades of one color.

    Experiment in your sketchbook. Now is the perfect time to try coloring with paints, oil sticks, or colored pencils. Just sit by a sunny window and doodle the day away. ”

    What great ideas!  Thanks for sharing Quilting Arts Staff!

    See Color Therapy in Action

    Here are some tools that will help you put your color therapy into action.

    Color from the Heart: Seven Great Ways to Make Quilts with Colors You Love

    It’s easy to effectively use the colors you love in your quiltmaking. Learn to rely more on your intuitive color choices and less on other people’s opinions of what “looks right.”Not just another book about traditional color theory! Includes 7 projects for wallhanging-size quilts and lessons that show you how to:

    Give equal importance to color and fabric personality
    Use 40 unrelated fabrics in 1 small quilt
    Make a 2-color quilt, adding enrichment colors without changing the integrity of the original scheme
    Design a quilt inspired by a favorite photo, painting, or decorative object
    Create a dazzling abstract quilt based on a memory picture.
     
     

     

    Happy Day!

    Wendy

    Adopt A Bolt Sale

    January 27th, 2009

    Adopt A Bolt4 Yard Adopt A Bolt Program Information

    January 27th through February 7th we are offering our web only adopt-a-bolt program. Here is how it works. We have selected many bolts of fabric that we want to clear out. However, we do not know the exact yardage until you order it because our customers are still purchasing them at the shop. If you choose to participate in the Adopt-a-bolt program you are agreeing to the following:

    1. You are buying the entire remaining bolt up to 4 yards at the sale price listed. This could be 1/2 yard to 4 yards. Because of the reduced prices you do not know the total amount you are getting. Sorry we are NOT cutting these in smaller pieces.

    2. When you choose your fabrics enter the number 4 in the check out form and we will send you the entire bolt at the sale price. If you enter ANY other number we will send you that exact amount at FULL PRICE Listed on the web page.

    3. We process orders on a first come first served basis and if the bolt you ordered has been sold, we will not reorder it for you. Once your order has been pulled and cut, Susan will process the order and will notify you when your order is sent and what the total on your purchase amount is. Postage for this special event is flat rate USA priority envelope (which holds up to 6 yards except flannel) or USA flat rate priority box (which holds up to 12 yards, except flannel). 

    4. In order to simplify pricing and handling issues for our staff, this sale is NOT going on in the shop! If you live in the area, order online and request pick up in special instructions box we will notify you when your order is ready and you will not be charged shipping.

    If you are interested in seeing the fabrics for this sale click here!

    Happy Day!

    Wendy

    Local Update: Quilt Till You Wilt

    January 21st, 2009

    Can you believe that January has five Saturdays?  I did not realize it until late last week.  I am going to have some minor surgery on my hand the first week of February and I kept thinking it was coming sooner than later.  Well, a 5th Saturday explains my date confusion.

    As a result, we are adding another Quilt Till You Wilt Potluck for THIS Saturday, January 24th.  If you have never been to a Quilt Till You Wilt, you are missing out on a lot of fun and sewing time!  This is one of our MOST popular events!  Bring an unfinished project to work on? Want to sew and socialize? Then join us for a Free Class: Quilt Till You Wilt. EVERY month in 2009! This is an open quilting and sewing time. We start at 10:00am and you may sew all day until 4:45pm or until you wilt. Bring anything you want to work on and bring Lunch Pot Luck Dish to share for our 12:30 Lunch and continue snacking all day. Please bring your Show and tell items as well, for our sharing time before Lunch.

    PLEASE RSVP online or by calling 503-230-9075 so we can save you a seat!

    Happy Day!

    Wendy

    Once Upon A Star

    January 18th, 2009

    I just finished teaching this block for our first class meeting of the McKenna Ryan Once Upon A Star Block of the Month Quilt.

    It was a great class, we had fun choosing fabrics, and using fusiable applique techniques.  There is still time for you to join us in this project on-line or in the shop.

    Shown here are the fabrics that I chose for my block.  We were not able to get in the Hoffman fabrics in time for this class.  So you can choose your own fabrics, or we can send you the monthly fabrics that I will be making my quilt out of.  This is really a fun quilt and easy.  Join us!

    Happy Day!

    Wendy

    Sisters 2009 Outdoor Quilt Show

    January 11th, 2009

    34th Annual Sisters Outdoor Quilt Show

    Saturday, July 11, 2009

    9:30 am to 5:00 pm

    Invite your friends & family to join us for the most vibrant day of the year in Sisters. Over 1200 quilts from around the world will cover the 1880’s-style town in rich texture and color.

    Quilt entry information for the 2009 Sisters Outdoor Quilt Show is now available to download on their website.  The brochure contains complete information about how to register quilts to enter in our show, this year’s Theme Contest and Quilt Block Contest and other Special Events planned for this year.  

    Happy Day!

    Wendy

     

     

     

    Once Upon A Star

    January 10th, 2009

    Available online and at the shop. The McKenna Ryan Club will begins in January 2009 and continue monthly for eight months. We will be working on the Wonder Quilt: Once Upon A Star. McKenna’s whimsical characters, from the far North and South, unite in this holiday celebration of polar beauty evoking the mysteries of Christmas and reminds us of the delicacy of our environment. The full quilt of 8 blocks, plus border, measures 56 1/2″x 63″. Monthly pricing plans will have the option of: Pattern Only, Pattern with Some Fabrics, or Pattern with Embellishments and some fabric. We will begin with the Seal block and doing the blocks in order of difficulty.Cost: Yearly cost for this club is $20.00.

    Pricing Options:
    Pattern Only: $12.49 each block
    Fabric Kit: The Hoffman fabric kit we provide only includes 7 of the featured fabrics in the pattern and is $35.00. If you choose this option it will be provided with your first block. You will need to supply additional fabrics from your stash to complete each block.
     

     

    Happy Day!

    Wendy

    2009 Pieced Block of the Month: Better By The Dozen

    January 9th, 2009

    Available in the shop only. Join us the first Saturday of each month for the pieced Block of the Month Club. We will be using the book “Better by the Dozen” 12 Blocks, 12 Quilts, Endless Possibilities by Susan Teegarden Dissmore. Begin by purchasing the book at Heart To Hand. Save your receipt for proof of purchase. You will also need to purchase 3 yards of fabric for your quilt at $6.99 or up. We will meet monthly; have show and tell, prizes, and a project pattern and a monthly drawing for a kit for the project of the month. There is no penalty for no show, late pick-up or anything. We do not like to play police and you do not like us to!

    I have been working on my 2009 First Saturday Block of the Month program.  I hope to reviel all that infomration the week at the February Class.  You can see the great blocks and the project that I have made.  Please note this is NOT the Lottery Block Program where you send in your blocks every month! The great news about the First Saturday Program is that you will be able to choose your own colors and layout!  Mine of course is Purple, but yours can be pretty much ANYTHING! 

    Cost: Purchase of Book and 3 yards of Fabric
    Meets: January 3rd and every first Saturday of the year
    Time: 11:00-12:00
    Teachers: Wendy and Beth

    Register Now!

    Happy Day!

    Wendy

    Get the Flash Player to see this player.

    2009 Lottery Block of the Month

    January 8th, 2009

    During the year 2009 we will be focusing on blocks printed by “The Kansas City Star” newspaper. From the fall of 1928 until 1961 the Kansas City Star published more than 1,000 quilt patterns quilt patterns for quilters. The newspaper’s rural editions reached several states throughout the Midwest and many quilt patterns that were published were submitted by readers.

    The January 2009 block is “The Bow Tie Block” is a very easy block of squares and half square triangles, which every one can sew. This block was originally published in the Kansas City Star 2-22-56 and was made in pink and white fabrics. Come on and join the fun! Complete Details here.

    NEW AUTO SHIP OPTION: We will auto ship these blocks to you once a month for a year if you check the auto ship option. Susan will just charge your credit card on the first of the month the $2.75.

    Happy Day!

    Wendy

    2009 Super Bowl Mystery Class

    January 7th, 2009

    We are having a Super Bowl Mystery Quilt Class!
    Come Join the Fun!

    This is a fun and easy to make, and the optical illusions that emerge when the blocks are sewn together add even more interest. You can use just a few colors, or scrap it up some, too. Done in black and white, with a splash of another color it is phenomenal!

    The supply list gives directions that allows you to make this into any size quilt from placemats, tablerunner, lap, double, queen and king.

    February 1st
    10:00 to 5pm
    Bring: Pot Luck Lunch Dish
    Coffee and Water will be served
    Chocolate to share for dessert
    and a be prepared for FUN!
    Cost $15 includes pattern
    This is a great quilt for all skill levels.