text:
<?php
/*********
* Style the visual editor to match the theme styles
*/
add_filter('mce_css', 'my_editor_style');
function my_editor_style($url) {
  if ( !empty($url) ) {
    $url .= ',';
  }
  $url .= trailingslashit( get_stylesheet_directory_uri() ) . '/css/ed-content.css';
  return $url;
}

/*********
* Disable comment cookies
*/
remove_action('set_comment_cookies', 'wp_set_comment_cookies');

/* Disable Emojicons */
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );

/*********
 * Register and define the Social Sharing setting
 */
function mozhacks_admin_init(){
  register_setting(
    'reading',
    'mozhacks_share_posts'
  );
  add_settings_field(
    'share_posts',
    __( 'Social sharing', 'mozhacks' ),
    'mozhacks_settings_field_share_posts',
    'reading',
    'default'
  );

  register_setting(
    'reading',
    'mozhacks_twitter_username'
  );
  add_settings_field(
    'twitter_username',
    __('Twitter username', 'mozhacks'),
    'mozhacks_settings_field_twitter_username',
    'reading',
    'default'
  );
}
add_action('admin_init', 'mozhacks_admin_init');

// Render the Social Sharing checkbox on the settings page
function mozhacks_settings_field_share_posts() {
	?>

		<input type="checkbox" id="mozhacks_share_posts" name="mozhacks_share_posts" value="1" <?php checked( '1', get_option('mozhacks_share_posts') ); ?> />

			<?php _e('Add social sharing buttons to posts and pages', 'mozhacks'); ?>

	<?php
}

// Renders the Twitter account setting field to share via.
function mozhacks_settings_field_twitter_username() { ?>

    <input type="text" id="mozhacks_twitter_username" name="mozhacks_twitter_username" value="<?php echo get_option('mozhacks_twitter_username'); ?>">

<?php _e('The Twitter account for attribution when sharing. Appears as "via @username" at the end of the tweet, and Twitter may suggest related accounts to follow. Leave this blank for no attribution.', 'mozhacks'); ?>

  <?php
}

/*********
* Remove WP version from head (helps us evade spammers/hackers who search for default metadata)
*/
remove_action('wp_head', 'wp_generator');

/**
* Replace the default title separator.
*/
function mozhacks_document_title_separator() {
  $sep = '–'; // this is en dash, not a hyphen
  return $sep;
}
add_filter('document_title_separator', 'mozhacks_document_title_separator');

/**
* Returns the page number currently being browsed.
*/
function mozhacks_page_number() {
  global $paged; // Contains page number.
  $sep = ' ' . mozhacks_document_title_separator() . ' ';
  if ($paged >= 2) {
    return $sep . sprintf(__('Page %s', 'mozhacks'), $paged);
  }
}

/**
* Prints a nice multipart page title.
* Used in the meta tags where wp_title() doesn't cut it.
*/
function mozhacks_meta_page_title() {
    $pagenum = mozhacks_page_number();
    $sep = ' ' . mozhacks_document_title_separator() . ' ';
    $sitename = get_bloginfo('name');

    if (is_single()) {
        $title = single_post_title('', false) . $sep . $sitename;
    }
    elseif (is_home() || is_front_page()) {
        $title = $sitename . $pagenum;
        if (get_bloginfo('description', 'display')) {
            $title .= $sep . get_bloginfo('description', 'display');
        }
    }
    elseif (is_page()) {
        $title = single_post_title('', false) . $sep . $sitename;
    }
    elseif (is_archive()) {
        if (is_category()) {
            $title = sprintf(__('Articles in "%s"', 'mozhacks'), single_cat_title('', false)) . $pagenum . $sep . $sitename;
        } elseif (is_tag()) {
            $title = sprintf(__('Articles tagged with "%s"','mozhacks'), single_tag_title('', false)) . $pagenum . $sep . $sitename;
        } elseif (is_author()) {
            $title = sprintf(__('Articles by %s', 'mozhacks'), get_the_author()) . $pagenum . $sep . $sitename;
        } elseif (is_day()) {
            $title = sprintf(__('Articles from %s', 'mozhacks'), get_the_date()) . $pagenum . $sep . $sitename;
        } elseif (is_month()) {
            $title = sprintf(__('Articles from %s', 'mozhacks'), get_the_date('F, Y')) . $pagenum . $sep . $sitename;
        } elseif (is_year()) {
            $title = sprintf(__('Articles from %s', 'mozhacks'), get_the_date('Y')) . $pagenum . $sep . $sitename;
        } else {
            $title = get_the_archive_title() . $pagenum . $sep . $sitename;
        }
    } elseif (is_search()) {
        $title = sprintf(__('Search results for "%s"', 'mozhacks'), esc_html(get_search_query())) . $pagenum . $sep . $sitename;
    } elseif (is_404()) {
      $title = __('Not Found', 'mozhacks') . $sep . $sitename;
    } else {
      $title = wp_title('', false, 'right') . $pagenum . $sep . $sitename;
    }

    echo $title;
}

/*
* Print the current page URL.
*/
function mozhacks_current_url() {
    global $wp;
    $current_url = esc_url(home_url(add_query_arg(array(),$wp->request)));

    echo $current_url;
}

/**
* Use auto-excerpts for meta description if hand-crafted exerpt is missing
*/
function mozhacks_meta_desc() {
  $post_desc_length = 30; // auto-excerpt length in number of words

  global $cat, $cache_categories, $wp_query, $wp_version;
  if(is_single() || is_page()) {
    $post = $wp_query->post;
    $post_custom = get_post_custom($post->ID);

    if(!empty($post->post_excerpt)) {
      $text = $post->post_excerpt;
    } else {
      $text = $post->post_content;
    }
    $text = do_shortcode($text);
    $text = str_replace(array("\r\n", "\r", "\n", "  "), " ", $text);
    $text = str_replace(array("\""), "", $text);
    $text = trim(strip_tags($text));
    $text = explode(' ', $text);
    if(count($text) > $post_desc_length) {
      $l = $post_desc_length;
      $ellipsis = '...';
    } else {
      $l = count($text);
      $ellipsis = '';
    }
    $description = '';
    for ($i=0; $i<$l; $i++)
      $description .= $text[$i] . ' ';

    $description .= $ellipsis;
  }
  elseif(is_category()) {
    $category = $wp_query->get_queried_object();
    if (!empty($category->category_description)) {
      $description = trim(strip_tags($category->category_description));
    } else {
      $description = single_cat_title('Articles posted in ', 'mozhacks');
    }
  }
  else {
    $description = trim(strip_tags(get_bloginfo('description')));
  }

  if($description) {
    echo $description;
  }
}

/*********
* Register sidebars
*/
if ( function_exists('register_sidebars') ) :
  register_sidebar(array(
    'name' => 'Home Page Sidebar',
    'id' => 'home',
    'description' => 'Displayed on the Home page',
    'before_widget' => '
',
    'after_widget' => '
',
    'before_title' => '
',
    'after_title' => '
',
  ));

  register_sidebar(array(
    'name' => 'Articles Page Sidebar',
    'id' => 'articles',
    'description' => 'Displayed on the main Articles page',
    'before_widget' => '
',
    'after_widget' => '
',
    'before_title' => '
',
    'after_title' => '
',
  ));

  register_sidebar(array(
    'name' => 'Demos Page Sidebar',
    'id' => 'demos',
    'description' => 'Displayed on the main Demos page',
    'before_widget' => '
',
    'after_widget' => '
',
    'before_title' => '
',
    'after_title' => '
',
  ));

  register_sidebar(array(
    'name' => 'About Page Sidebar',
    'id' => 'about',
    'description' => 'Displayed on the About page',
    'before_widget' => '
',
    'after_widget' => '
',
    'before_title' => '
',
    'after_title' => '
',
  ));

endif;

/*********
* Add theme support
*/
if ( function_exists( 'add_theme_support' ) ) {
  // This theme uses Featured Images (also known as post thumbnails)
  add_theme_support('post-thumbnails');

  // Let WordPress generate document titles
  add_theme_support('title-tag');

  // Let WordPress generate feeds
  add_theme_support('automatic-feed-links');
}

/*********
 * Set up custom roles and capabilities when the theme is activated.
 */
function mozhacks_custom_roles() {
  // Reviewers.
  // Can edit other's posts, but can't publish.
  $reviewcando = array(
    'read' =>  true,
    'read_private_posts' => true,
    'edit_posts' => true,
    'edit_others_posts' => true,
    'moderate_comments' => true,
  );
  remove_role('reviewer'); // remove first to reset, then add again
  add_role( 'reviewer', 'Reviewer', $reviewcando );
}
add_action( 'admin_init', 'mozhacks_custom_roles');

/*********
 * Allow Contributors to edit their posts and upload media
 */
function mozhacks_contributor_capabilities() {
     $contributor = get_role('contributor');
     $contributor->add_cap('upload_files');
     $contributor->add_cap('edit_published_posts');
}
add_action('admin_init', 'mozhacks_contributor_capabilities');

/*********
* Load various JavaScripts
*/
function mozhacks_load_scripts() {
  // Load the default jQuery
  wp_enqueue_script('jquery');

  // Load the threaded comment reply script
  if ( is_singular() && comments_open() && get_option('thread_comments') ) {
    wp_enqueue_script( 'comment-reply' );
  }

  // Check required fields on comment form
  wp_register_script( 'checkcomments', get_template_directory_uri() . '/js/fc-checkcomment.js' );
  if ( is_singular() && comments_open() && get_option('require_name_email') ) {
    wp_enqueue_script('checkcomments');
  }

  // Register and load the socialsharing script
  if ( is_singular() && get_option('mozhacks_share_posts') && !is_page(array('home','about','demos','articles')) ) {
    wp_register_script( 'socialshare', get_template_directory_uri() . '/js/socialshare.min.js', array('jquery', 'analytics'));
    if ( is_singular() && get_option('mozhacks_share_posts') && !is_page(array('home','about','demos','articles')) ) {
      wp_enqueue_script( 'socialshare' );
    }
  }

  // Register and load analytics script with jquery dependency
  wp_register_script( 'analytics', get_template_directory_uri() . '/js/analytics.js', array('jquery'));
  wp_enqueue_script( 'analytics', get_template_directory_uri() . '/js/analytics.js' );
}
add_action( 'wp_enqueue_scripts', 'mozhacks_load_scripts' );

/*********
* Make cleaner excerpts of any length
*/
function fc_excerpt($num) {
  $limit = $num+1;
  $excerpt = explode(' ', get_the_excerpt(), $limit);
  array_pop($excerpt);
  $excerpt = implode(" ",$excerpt);
  echo $excerpt;
}

/**********
* Determine if the page is paged and should show posts navigation
*/
function fc_show_posts_nav() {
  global $wp_query;
  return ($wp_query->max_num_pages > 1) ? TRUE : FALSE;
}

/*********
* Determine if a previous post exists (i.e. that this isn't the first one)
*
* @param bool $in_same_cat Optional. Whether link should be in same category.
* @param string $excluded_categories Optional. Excluded categories IDs.
*/
function fc_previous_post($in_same_cat = false, $excluded_categories = '') {
  if ( is_attachment() )
    $post = & get_post($GLOBALS['post']->post_parent);
  else
    $post = get_previous_post($in_same_cat, $excluded_categories);
  if ( !$post )
    return false;
  else
    return true;
}

/*********
* Determine if a next post exists (i.e. that this isn't the last post)
*
* @param bool $in_same_cat Optional. Whether link should be in same category.
* @param string $excluded_categories Optional. Excluded categories IDs.
*/
function fc_next_post($in_same_cat = false, $excluded_categories = '') {
  $post = get_next_post($in_same_cat, $excluded_categories);
  if ( !$post )
    return false;
  else
    return true;
}

/*********
* Determines if the current page is the result of paged comments.
* This lets us prevent search engines from indexing lots of duplicate pages (since the post is repeated on every paged comment page).
*/
function is_comments_paged_url() {
  $pos = strpos($_SERVER['REQUEST_URI'], "comment-page");
  if ($pos === false) { return false; }
  else { return true; }
}

/*********
* Catch spambots with a honeypot field in the comment form.
* It's hidden from view with CSS so most humans will leave it blank, but robots will kindly fill it in to alert us to their presence.
* The field has an innucuous name -- 'age' in this case -- likely to be autofilled by a robot.
*/
function fc_honeypot( array $data ){
  if( !isset($_POST['comment']) && !isset($_POST['content'])) { die("No Direct Access"); }  // Make sure the form has actually been submitted

  if($_POST['age']) {  // If the Honeypot field has been filled in
    $message = _e('Sorry, you appear to be a spamming robot because you filled in the hidden spam trap field. To show you are not a spammer, submit your comment again and leave the field blank.', 'mozhacks');
    $title = 'Spam Prevention';
    $args = array('response' => 200);
    wp_die( $message, $title, $args );
    exit(0);
  } else {
	   return $data;
	}
}
add_filter('preprocess_comment','fc_honeypot');

/*********
* Comment Template for Mozilla Hacks theme
*/
function hacks_comment($comment, $args, $depth) {
  $GLOBALS['comment'] = $comment;
  $comment_type = get_comment_type();
?>

 <li id="comment-<?php comment_ID(); ?>" <?php comment_class(); ?>>
  <?php if ( $comment_type == 'trackback' ) : ?>
  <?php elseif ( $comment_type == 'pingback' ) : ?>
  <?php else : ?>

      <?php comment_author(); ?>

  <?php endif; ?>

    <?php if ($comment->comment_approved == '0') : ?>

<?php _e('Your comment is awaiting moderation.'); ?>

    <?php endif; ?>

      <?php comment_text(); ?>

    <a class="comment__meta" href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ); ?>" rel="bookmark" title="Permanent link to this comment by <?php comment_author(); ?>"><abbr class="published" title="<?php comment_date('Y-m-d'); ?>"><?php comment_date('F jS, Y'); ?> at <?php comment_time(); ?>

  <?php if (get_option('thread_comments') == true) : ?>

<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?> <?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) : ?><?php edit_comment_link('Edit Comment','',''); ?><?php endif; ?>

  <?php endif; ?>
<?php
} /* end comment template */

/*********
* Display the_category(), excluding Featured
*/
function fc_category_minusfeat($separator) {
  $first_time = 1;
  foreach((get_the_category()) as $category) :
    if ($category->cat_name != 'Featured Article') :
      if ($first_time == 1) :
        echo 'term_id ) . '" rel="category tag" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>'  . $category->name.'';
        $first_time = 0;
      else :
        echo $separator . 'term_id ) . '" rel="category tag" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'';
      endif;
    endif;
  endforeach;
}

/*********
* Display the_category(), excluding Demo
*/
function fc_category_minusdemo($separator) {
  $first_time = 1;
  foreach((get_the_category()) as $category) :
    if ($category->cat_name != 'Demo') :
      if ($first_time == 1) :
        echo 'term_id ) . '" rel="category tag" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>'  . $category->name.'';
        $first_time = 0;
      else :
        echo $separator . 'term_id ) . '" rel="category tag" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'';
      endif;
    endif;
  endforeach;
}

/*********
* Display the_category(), excluding Demo and Featured Demo
*/
function fc_category_minusfeatdemo($separator) {
  $first_time = 1;
  foreach((get_the_category()) as $category) :
    if ( ($category->cat_name != 'Featured Demo') && ($category->cat_name != 'Demo') && ($category->cat_name != 'Uncategorized') ) :
      if ($first_time == 1) :
        echo 'term_id ) . '" rel="category tag" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>'  . $category->name.'';
        $first_time = 0;
      else :
        echo $separator . 'term_id ) . '" rel="category tag" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'';
      endif;
    endif;
  endforeach;
}

/*********
* Register page rewrite rules for ordering pages by a field
*/
function tmh_page_order_rewrite_rules($rules) {
  $newrules = array();

  $by_pattern = 'by/([a-z]+)(/(asc|desc))?';
  $as_pattern = 'as/(title|brief|complete|list|thumbnail)';

  # we check for each combination of these individually. If we made by_pattern and as_pattern optional we would find the existing rules would be ignored.
  # paged search match
  $newrules['search/(.+?)/'.$by_pattern.'/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?s=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&tmh_view_as=$matches[5]&paged=$matches[6]';
  $newrules['search/(.+?)/'.$by_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?s=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&paged=$matches[5]';
  $newrules['search/(.+?)/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?s=$matches[1]&tmh_view_as=$matches[2]&paged=$matches[3]';

  # search match
  $newrules['search/(.+?)/'.$by_pattern.'/'.$as_pattern.'/?$'] = 'index.php?s=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&tmh_view_as=$matches[5]';
  $newrules['search/(.+?)/'.$by_pattern.'/?$'] = 'index.php?s=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]';
  $newrules['search/(.+?)/'.$as_pattern.'/?$'] = 'index.php?s=$matches[1]&tmh_view_as=$matches[2]';

  # paged category/author match
  $newrules['(category|author)/(.+?)/'.$by_pattern.'/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?$matches[1]_name=$matches[2]&tmh_sort_by=$matches[3]&tmh_sort_dir=$matches[5]&tmh_view_as=$matches[6]&paged=$matches[7]';
  $newrules['(category|author)/(.+?)/'.$by_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?$matches[1]_name=$matches[2]&tmh_sort_by=$matches[3]&tmh_sort_dir=$matches[5]&paged=$matches[6]';
  $newrules['(category|author)/(.+?)/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?$matches[1]_name=$matches[2]&tmh_view_as=$matches[3]&paged=$matches[4]';

  # category/author match
  $newrules['(category|author)/(.+?)/'.$by_pattern.'/'.$as_pattern.'/?$'] = 'index.php?$matches[1]_name=$matches[2]&tmh_sort_by=$matches[3]&tmh_sort_dir=$matches[5]&tmh_view_as=$matches[6]';
  $newrules['(category|author)/(.+?)/'.$by_pattern.'/?$'] = 'index.php?$matches[1]_name=$matches[2]&tmh_sort_by=$matches[3]&tmh_sort_dir=$matches[5]';
  $newrules['(category|author)/(.+?)/'.$as_pattern.'/?$'] = 'index.php?$matches[1]_name=$matches[2]&tmh_view_as=$matches[3]';

  # paged tag match
  $newrules['tag/(.+?)/'.$by_pattern.'/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?$tag=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&tmh_view_as=$matches[5]&paged=$matches[6]';
  $newrules['tag/(.+?)/'.$by_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?tag=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&paged=$matches[5]';
  $newrules['tag/(.+?)/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?tag=$matches[1]&tmh_view_as=$matches[2]&paged=$matches[3]';

  # tag match
  $newrules['tag/(.+?)/'.$by_pattern.'/'.$as_pattern.'/?$'] = 'index.php?tag=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&tmh_view_as=$matches[5]';
  $newrules['tag/(.+?)/'.$by_pattern.'/?$'] = 'index.php?tag=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]';
  $newrules['tag/(.+?)/'.$as_pattern.'/?$'] = 'index.php?tag=$matches[1]&tmh_view_as=$matches[2]';

  # paged dated y/m/d match
  $newrules['([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/'.$by_pattern.'/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&tmh_sort_by=$matches[4]&tmh_sort_dir=$matches[6]&tmh_view_as=$matches[7]&paged=$matches[8]';
  $newrules['([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/'.$by_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&tmh_sort_by=$matches[4]&tmh_sort_dir=$matches[6]&paged=$matches[7]';
  $newrules['([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&tmh_view_as=$matches[4]&paged=$matches[5]';

  # dated y/m/d match
  $newrules['([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/'.$by_pattern.'/'.$as_pattern.'/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&tmh_sort_by=$matches[4]&tmh_sort_dir=$matches[6]&tmh_view_as=$matches[7]';
  $newrules['([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/'.$by_pattern.'/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&tmh_sort_by=$matches[4]&tmh_sort_dir=$matches[6]';
  $newrules['([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/'.$as_pattern.'/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&tmh_view_as=$matches[4]';

  # paged dated y/m match
  $newrules['([0-9]{4})/([0-9]{1,2})/'.$by_pattern.'/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&tmh_sort_by=$matches[3]&tmh_sort_dir=$matches[5]&tmh_view_as=$matches[6]&paged=$matches[7]';
  $newrules['([0-9]{4})/([0-9]{1,2})/'.$by_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&tmh_sort_by=$matches[3]&tmh_sort_dir=$matches[4]&paged=$matches[5]';
  $newrules['([0-9]{4})/([0-9]{1,2})/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&tmh_view_as=$matches[3]&paged=$matches[4]';

  # dated y/m match
  $newrules['([0-9]{4})/([0-9]{1,2})/'.$by_pattern.'/'.$as_pattern.'/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&tmh_sort_by=$matches[3]&tmh_sort_dir=$matches[5]&tmh_view_as=$matches[6]';
  $newrules['([0-9]{4})/([0-9]{1,2})/'.$by_pattern.'/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&tmh_sort_by=$matches[3]&tmh_sort_dir=$matches[5]';
  $newrules['([0-9]{4})/([0-9]{1,2})/'.$as_pattern.'/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&tmh_view_as=$matches[3]';

  # paged dated y match
  $newrules['([0-9]{4})/'.$by_pattern.'/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&tmh_view_as=$matches[5]&paged=$matches[6]';
  $newrules['([0-9]{4})/'.$by_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&paged=$matches[5]';
  $newrules['([0-9]{4})/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?year=$matches[1]&tmh_view_as=$matches[2]&paged=$matches[3]';

  # dated y match
  $newrules['([0-9]{4})/'.$by_pattern.'/'.$as_pattern.'/?$'] = 'index.php?year=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&tmh_view_as=$matches[5]';
  $newrules['([0-9]{4})/'.$by_pattern.'/?$'] = 'index.php?year=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]';
  $newrules['([0-9]{4})/'.$as_pattern.'/?$'] = 'index.php?year=$matches[1]&tmh_view_as=$matches[2]';

  # paged page match
  $newrules['(.+?)/'.$by_pattern.'/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?pagename=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&tmh_view_as=$matches[5]&paged=$matches[6]';
  $newrules['(.+?)/'.$by_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?pagename=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&paged=$matches[5]';
  $newrules['(.+?)/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?pagename=$matches[1]&tmh_view_as=$matches[2]&paged=$matches[3]';

  # page match
  $newrules['(.+?)/'.$by_pattern.'/'.$as_pattern.'/?$'] = 'index.php?pagename=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]&tmh_view_as=$matches[5]';
  $newrules['(.+?)/'.$by_pattern.'/?$'] = 'index.php?pagename=$matches[1]&tmh_sort_by=$matches[2]&tmh_sort_dir=$matches[4]';
  $newrules['(.+?)/'.$as_pattern.'/?$'] = 'index.php?pagename=$matches[1]&tmh_view_as=$matches[2]';

  # paged direct match
  $newrules[$by_pattern.'/'.$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?tmh_sort_by=$matches[1]&tmh_sort_dir=$matches[3]&tmh_view_as=$matches[4]&paged=$matches[5]';
  $newrules[$by_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?tmh_sort_by=$matches[1]&tmh_sort_dir=$matches[3]&paged=$matches[4]';
  $newrules[$as_pattern.'/page/?([0-9]{1,})/?$'] = 'index.php?tmh_view_as=$matches[1]&paged=$matches[2]';

  # direct match (this happens on search and index pages)
  $newrules[$by_pattern.'/'.$as_pattern.'/?$'] = 'index.php?tmh_sort_by=$matches[1]&tmh_sort_dir=$matches[3]&tmh_view_as=$matches[4]';
  $newrules[$by_pattern.'/?$'] = 'index.php?tmh_sort_by=$matches[1]&tmh_sort_dir=$matches[3]';
  $newrules[$as_pattern.'/?$'] = 'index.php?tmh_view_as=$matches[1]';

  $rules = $newrules + $rules;
  return $rules;
}

/*********
* Register page rewrite variable so WP picks it up
*/
function tmh_page_order_query_vars($vars) {
  array_push($vars, 'tmh_sort_by', 'tmh_sort_dir', 'tmh_view_as');
  return $vars;
}

/*********
* Rewrite rules need to be flushed to work
*/
function tmh_flush_rules() {
  global $wp_rewrite;
  $wp_rewrite->flush_rules(false);
}
add_filter('rewrite_rules_array','tmh_page_order_rewrite_rules');
add_filter('query_vars','tmh_page_order_query_vars');
add_action('after_switch_theme', 'tmh_flush_rules');

/*********
* Returns the modified list of fields to return for the get posts query
*/
function tmh_posts_fields($fields) {
  if (is_admin()) {
    return $fields;
  }

  global $wpdb;
  $fields .= ", $wpdb->postmeta.meta_value as tmh_posthits";
  return $fields;
}
#add_filter('posts_fields', 'tmh_posts_fields');

/*********
* Returns the modified JOIN statement for accessing a single meta field
* in the get posts query
*/
function tmh_posts_join($join) {
  if (is_admin()) {
    return $join;
  }

  global $wpdb;
  # note the outer join and inclusion of the meta key HERE not in WHERE.
  # this us to allow posts without the matching meta key to show up
  $join .= " LEFT OUTER JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '_tmh_pagehits'";
  return $join;
}
#add_filter('posts_join', 'tmh_posts_join');

/*********
* Returns the appropiate ORDER BY statement for query posts based on the query
* vars.
*/
function tmh_posts_orderby($orderby) {
  global $wp_query;
  global $wpdb;

  if (is_admin()) {
    return $orderby;
  }

  $sortby = @$wp_query->query_vars['tmh_sort_by'];
  if ( ! $sortdir = @$wp_query->query_vars['tmh_sort_dir']) {
    $sortdir = 'DESC';
  } else {
    $sortdir = strtoupper($sortdir) == 'DESC' ? 'DESC' : 'ASC';
  }
  switch ($sortby) {
    case 'views':
      $by_date = $wpdb->posts.'.post_date '.$sortdir;
      return $by_view.', '.$by_date;
    case 'comments':
      # by comment count and then by date
      $by_comment = $wpdb->posts.'.comment_count '.$sortdir;
      $by_date = $wpdb->posts.'.post_date '.$sortdir;
      return $by_comment.', '.$by_date;
    case 'date':
    default:
      return $wpdb->posts.'.post_date '.$sortdir;
  }
}
add_filter('posts_orderby', 'tmh_posts_orderby');

/*********
* Returns the current URL replacing as and by with the arguments given. If
* by or as are empty the argument is removed. If by or as are TRUE then the
* existing value is retained.
* Code is an almost complete replica of get_pagenum_link in link-template
*/
function tmh_by_as_url($by='', $as='') {
  global $wp_rewrite;

  $request = htmlspecialchars(remove_query_arg(array('tmh_sort_dir','tmh_sort_by', 'tmh_view_as')));

  $home_root = parse_url(get_option('home'));
  $home_root = ( isset($home_root['path']) ) ? $home_root['path'] : '';
  $home_root = preg_quote( trailingslashit( $home_root ), '|' );

  $request = preg_replace('|^'. $home_root . '|', '', $request);
  $request = preg_replace('|^/+|', '', $request);

  if ( !$wp_rewrite->using_permalinks() || is_admin() ) {
    $base = trailingslashit( get_bloginfo( 'home' ) );

    if ( strlen($by) > 0 ) {
      $result = add_query_arg( 'tmh_sort_dir', $by, $base . $request );
    } else {
      $result = $base . $request;
    }

    if ( strlen($as) > 0 ) {
      $result = add_query_arg( 'tmh_view_as', $as, $result );
    }
  } else {
    $qs_regex = '|\?.*?$|';
    preg_match( $qs_regex, $request, $qs_match );

    if ( !empty( $qs_match[0] ) ) {
      $query_string = $qs_match[0];
      $request = preg_replace( $qs_regex, '', $request );
    } else {
      $query_string = '';
    }
    if ($by !== TRUE) {
      $request = preg_replace( '|by/\w+/?|', '', $request);
    }
    if ($as !== TRUE) {
      $request = preg_replace( '|as/\w+/?|', '', $request);
    }

    # extract the page number, if set
    preg_match( '|page/\d+/?$|', $request, $pager);
    $pager = @$pager[0];
    $request = preg_replace( '|page/\d+/?$|', '', $request);

    $request = preg_replace( '|^index\.php|', '', $request);
    $request = ltrim($request, '/');

    $base = trailingslashit( get_bloginfo( 'url' ) );

    if ( $wp_rewrite->using_index_permalinks() && ( strlen($by) > 0 || strlen($as) > 0 || '' != $request ) )
      $base .= 'index.php/';

    if ( strlen($by) > 0 AND $by !== TRUE) {
      $request = ( ( !empty( $request ) ) ? trailingslashit( $request ) : $request ) . user_trailingslashit( 'by/' . $by, 'tmh_sort_by' );
      $result = $base . $request . $pager . $query_string;
    }
    if ( strlen($as) > 0 AND $as !== TRUE) {
      $request = ( ( !empty( $request ) ) ? trailingslashit( $request ) : $request ) . user_trailingslashit( 'as/' . $as, 'tmh_view_as' );
      $result = $base . $request . $pager . $query_string;
    }
  }
  return $result;
}

/*********
* Remove /as urls from the paging links
*/
function tmh_get_pagenum_link($url) {
  $url = preg_replace( '|as/\w+/?|', '', $url);
  return $url;
}
add_filter('get_pagenum_link', 'tmh_get_pagenum_link');

/*********
* Echos string_to_echo if the query variable query_key has the value_to_check.
* Set default to true if this call should return the classes string when the
* query var is not set or is empty.
*/
function tmh_has_query_var($query_key, $value_to_check, $string_to_echo, $default=FALSE) {
  global $wp_query;

  $mappings = tmh_article_to_demo_mappings();

  if (isset($wp_query->query_vars[$query_key]) AND ($wp_query->query_vars[$query_key] == $value_to_check)) {
    echo stripslashes(wp_filter_kses($string_to_echo));
  } elseif (isset($wp_query->query_vars[$query_key]) AND ($wp_query->query_vars[$query_key] == array_search($value_to_check, $mappings))) {
    echo stripslashes(wp_filter_kses($string_to_echo));
  } elseif ( $default AND ( ! isset($wp_query->query_vars[$query_key]) OR empty($wp_query->query_vars[$query_key]))) {
    echo stripslashes(wp_filter_kses($string_to_echo));
  }
}

/*********
* Hook to setup the view as cookie and set the parameter if required.
*/
function tmh_parse_query($wp) {
  $query_vars = &$wp->query_vars;

  if (isset($query_vars['tmh_view_as'])) {
    $view_as = $query_vars['tmh_view_as'];
  } elseif (isset($_COOKIE['tmh_view_as_'.COOKIEHASH])) {
    $view_as = $_COOKIE['tmh_view_as_'.COOKIEHASH];
  } else {
    $view_as = 'brief';
  }

  # sanitize
  $view_as = stripslashes($view_as);
  $view_as = esc_attr($view_as);
  $view_as = strtolower($view_as);

  # demo views. We convert these to article view templates. Don't forget to
  # change this in
  $key = array_search($view_as, tmh_article_to_demo_mappings());
  $view_as = ($key === FALSE) ? $view_as : $key;

  $query_vars['tmh_view_as'] = $view_as;
}
add_action('parse_query', 'tmh_parse_query');

/*********
* Article => Demo Mappings
*/
function tmh_article_to_demo_mappings() {
  return array(
    'brief'     => 'thumbnail',
    'title'     => 'list',
    'complete'  => 'complete',
  );
}

/*********
* Get the categories for all posts that are themselves in a particular given category
*/
$tmh_categories_of_posts_in_category_categories;
function tmh_categories_of_posts_in_category($cat_id, $exclude_cats=array(), $show_count=TRUE) {
  // rather than do a complex multi nested select in the DB, we'll do a multistage process
  // first get the posts which are a member of cat_id (and it's child categories)
  $wp_query = new WP_Query();
  add_filter('posts_fields', 'tmh_categories_of_posts_in_category_fields');
  $post_ids = $wp_query->query('cat='.$cat_id.'&posts_per_page=-1');
  remove_filter('posts_fields', 'tmh_categories_of_posts_in_category_fields');
  array_walk($post_ids, 'tmh_flatten_array');

  # next, get the categories of the posts we just retrieved
  $categories = wp_get_object_terms(
    $post_ids, 'category', array(
      'fields' => 'ids'
  ));
  $counts = array_count_values($categories);
  unset($counts[$cat_id]);

  // remove any excluded categories
  $counts = array_diff_key($counts, array_flip($exclude_cats));

  // for the moment passing extra arguments to filters isn't something we can do
  // so a global needs to be used.
  global $tmh_categories_of_posts_in_category_categories;
  $tmh_categories_of_posts_in_category_categories = array_keys($counts);

  add_filter('list_terms_exclusions', 'tmh_list_terms_exclusions');
  $categories = wp_list_categories("show_count=$show_count&hierarchical=0&title_li&echo=0");
  remove_filter('list_terms_exclusions', 'tmh_list_terms_exclusions');

  // update counts
  if ($show_count) {
    foreach ($counts as $id => $count) {
      $categories = preg_replace("/(cat-item-$id.+<\/a>\s+)\((\d+)\)/i", '${1}('.$count.')', $categories);
    }
  }
  unset($wp_query);
  echo $categories;
}
function tmh_categories_of_posts_in_category_fields($fields) {
  global $wpdb;
  return "$wpdb->posts.ID";
}
function tmh_flatten_array(&$item, $key) {
  $item = current($item);
}
function tmh_list_terms_exclusions($exclusions) {
  global $tmh_categories_of_posts_in_category_categories;
  $exclusions = 'AND tt.term_id IN (' . implode(',', $tmh_categories_of_posts_in_category_categories) . ')';
  unset($tmh_categories_of_posts_in_category_categories);
  return $exclusions;
}

/*********
* Render debug information nicely
*/
function pr($obj) {
  echo '
';
  print_r($obj);
  echo '
';
}

/*********
* Hook which renders any SQL query to the screen when it happens.
* Uncomment the pr to have these displayed
*/
function tmh_display_query_sql($query) {
  global $wp_query;
  // pr(array_filter($wp_query->query_vars));
  // pr($query);
  return $query;
}
add_filter('posts_request', 'tmh_display_query_sql'); // use query for all db activity

/*********
* To use when a loop is needed in a page. Use $args to call query_posts and then
* use the template indicated to render the posts. The template gets included once
* per post.
*
* Orginally by Lyza Gardner; see http://www.cloudfour.com/533/wordpress-taking-the-hack-out-of-multiple-custom-loops/
*
* @param Array $args               Wordpress-style arguments; passed on to query_posts
*                                  'template' => name of post template to use for posts
* @return Array of WP $post objs   Matching posts, if you should need them.
*/
function fc_custom_loop($args) {
    global $wp_query;
    global $post;
    $post_template_dir = 'views';
    /* The 'template' element should be the name of the PHP template file
       to use for rendering the matching posts. It should be the name of file,
       without path and without '.php' extension. e.g. the default value 'default'
       is $post_template_dir/default.php
    */
    $defaults = Array('template' => 'article-brief' );

    $opts = wp_parse_args($args, $defaults);

    // Bring arguments into local scope, vars prefixed with $loop_
    extract($opts, EXTR_PREFIX_ALL, 'loop');

    // Preserve the current query object and the current global post before messing around.
    $temp_query = clone $wp_query;
    $temp_post  = clone $post;

    // Wildcard substitution
    if (isset($wp_query->query_vars['tmh_view_as'])) {
      $view_as = $wp_query->query_vars['tmh_view_as'];
    } else {
      $view_as = 'brief';
    }

    $tpl = explode('-', $loop_template);

    // Article => Demo mappings. For demo templates we have to convert this across
    $mappings = tmh_article_to_demo_mappings();

    switch ($tpl[0]) {
      case 'demo':
        $view_as = $mappings[$view_as];
        break;
    }

    $loop_template = str_replace(
      array('%view%'),
      array($view_as),
      $loop_template
    );

    $template_path = sprintf('%s/%s/%s.php', dirname(__FILE__), $post_template_dir, $loop_template);

    if(!file_exists($template_path)) {
        printf ('
Sorry, the template you are trying to use ("%s")
            in %s() does not exist (%s).',
            $template,
            __FUNCTION__,
            __FILE__);
        return false;
    }
    /* Allow for display of posts in order passed in post__in array
       [as the 'orderby' arg doesn't seem to work consistently without giving it some help]
       If 'post__in' is in args and 'orderby' is set to 'none', just grab those posts,
       in the order provided in the 'post__in' array.
    */
    if($loop_orderby && $loop_orderby == 'none' && $loop_post__in)
    {
        foreach($loop_post__in as $post_id)
            $loop_posts[] = get_post($post_id);
    }
    else
        $loop_posts = query_posts($args);

    /* Utility vars for the loop; in scope in included template */
    $loop_count             = 0;
    $loop_odd               = false;
    $loop_even              = false;
    $loop_first             = true;
    $loop_last              = false;
    $loop_css_class         = '';   // For convenience
    $loop_size = sizeof($loop_posts);
    $loop_owner = $temp_post;       /* The context from within this loop is called
                                       the global $post before we query */

    foreach($loop_posts as $post)
    {
        $loop_count += 1;
        ($loop_count % 2 == 0) ? $loop_even = true : $loop_even = false;
        ($loop_count % 2 == 1) ? $loop_odd  = true : $loop_odd  = false;
        ($loop_count == 1) ?     $loop_first = true : $loop_first = false;
        ($loop_count == $loop_size) ? $loop_last = true : $loop_last = false;
        ($loop_even) ? $loop_css_class = 'even' : $loop_class = 'odd';
        setup_postdata($post);
        include($template_path);
    }
    $wp_query = clone $temp_query;  // Put the displaced query and post back into global scope
    $post = clone $temp_post;       // And set up the post for use.
    setup_postdata($post);
    return $loop_posts;
}

/*********
* Returns the number of posts contained within a category, including sub-categories.
* Posts are only counted once even if they are posted to multiple sub-categories.
*/
function tmh_unique_posts_in_category($cat_id) {
  $wp_query = new WP_Query();
  $posts = $wp_query->query('cat='.$cat_id.'&posts_per_page=-1');
  $posts = $wp_query->post_count;
  unset($wp_query);
  return $posts;
}

/*********
* Returns author listing HTML
* Only authors who have active posts and a bio are included
*/
function dw_list_authors() {
  global $wpdb;

  $users = get_users(array());

  // Do a custom query to get post counts for everyone
  // This will save hundreds of queries over "WordPress-style" code
  $postsByUsersQuery = 'SELECT post_author, COUNT(*) as count, meta_value AS description FROM '.$wpdb->posts.' p, '.$wpdb->usermeta.' um WHERE post_status="publish" AND um.meta_key = "description" AND um.user_id = p.post_author AND meta_value != "" AND post_type = "post" GROUP BY post_author';
  $postsByUsersResult = $wpdb->get_results($postsByUsersQuery, ARRAY_A);
  $postsByUsersIndex = array();
  foreach($postsByUsersResult as $result) {
    $postsByUsersIndex[$result['post_author']] = array('count'=>$result['count'], 'description'=>$result['description']);
  }

  // Sort by number of posts
  foreach($users as $user) {
    $count = $postsByUsersIndex[$user->ID]['count'];
    if($count == '') { $count = 0; }
    $user->total_posts = $count;
    $user->description = $postsByUsersIndex[$user->ID]['description'];
  }
  usort($users, 'sort_objects_by_total_posts');
  $users = array_reverse($users);

  // Prep column output
  $column1 = $column2 = array();
  $which = true;

  // Generate output for authors
  foreach($users as $index=>$user) {
    if($user->total_posts > 1 && $user->description) {
      $item = '
user_login.'">';
      $item.= '
ID).'">';
      if (function_exists('get_avatar')) {
        $item.= get_avatar($user->user_email, 48);
      }
      $item.= ''.$user->display_name.' '.$user->total_posts.' post'.($user->total_posts > 1 ? 's' : '').'
';
      $item.= '
'.$user->description.'
';
      $item.= dw_get_author_meta($user->ID);
      $item.= '
';

      if($which) {
        array_push($column1, $item);
      }
      else {
        array_push($column2, $item);
      }
      $which = !$which;
    }
  }

  $return = '
'.implode('', $column1).'
';
  $return.= '
'.implode('', $column2).'
';

  return $return;
}

/*********
* Sorts WordPress users by Object key (total posts)
*/
function sort_objects_by_total_posts($a, $b) {
  if($a->total_posts == $b->total_posts){ return 0 ; }
  return ($a->total_posts < $b->total_posts) ? -1 : 1;
}

/*********
* Adds "Twitter" and "Facebook" fields to the user profile form
*/
function additional_contactmethods($user_contactmethods) {
  $user_contactmethods['twitter'] = 'Twitter Username';
  $user_contactmethods['facebook'] = 'Facebook URL';
  $user_contactmethods['gplus'] = 'Google+ URL';
  return $user_contactmethods;
}
add_filter('user_contactmethods', 'additional_contactmethods');

/*********
* Shows Facebook, Twitter, and Website links for authors
*/
function dw_get_author_meta($authorID = null) {
  $twitterHandle = get_the_author_meta('twitter', $authorID);
  $facebookURL = get_the_author_meta('facebook', $authorID);
  $website = get_the_author_meta('url', $authorID);
  $gplusURL = get_the_author_meta('gplus', $authorID);
  $return = '';

  if($website || $facebookURL || $twitterHandle || $gplusURL):
    $return.= '
';
    if($website):
      $return.= '
'. str_replace('http://', '', $website). '
';
    endif;
    if($twitterHandle):
      $return.= '
@'. $twitterHandle. '
';
    endif;
    if($facebookURL):
      $return.= '
Facebook
';
    endif;
    if($gplusURL):
      $return.= '
Google+
';
    endif;
    $return.= '
';
  endif;

  return $return;
}

/*
* Try to clean up email addresses a bit.
*/
function hacks_author($name) {
  return preg_replace('/@.+/', '', $name);
}

/*********
* Returns author list, but not HTML which is gross.
* Only authors who have active posts and a bio are included
*/
function hacks_list_authors() {
  global $wpdb;

  $users = get_users(array());

  // Do a custom query to get post counts for everyone
  // This will save hundreds of queries over "WordPress-style" code
  $postsByUsersQuery = 'SELECT post_author, COUNT(*) as count, meta_value AS description FROM '.$wpdb->posts.' p, '.$wpdb->usermeta.' um WHERE post_status="publish" AND um.meta_key = "description" AND um.user_id = p.post_author AND meta_value != "" AND post_type = "post" GROUP BY post_author';
  $postsByUsersResult = $wpdb->get_results($postsByUsersQuery, ARRAY_A);
  $postsByUsersIndex = array();
  foreach($postsByUsersResult as $result) {
    $postsByUsersIndex[$result['post_author']] = array('count'=>$result['count'], 'description'=>$result['description']);
  }

  // Sort by number of posts
  foreach($users as $user) {
    $count = $postsByUsersIndex[$user->ID]['count'];
    if($count == '') { $count = 0; }
    $user->total_posts = $count;
    $user->description = $postsByUsersIndex[$user->ID]['description'];
  }
  usort($users, 'sort_objects_by_total_posts');
  $users = array_reverse($users);

  // Prep column output
  $return = array();

  // Generate output for authors
  foreach($users as $index=>$user) {
    if($user->total_posts > 1 && $user->description) {
      array_push($return, $user);
    }
  }

  return $return;
}

function hacks_category_link($category) {
  echo 'term_id ) . '" rel="category tag" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>'  . $category->name.'';
}

/*********
* Display the_category(), excluding Featured
*/
function hacks_category_list() {
  $idx = 0;
  $categories = get_the_category();
  $num = count($categories);
  foreach($categories as $category) :
    $idx++;
    hacks_category_link($category);
    if ($idx < $num) :
      if ($num > 2):
        echo ', ';
      endif;
      if ($num == 2 || ($num > 2 && $num - $idx == 1)):
        echo ' and ';
      endif;
    endif;
  endforeach;
}

?>

redpajama_set_name: RedPajamaGithub


I think the link to Milk's (user: keiichiism) trade post is wrong because it leads to http://sketdan.dreamwidth.org/1229.htmlth.org/979.html when I think it should be http://sketdan.dreamwidth.org/1229.html ?
Thanks for the correction. They did tell me to fix it after updating their cards, but I totally forgot to do that since I've been a bit busy today.


There is currently one home available in Dunluce Estates with a price of $525,000. For availability or more information about homes for sale in Dunluce Estates call Carlos Colon at 770-314-1285 .
Dunluce Estates is located in Atlanta GA, Fulton County. There are currently 1 homes active and for sale inside the neighborhood with the average price being $525,000. The number of homes for sale in Dunluce Estates is always changing so if you see a home you like and you would like to schedule a time to take a look please give me a call at 770-314-1285.


Eliminates flexible joints found in standard intake hoses with multi layer polyester silicon hose or FRP.
Not only is flow area maximised, intake air flow is less turbulent.
In addition, deformation of the pipe is reduced, resulting in improved accelerator response.
Improve engine response by replacing standard rubber hose with aluminium, eliminating pipe deformation, maintaining intake charge pressure.
Silicone hose set for replacement/maintenance of items in Blitz Suction Kits.
Reduces internal resistance of standard rubber suction pipe, improving suction air flow efficiency, improving engine response.
Bolt on installation, replacing standard item.
Aluminium pipe, and silicone hose bands ensures durability and reliability.
Aluminium piping from turbo to intercooler, intercooler to surge tank (intake manifold).
Provides stable and increased turbo response by eliminating heat and pressure variations to intake air.
Brackets used to mount R32 or R33 Nissan Skyline GT-R intercooler core (Not included).
Piping for use with front mounted R32 or R33 Nissan Skyline GT-R intercooler core (not included).
Greater intake efficiency combined with the high tensile strength and weight benefits of carbon fibre.
The pipes have been redesigned to decrease the number of bends and to increase bend radius to minimize pressure loss and flow resistance.
Power, torque, and response improvement throughout the rev range.
In order to improve the suction efficiency, shape and material of the normal suction pipe is replaced by hard piping.
Suitable for use with standard air cleaner box.
Recommend for use with Monster Sport Power Filter series.
Offers quicker response to power demand by better balance of the turbine output characteristics which is achieved by smoothing the airflow from the turbocharger for reduced pressure loss.
Made from heat-resistant carbon fiber for ideal heat resistance; the material proven as brake shrouds for the Super GT GT500 Class competition cars.
Blue, red, yellow, purple, green, black or orange.
Eliminates the resonance silencer found on the stock intake pipe of the B16A.
Consequently, the intake flow is improved and the intake velocity increased, providing improved power and throttle response.
For use with TOMEI Turbo Suction Hose Kits without Elbow Adapter.
Stock rubber hose is not suitable for high temperatures and boost pressures that the engine is capable of when pushed for performance.
The piping will deform and hinder the air flow to the engines intake.
The TOMEI Titanium intake pipe eliminates the deformation problem, while preventing loss of boost pressure.
Along with the increased performance gains, being made from titanium, the pipe is also lighter than the stock item.
Increases the performance by eliminating the intake air resistance of the standard hose.
Specifically designed to reduce the restriction of the intake airflow to the turbo, which improves response and achieves increased power gains.
The silicone reinforced structural design prevents the deformation of the hose while under high pressure loads.
This also increases durability and reliability whilst optimizing the turbos performance.
Heavy duty silicone suction and turbo hose set.
Heavy duty silicone suction hose.


At Sudbay Chrysler Dodge Jeep Ram, we love staying on the pulse of all the exciting innovations in the automotive world. Have you heard the latest Jeep news? The all-new 2020 Jeep Gladiator is coming soon! The first-ever 2020 Gladiator model is a Jeep truck you can rely on, as it offers stunning design, exceptional 4x4 drivetrain capabilities, an excellent towing capacity and so much more. When is the 2020 Jeep Gladiator release date? This new Jeep model is coming soon, and we can't wait for the 2020 Jeep Gladiator truck to arrive on our lot. Schedule a future Jeep Gladiator test-drive today by contacting our Jeep dealership near Salem, MA.
From the 2020 Jeep Gladiator Overland to the new Jeep Gladiator Rubicon, you'll have an array of choices at your disposal when the new Gladiator pickup is released. For best-in-class towing, look no further than this Jeep truck that touts an amazing towing capacity of up to 7,650 pounds. The new Gladiator truck also boasts a class-leading payload capacity of 1,600 pounds when properly equipped. Tackling tough terrain will never be a problem, either, thanks to standard Dana® 44 front and rear axles and a high- and low-range 4x4 system. Love technology? You can customize your 2020 Jeep Gladiator interior with the latest and greatest infotainment options, such as Apple CarPlay™, Android Auto™ and an industry-exclusive Bluetooth® wireless speaker. And don't forget about the available largest-in-class 8.4-inch Uconnect® 4C NAV touchscreen!
With all these features and capabilities, how can you resist the appeal of this new Jeep pickup? Contact Sudbay Chrysler Dodge Jeep Ram today and preorder the first-ever 2020 Jeep Gladiator truck.


Are you having trouble finding a place for items you don't use much anymore? This is an all-too-familiar problem that torments many. Green Waste Clearance is a local company providing waste removal services to the lovely people of Camden Town. Read on to discover our competitive advantages as well as a comprehensive list of services we offer.
We are at your services 24/7 - so whenever you need rubbish collection in Camden Town NW1 we can be relied on. You can also book use through our website via the online booking form.
What jobs do we cover in Camden Town?
The waste clearance operatives we work with in Camden Town are experienced and proficient enough to handle any sort of challenge you have to throw at them. Whether you need to get rid of a large wardrobe or a collection of heavy items, they are locked, loaded, and ready for action.
House Clearance – sometimes the most drastic measure is the best one when it comes to household waste removal. In those cases, you know who to call. The local team in Camden Town will dispose of your refuse in the blink of an eye.
With 10 years of experience the local rubbish clearance experts working with us have helped homes and businesses across Camden Town to dispose of waste in no time!


text:
You are here: Home / Human Rights / Minister ridiculed over 'global leadership on disability inclusion' claim
Minister ridiculed over 'global leadership on disability inclusion' claim
By John Pring on 1st December 2022 Category: Human Rights
The new minister for disabled people has been ridiculed for claiming the government has a record of providing "global leadership on disability inclusion", six years after it was found guilty of "grave" and "systematic" violations of the UN disability convention.
Tom Pursglove made the comments even though the government is due to send the UN an annual update on its progress in addressing the concerns raised by the UN committee on the rights of persons with disabilities.
The committee had found the government guilty of "grave" and "systematic" violations of the UN Convention on the Rights of Persons with Disabilities (CRPD), when it published its report in November 2016.
Most of the breaches – under articles on independent living, work and employment. and an adequate standard of living and social protection – were caused by policies introduced by ministers at the Department for Work and Pensions (DWP).
It was the first such high-level inquiry to be carried out by the committee and was a result of years of research and lobbying by Disabled People Against Cuts.
The following year, the committee's chair told the UK government that its cuts to social security and other support for disabled people had caused "a human catastrophe", which was "totally neglecting the vulnerable situation" faced by disabled people.
The UK government was told in 2017 to make more than 80 improvements to how its laws and policies affect disabled people's human rights – the highest number of recommendations the committee had ever produced in reviewing a country's progress in implementing CRPD.
The committee also made it clear at the time that the UK was no longer considered a world leader on disability rights.
Pursglove's claims were made during a debate about the international day of disabled people, which will take place on Saturday (3 December).
The debate was secured by disabled Labour MP Marsha de Cordova, who said the last dozen or so years of a "hostile environment and cuts" had led to an "assault on disabled people's civil and human rights, which has had a devastating impact".
Pursglove also revealed that the government had been granted permission to appeal against a high court ruling that its National Disability Strategy was unlawful, after a botched consultation had made it "impossible" for disabled people to "shape" the content of the strategy.
But he still claimed his government was "working towards equality on the global stage, through both the example we set here in the UK and our international co-operation", and he claimed the UK government had "long provided global leadership on disability inclusion".
He said: "We remain fully committed to implementing this convention, through strong legislation, and programmes and policies that tackle the barriers faced by disabled people, in order to realise their full participation and inclusion in society."
He said his government was providing capacity-building grants to disabled people's organisations around the world, and funded the training of more than 1,200 disability activists to "help them advocate for disabled people's human rights and hold governments to account for progress on disability rights".
Although the government has funded disabled people's organisations (DPOs) in other countries to hold their governments to account, it appears to have failed to do so in the UK.
Mark Harrison, a member of the steering group of Reclaiming Our Futures Alliance, said after the debate that Pursglove was "trying to spin their international efforts to cover up their war on disabled people and our organisations at home".
He said: "It seems for this government, human rights and support for DPOs is only good internationally while they treat disabled people and our organisations in the UK with contempt.
"During the pandemic, the government only funded charities for disabled people, while refusing to resource organisations run by disabled people.
"There has been no funding from the Westminster government for engagement in the UN CRPD process or to facilitate engagement.
"They have been put to shame by the Scottish and Welsh governments who are engaging constructively with DPOs."
The government's Disability Unit had failed to respond to Harrison's claim on funding by noon today (Thursday).
Harrison said: "A previous minister for disabled people, Justin Tomlinson, set up and then closed down a DPO forum just when they were developing their so-called disability strategy.
"You can tell no disabled people or DPOs were involved in developing the strategy as it is so pathetic, and the courts were right to decide it was unlawful."
De Cordova told MPs that she had heard from more than 650 disabled people and allies who contacted her after hearing about the debate.
Among the concerns she raised were the shortage of accessible housing, and she said that disabled people were "significantly more likely to live in unsafe accommodation".
She also raised the government's refusal to ensure that all disabled people can safely evacuate from high-rise blocks of flats in emergencies, breaking a promise made by former prime minister Boris Johnson following a report by the Grenfell Tower Inquiry.
She spoke of the significant barriers disabled people face when travelling, such as "floating bus stops, cuts to bus services, inaccessible rail stations or the closure of many ticket offices".
And she told fellow MPs of "stark health inequalities and barriers", with nearly 60 per cent of Covid deaths of disabled people, the "horrific blanket application of 'do not attempt resuscitation' notices during the early part of the pandemic", and the social care charge debt faced by many disabled people.
De Cordova pointed out that disabled people had been disproportionately affected by government cuts over the last decade, while there was "mounting evidence that real-terms reductions in health and social care spending since 2010 may have led to thousands of excess deaths among disabled people".
And she asked when DWP would publish at least 20 secret reviews into the deaths of disabled benefit claimants, following a ruling by the information commissioner that it unlawfully prevented their release to Disability News Service*.
De Cordova also paid tribute to a mentor of hers, Seán McGovern, a "staunch disability rights campaigner and a strong trade union champion for disabled people's rights", who died two years ago, and to another disabled activist, Roger Lewis, who died last week, just days before the debate took place.
She said Lewis had "changed and touched the lives of so many disabled people, so many deaf people, and so many blind and partially-sighted people".
Stephen Timms, the Labour chair of the work and pensions select committee, called on the new work and pensions ministerial team, appointed after Rishi Sunak became prime minister in October, to change the policy of former work and pensions secretary Therese Coffey of "trying to keep things secret".
He said this policy had been "unnecessarily disastrous", "very damaging and counterproductive", and had "badly damaged" DWP's reputation with disabled people.
Marion Fellows, the SNP's spokesperson on disability, spoke of concerns that government plans to abolish the Human Rights Act would "weaken avenues" for disabled people to enforce their rights.
She pointed to one case in which a GP had refused to order a heart scan for a disabled man with high support needs because "he has a learning disability and no quality of life".
His advocate had persuaded the GP to change his mind after highlighting his right to life, under article two of the Human Rights Act, and his right to be free from discrimination, under article 14 of the act.
She said the government's plans would prevent public bodies from taking "proactive steps to protect disabled people from harm, due to discriminatory attitudes or the resources required to protect that person".
*DWP has now appealed this ruling
Picture: Tom Pursglove and Marsha de Cordova
Tags: CRPD disability rights DPAC DWP Marsha de Cordova ROFA Tom Pursglove UNCRPD

redpajama_set_name: RedPajamaCommonCrawl


State Rural Livelihoods Mission (SRLM), Government of Madhya Pradesh has published recruitment notice to fill vacant posts of Assistant District Manager and Accountant. Diploma holder students having B.Com/ M.Com and MBA Degree are eligible to apply for this recruitment. Selected candidates will get monthly salary of Rs. 16,000-23,000/-.
Selected candidates have brilliant opportunity to earn monthly salary of Rs. 16,000-23,000/-.


The romantic Kalvarienberg church in Gosau is certainly one of the most beautiful places of happiness in the Salzkammergut. The idyllic gem, a 30 minute walk from the Gosau Tourist Information office, is located high above the holiday resort with wonderful panoramic views of the entire Gosau Valley and the mighty peaks of the Gosaukamm thrown in for free.
In 1775, the Hallstatt salt merchant Johann Sollinger erected the Kalvarienberg church and the Stations of the Cross with its five chapels, although - or because – back then Gosau was constituted as an almost closed Protestant community: The Innsbruck University Professor Josef August Schultes, who travelled through the Salzkammergut between 1784 and 1808, even speaks of an Austrian Wittenberg. Much water had to flow through the Gosau stream before the peaceful ecumenism. For example up until 1861 the Protestants refused the tolling of bells or building of a tower and the Catholic priest charged 'surplice fees' for christenings or weddings even if they were carried out by his evangelical colleague.
Our tip: The Kalvarienberg church 'Glücksplatz' (place of happiness), is especially charming in late summer when the early morning fog lies over the valley and Gosau slowly awakes. We suggest you experience it for yourself during a holiday in Gosau! Whatever you choose, we wish you a pleasant holiday in the UNESCO World Heritage region of Hallstatt Dachstein Salzkammergut.
Gosau | Panorama route: Family-friendly hike along the Gosau valley. A special experience.
Gosau | An easy stroll from the village centre through the church quarter. This stroll is also suitable for families with pushchairs.
Hoher Sarstein - The peak of emotions!


Location, location, location. The villa is set directly in front of a magnificent, rugged mountain in the small town of Dalyan just a 20 minute drive from Dalaman. You are surrounded by pomegranate trees, amazing.
Four-bedroomed Villa Krystal is an ideal getaway for families, with a large pool and extensive gardens, set against the backdrop of a rugged mountain in Dalyan on the south-west coast of Turkey. From the outside, it looks like a traditional Mediterranean villa with terracotta tile roofs and whitewashed walls, yet within, it's filled with bright contemporary artwork and modern facilities.
Once listed as one of the sexiest villas, perhaps the main stand out feature of this luxury villa is its extensive grounds – 5,300 square metres in fact – elegantly surrounding the circular-shaped swimming pool and dotted with beautiful potted plants, trees and greenery. There are plenty of soft grassy spots for children to play and several cushioned chairs and loungers for picking your prime spot in the sun or relaxing in the cooling shade.
Inside, light abounds: from the large glass windows and doors to the natural-coloured furnishings, unique art pieces and statement features. There's air conditioning throughout, and the villa has been carefully and cleverly designed to catch the natural breeze to cool the house naturally. Simply open the windows at both ends of the villa, and you'll be amazed at how quickly it cools down.
All four bedrooms are equally seductive, stylish and serene with en-suite bathrooms and thoughtful home-from-home touches like mirrors and dressers. Off the master bedroom on the mezzanine floor is a balcony with a wooden table and chairs for enjoying the serene vistas. There's also an open plan lounge and fully-equipped kitchen on the ground floor, alongside a separate toilet. Relax after a day exploring on the inviting sofas or turn on the TV and DVD player for entertainment evenings in.
Outside, there's a shaded sun terrace with a seating area for dining al fresco, alongside an outside kitchen, shower room and toilet for your utmost convenience. If you'd like to explore the local area, Villa Krystal is about 3.4km from the centre of Dalyan (a short 10-minute drive). The ancient ruins of Caunos, and the river that takes you to the sandy Iztuzu beach. Dalyan's many restaurants serving local delicacies as well as international cuisine.
- Car hire of a 4 seater saloon, with local car hire company.
Location, location, location. The villa is set directly in front of a magnificent, rugged mountain in the small town of Dalyan.
The extensive green grounds and outdoor facilities that surround the villa including a large private swimming pool, sun terrace and al fresco dining area.
The contemporary artwork, thoughtful touches and light, natural-coloured furnishings.
The famous Iztuzu beach is a short car journey away, as is the centre of Dalyan where you can get a water taxi to the mud baths, Koycegiz Lake, across to the Caunos Carian ruins or along to the Iztuzu beach. Dalayn boasts a Saturday market, that you simply have to visit. Sample one of the local Gozleme pancakes and buy some uber fresh local produce.
Situated just a short 35 minute drive from Dalaman Airport the villa is in a perfect situation to visit lots of Turkey's gems, with Ephesus & Pamukkale both within day trip distance for the keen driver. Closer days out could be the yachty Gocek or one of Akyaka's fish restaurants. For a cooler half day trip it's only a short drive to Yurvarlak Cay for a trout meal beside the rushing waters of the fast flowing stream isn't to be missed.
Situated just a 35 minute drive from Dalaman Airport, this is perfect for young families who want to limited the road distance after the flight. Villa Krystal is in extensive grounds and boasts a private pool that children will find the essence of fun. There are soft grassy spots and plenty of shaded areas – perfect for safe playing.
From the villa, it's a short 10-minute drive to the centre of Dalyan. There you'll find family-friendly restaurants serving both local and international cuisine. There is also a Saturday market, selling everything from fresh fruit and exotic spices to carpets, jewellery and shoes. Situated in the centre is a playground where the children can mix with the local kids whilst you sip tea in the traditional tea garden.
For day trips, you can head to the ancient city of Kaunos, with Lycian rock tombs and the remains of a theatre. The mud baths are always a winner with all ages and make for some great holiday snaps too. To the south of Dalyan is Iztuzu Beach, a sandy beach with crystal-clear and calm waters that are ideal for swimming. It's also famous for its Loggerhead Sea Turtles – see if you can spot one. If not head to Kaptan June's Sea Turtle Foundation at the end of the beach and see the ones have been rescued.
Young and older children will enjoy a boat ride down the river spotting rock tombs and wildlife. You can take a sea boat to the pristine nearby bays that line the coast. There There's Asi Bay with caverns and caves for exploring, or you could take a 12 Islands of Gocek tour and visit the rocky islets, ancient ruins and enjoy prime snorkelling and swimming spots.
Security deposit There is no security deposit to pay at this property. Guests should be aware they will be liable for any loses or damage druring their stay.
All British (and most other nationalities) citizens over the age of 16 require a full 10 year passport with at least 6 months validity to enter Turkey. You must obtain a visa prior to departure via the following Turkish Government Website. Please refer to the Electronic Visa Application System or the Turkish Consulate if you do not hold a British passport.
Linen & towels included? Linen, towels and pool (not beach) towels are included in rental price. A mid week linen change & light clean is included.
End of stay cleaning included? The end of stay clean is included in the price. Guests are requested to leave the property broom clean and to dispose of any excess rubbish.
Smoking Allowed? Smoking is not allowed inside the property.
Internet access? Complimentary WiFi is available at the property.
Other Ts and Cs Due to local regulations all guests staying in the property are requested to send their Passport details (Nationality, name, DOB, gender, passport number) together with address of residency and arrival and departure date, prior to departure. This is for local registration at the villa.
Energy costs included? All energy costs are included in the rental price.
Other 2 The property has privacy screen around the outside wall to provide total privacy. If guests would prefer to have these removed please indicate prior to arrival.
We stayed here in September. The villa certainly has the Wow factor.
Where do I start? We were met by Tugrul the gardener, who also delivered bread in the mornings, called taxis for us & brought us fresh pomegranates, as well as keeping the gardens and pool running!
The house is stunning, and the rock that sits behind is a real feature.
If you cook you'll be hard pushed to dind anything the kitchens (one inside and one out) don't have. The owner had thought of everything, even little lights that come on when you move in the night.
The villa was amazing and relaxed, we definitely felt like we'd had a holiday.
We had the most amazing time in your gorgeous house and our children still talk about it as their most memorable holiday. The caretaker, Tagrul was great and we still remember all he taught us about making a good barbecue.We are artist and designer couple who both trained at Royal College of Art so we totally loved it.
We had a wonderful time and loved our time in Villa Krystal.It's amazing and a true holiday destination. We also loved Dalyan and everything it had to offer.
We were absolutely delighted when we arrived late on a Saturday night.The next morning we were bowled over by the beautiful artwork and fine attention to detail that was apparent in ever room we explored. Just wanted you to know what a really special and unforgettable week we had in a very special place.


text:
WoW! Presents - Royal Manchester Children's Hospital Charity: Freya's story
Joe Burnett
This moving and powerful story shows the resilience and courage of one young fundraiser after she was caught up in a terrible, life-changing event. It's a wonderful example of how a personal narrative, told with honesty and emotion, can capture the hearts and minds of donors. Freya Lewis' bravery and gratitude towards the Royal Manchester Children's Hospital touched all who read about it. But there's no denying Freya should also be admired and celebrated for how she grasped an opportunity to give back to those who had cared for her — by raising a record sum for the hospital's charity.
Royal Manchester Children's Hospital (RMCH) opened in June 2009. Over 270,000 patients, from across the North-West and beyond, are treated here each year.
RMCH have a national reputation for providing the best care in a variety of specialised treatments including bone marrow transplantation, burns treatment and critical care.
But the background to this story goes much deeper than that. On the 22nd of May 2017, 14-year-old Freya Lewis went with her best friend Nell Jones to the MEN Arena in Manchester to attend a concert by her beloved Ariana Grande. That night a terrible terrorist attack claimed 22 lives, including Nell's. Freya was left with horrific injuries of the sort one would normally see on a battlefield.
As Freya puts it:
'I was admitted to Royal Manchester Children's Hospital in the early hours of the 23 May, where I remained for over five weeks, three of which were on the Paediatric Critical Care Unit. Later in 2017, I was diagnosed as having scoliosis, which for those of you who don't know is curvature of the spine. [...] It became progressively worse over the course of 2018 and I had no choice but to undergo major spinal surgery. Luckily, the corrective procedure, which involves attaching two titanium rods down the length of the spine, is something that they specialise in at RMCH, and I underwent the surgery, and spent another eight days in the hospital. I remain a regular visitor to RMCH as an outpatient. I have now been in surgery on a total of 15 occasions and for a total of over 80 hours.
I am only alive and here today because of the incredible care that I received at Royal Manchester Children's Hospital. They represent our wonderful National Health Service at its very very best. The care I received, and continue to receive, is quite simply world class. I don't have words to express how grateful I am to all of the amazing staff who have cared for me and are helping me to get back as close as possible to how I used to be.'
Freya was determined to turn a tragic and awful event into something positive and honour the memory of her best friend. So, having been inspired by the amazing care she'd received, Freya joined together with her family to raise as much money as they could for the hospital.
Creator / originator
Freya and Nick Lewis.
After Freya was admitted to hospital her dad was getting overwhelmed trying to keep everyone informed as to how she was progressing. He came up with the idea of writing a blog, which was posted via a link on Freya's school website. The blog ran until Christmas 2017 and was incredibly popular, with several thousand followers by the time it ended. It was decided at the start that it would not be possible to post comments on the blog, but there was an opportunity for people to follow a link to a JustGiving page, where they could donate money to the RMCH charity and leave a message with their donation. The response was overwhelming and they raised £24,000.
Freya's dad Nick was contacted by the RMCH charity in early 2018 to ask if he and Freya would be interested in appearing in a video to promote their fundraising campaign for the Great Manchester Run. Before long he'd agreed to run the 10 km, with Freya signing up - despite not being able to walk at this point - to run the junior 2.5 km.
They set up a Justgiving page in February 2018 and again the response was staggering, as they eventually raised over £36,000 for their efforts — the most money anyone has ever raised for the RMCH charity on the Great Manchester Run. They decided the funds should be spent on projects in the Paediatric Critical Care Unit.
Nick Lewis's blog initially raised £24,000. Their sponsored runs raised a combined £36,000.
Freya has since received a Fundraising Hero Award at the NHS Heroes Awards, the Amplifon Young Hero and Overall Hero Awards for Brave Britons and spoken at Westminster Abbey as part of the National Health Service's 70th anniversary celebrations.
She was also made an ambassador for the High Sheriff of Manchester. Plus she got to meet some of her heroes, from Ariana Grande to One Direction's Louis Tomlinson and Harry Styles, along the way!
In 2019, Freya and Nick decided to do the Great Manchester Run again in support of RMCH Charity. This time however, she was too old for the 2.5 km, so had to sign up to the 10 km. It also became a full family event, with Freya's mum, dad, sister, auntie together with a number of my friends taking part. They were also part of Team 10, celebrating RMCH's tenth birthday. It is slightly surprising, even shocking, to learn that, even with this great effort, they only raised just over £1,000 this time around. As Freya concludes,
'you have to grasp the opportunity to raise money while a story or event is still fresh and relevant in the minds of the public, and it really is amazing (but possibly a good thing) how quickly people forget and move on.'
There was another charity close to the Lewis' hearts for whom they raised money. Directly over the road from Royal Manchester Children's Hospital is Ronald MacDonald House. Ronald McDonald House Charities UK provides free 'home away from home' accommodation and support for families with children in hospital. There are currently 15 Ronald McDonald Houses across the UK, all just moments away from their respective children's wards. Freya's family stayed at 'The House', as it's known, for the entire period she was in hospital after the Arena Attack and more recently following her spinal surgery.
I think it's appropriate to leave the last words to Freya herself:
'Over two years on from the attack, I'm not afraid to say that I'm still not okay. I still haven't completely come to terms with the way I look and I haven't, and never will, get used to the fact that Nell isn't with me anymore. There isn't a day that goes by where I don't miss her immensely and don't think about how different life would be if she was still by my side supporting me. I will, however, take her ridiculous sense of humour and resilience with me everywhere I go in life, and I'll keep continuing to learn to accept what has happened to me, and to not let it define me, but instead shape the way I live.'
The Royal Manchester Children's Hospital was opened in 2009.
In addition to treating patients, the hospital performs vital research.
Freya's father Nick set up a blog to raise money for the RMCH charity after they treated Freya for injuries received in the Manchester Arena bombing.
The wards at RMCH are state-of-the-art.
In order to capitalise on the success of the blog, Freya and Nick decided to participate in the Great Manchester Run.
For her dedication to fundraising, Freya received numerous awards.
All the money raised was done in memory of Freya's best friend Nell, who tragically passed away in the Manchester Arena attack.
The Children's Hospital Trust careometer viral campaign.
The Children's Hospital Trust operating theatre complex campaign
Children's Hospital Foundation, Washington DC, USA: send a valentine to a child in the hospital
The Wishing Well Appeal for Great Ormond Street Children's Hospital
World-changers at Work
WoW! Project
World-changers


This combines the virtues of Adaptive Cruise Control and Lane Keeping Assist to make life even easier on motorways, while achieving level 2 semiautonomous driving. Using information picked up from a digital camera mounted behind the rear-view mirror and a radar system in the front grille, HAS automatically keeps the vehicle centred in its lane, at a pre-selected speed and at a chosen distance from the vehicle ahead. It will even decelerate the Ghibli through to a standstill as the traffic dictates. To ensure safety, HAS requires the driver to keep his or her hands on the steering wheel at all times.
For those seeking the ultimate acoustics in their Maserati Ghibli, the answer is the optional Bowers & Wilkins Surround Sound system – the last word in sound perfection. Fifteen speakers, with mid-range drivers and rear woofers made from Kevlar®, have been strategically built into the car's architecture, while a 1,280-watt amplifier ensures immersive sound for all on board. Advanced aluminium tweeters capture the faintest audio subtleties, while a rock-solid bass is delivered by Rohacell® - a stiff, highly resilient material often used in the construction of rockets and aircraft. The Bowers & Wilkins system is compatible with most disc formats and features a built-in USB connector for a smartphone, iPod or MP3 player. Alternatively, tracks can be streamed directly either via Bluetooth®, Apple CarPlay® or Android Auto®.


New Jersey Gov. Phil Murphy plans to sign legislation allowing terminally ill patients to seek life-ending medication. The New Jersey Senate approved the "Medical Aid in Dying for the Terminally Ill Act" in a 21-16 vote Monday.
Curtis, The two month waiting period is designed to protect the insurance companies form insuring someone who is seriously ill. When insurance companies don't require a medical exam or ask any health questions, this is the only way they have to protect themselves from taking on too much risk.
2015 SB 202, a doctor-prescribed suicide bill titled the "Montana Death with Dignity Act," was introduced on January 21, 2015. Text of bill List of actions on the bill The bill was tabled by a committee on February 17, 2015.
New Jersey's Medical Aid in Dying for the Terminally Ill Act (S1072/A1504) which would authorize medical aid in dying for terminally ill adults with less than six months to live and found by two doctors to be mentally capable to make this medical decision.
My father in law chose to end his life this way. He was 70 years old and was diagnosed with stage 4 lung cancer. In the span of 3 months, he went from walking on his own just fine to being confined to a bed and in constant pain.


Mixed berry pie filling…so this winter we should be enjoying and sharing some pies!
I'm looking forward to some jammy pants or lounge pants for my boys out of these snowmen. It is hard to tell but there are sweet little red birds on this print too! We are also planning some other girl things!!
Might seem a little early to be looking at winter fabrics, but I've got to think ahead!
Here my daughter is blanching corn for her brothers…she has to do de-hair quality control on her smaller brothers who do shucking duty.. The older boys set up outside under a tent and cut the corn off the cobs after it cools in the cooler full of water…they have quite a system going, would you believe I just popped up now and then to make sure everyone was safe and toward the end I enjoyed shucking with the little ones… Just two or so weeks ago we did tomatoes…we do them as they come and we had a bad start this year. My son planted a different variety for an experiment. They are called determinates. They are in bush form and they don't need to be staked up. We got a variety for paste. The first part of the crop would rot at the end. After some research he found that there is something called blossom end rot. He found that the plants needed calcium. We have good soil because we sweeten it with our composted goat manure. So he decided to get Epsom salts, which have magnesium in them. He put this around the tomatoes to help them absorb the calcium that was in the soil! And they began to do better! We will get more tomatoes in a week or so. And should be able to get a better yield.
Here my oldest is putting up his broccoli harvest, the same night we were doing tomatoes. He froze it in one l pound increments for me!
The baby (my baby) 🙂 is helping with dishes in preparation to do the tomatoes. We chose to do paste, or juice with this batch. We use it for tomato soup and in other soups.
Here is some of our yield on a shelf that my older boys made for me last year. The difficulty we run into with a house that has no basement is where to put these cans??? This is just a portion of this years work. I think it's kind of pretty!
Just today my 5th born helped me to do green beans.
We've also done some jams and pie fillings and peaches. But now that I'm writing this I'm realizing I need to think about some apple sauce!
Just a word for moms, do let the children help. Do let them know how vital they are to your family! It is a very good thing!!
So, I am thankful in August before many people may be thinking about harvest!
And I am thankful that the children are so helpful…and right now there is a little one upstairs who needs mama to talk to him!
Our friend who has a farm, and a HUGE garden, gave us this beautiful butternut squash!
Then we steamed them till soft.
We put them in the fridge overnight because we ran out of time.
This morning I peeled the peels off and mashed them a little and put them in the oven to heat, so the canner wouldn't take so long to heat up.
Then I mashed them like potatoes with out any thing extra.
The above two steps could have been eliminated if you have a Victorio food strainer with a bigger screen. We just have a tomato screen so I did the peeling and mashing method.
Put the mashed squash into quart jars and apply the lids.
One thing I was very careful about was getting the pumpkin packed as densely as possible. We left 1″ head space.
We processed them at 10 pounds pressure in the pressure cooker for 100 minutes!
We yielded 7 quarts and can use it for pumpkin pie, sweet potato pie, or muffins and cookies!
Looks like pumpkin! Tastes sweeter than pumpkin! The darker spots are from my heating them up in the oven. Thankfully, our family is not too picky about a lump or a darker spot. They just enjoy the end product!!
Thank you Mrs. S. for all your help with canning questions and for the lovely butternut squash!
This week we harvested our crab apples. We found some trees on our property and replanted them in the front yard. I thought they were apples because of the blossoms. As they grew, they turned out to be crab apples. I had visions of apple sauce and apple butter for the winter. Alas, crab apples.
Well what can you do with crab apples? We decided to "try" crab apple jelly.
We had fun harvesting…every body helped and even a couple of little boys we were watching for the day.
I have never made jelly before, because jam is easier… But as a little girl I always thought apple jelly was yummy so we gave it a try.
We stemmed and deflowered the apples, then cut them in half.
Then put them in a pan and covered them with water.
Then brought to a boil and simmered for about 1/2 hour.
Then got some unbleached muslin from the sewing room, lined a strainer with it and put the strainer in a pan to catch the juice and poured the hot apples into the strainer lined with muslin.
This gives you a nice clear apple juice in the pan. Unfortunately, I was in a hurry and wanted to HELP to juice out and so brought the muslin out of the strainer and squeezed my apples to extract some more juice. That is a no no.
It makes cloudy juice. Not gorgeous, clear, gem like jelly. Live and learn.
We were told by a friend that apple jelly if cooked long enough doesn't need pectin. So we just measured our juice, we only got 5 cups of juice. We don't like to add a lot of sugar, the recipe called for 4 cups of sugar. We added 3. Then began cooking the sugar and juice mixture. Again, I became impatient..I had two sewing orders, one quite large that needed shipping on that day so I didn't wait for it to cook long enough. I whipped out some Certo Liquid pectin, to help the jelly along and put the hot jelly into jars. We just inverted the jars for a few seconds and then turned them upright and they sealed beautifully.
I got 6 pretty little jars of crab apple jelly. A little cloudy but a pretty color!
B. Open the jars and cook down the jelly longer which is what they did in the old days, and have maybe 5 beautiful jars of crab apple jelly.
I was shooting for crab apple jelly so, I think I'll do plan B.
It does seem a shame not to just pick these gifts off the tree and eat them. We did a little of that. But with winter coming jelly will be nice to have around.
Today cooked the jelly again and now it is set!!!
It turned out a deeper color, very red. Hard to believe it is the same jelly! But it only yielded half of what I started with, and it is very sweet! Next time I'll be more patient. Less multi- tasking.
This week we put up tomato juice to use making creamy tomato soup and to add to our spaghetti, chili, vegetable soup, etc..
We grow Roma tomatoes for their quality meaty fruit, this year my son planted 80 plants! He has a dream to be an organic gardener.
We picked early in the morning..
Roma's are an egg or oval shaped meaty tomato, we had some volunteer tomatoes come up this year also.
We wash and top the tomatoes, put them in a stainless steel stock pot with about 2 cups of water and cook on high until the skin splits. Then we run them through the Victorio strainer, a wonderful tool! The tomatoes go in the hopper and you turn the crank, there is an auger with a metal sieve/screen attached, the juice and beautiful pulp is strained through the screen and the auger pushes the skin and seeds out the end.
We then pour the juice and pulp into a bigger bowl to mix together, because when pouring the tomatoes into the hopper the hot juice and water comes out first with out cranking and the pulp has to be cranked out. So the first part is mostly liquid and mixing the pulp in gives even consistency. Beautiful, fresh and RED isn't it?
After mixing the pulp and juice we pour hot into clean jars and process in water bath for 15 minutes. It will be delightful to have hot tomato soup this winter!
add remaining milk and heat through, then add tomato juice and spices, stir constantly to thicken, then simmer 30 minutes to blend flavors. Remove bay leaf and serve hot! Yummy!
This year we got 5 bushel of peaches from a farmer in our area. He called Thursday evening and wanted us to pick them up. He had traveled up from Virginia with them and was worried they would spoil from the heat. It was hot last week!
My husband picked them up and the farmer told him you better put these up right away. And that is what we did. On Thursday night the girls and I put up 21 quarts, 16 of fruit cocktail and the rest peach halves. Up on Friday and back at it we finished Friday night with 107 quarts of peach products! That is the most we have ever done in one canning. There was the fruit cocktail, peach halves, a couple peach chunks, peach pie filling, peach jam, and peach pineapple jam.
Whew!! It was a long one! But fun and rewarding!
Our friend told us about peeling the peaches and slow cooking the peels in a roaster or crock pot, for pressing later in a food mill to make jams. It is a wonderful way to get the most out of your fruit!
The fruit of our labor… Only 1 in 107 jars didn't seal. We took care of that at our Sunday snack!
Today we have to finish up the jam. We refrigerated a big bunch of pulp because we ran out of sugar.
Then we followed Pomona's pectin double recipe instructions. Pomona's lets you decide the sugar ratio. We used the lowest, haven't tasted it yet, but last years was yummy.
Today was a working day, the last few days it was up near 100 degrees and humid and we don't have air. We were a little slow on those days. Not to mention the children were falling sick all week, one on Monday, one on Tuesday, one on Thursday, and one on Friday. No one today yet. They had fevers and terrible headaches. The older ones suffered quietly, but my seven year old has zero pain tolerance so, that is trying on the nerves!
I think that is why today we got so much work done, we were able to move a little faster with the heat slacking off.
The girl's and I finished some scrappy tiered skirts. A dear friend who is my son's piano teacher, and taught the girl's earlier, is an avid quilter. I don't know if that is the best description. She is an awesome quilter. When my son came home from piano Thursday night he brought two white kitchen trash bags of scraps leftover from her quilts! We had so much fun looking through them. When you sew, and people know it, sometimes they will send fabric your way. Sometimes you are thankful, but you can't really use it. Other times you are thankful and you get excited! This was an excitement case! Being an excellent quilter isn't all she is, she has always amazed me with her color coordinating. So, this fabric was perfect for our tiered skirts, and we were in need of some!
I also got to make a blouse for myself, two or three years ago, she sent home fabric and I made a blouse then, and the girls got dresses made up! Wow, thank you Ruth! I'm working on a tutorial on making these skirts which I hope will be helpful. I'll get it posted next week hopefully.
Then, today a neighbor who we met at our local farmer's market stopped by and asked if we could use some cucumbers, well, ours just happen to not be doing well this year so our answer was yes! I immediately wanted to make pickles. We also had picked up our annual 30# of cherries at a local farm and those needed put up. I forgot all about them, sitting there sewing away this morning until the neighbor came with the cucumbers! Oh my! We have to do cherries and pickles!
Well, we got them done! Praise the Lord! Just have to give credit where credit is due! That canning looked daunting at first, but the girl's were up for it and my husband and the boys were working outside on the chicken coop. I don't know why but I just love to get stuff done around here and it seems to give me more determination when my husband is sprucing up outside, even if I am tired. So, we froze some cherries, and made pie filling with some cherries, and we made some jam/jelly with the juice and some pulverized cherries.
I want to let you all know about Pomona's Pectin it takes less sugar than Sure jel, or Ball Brand, I have always been mortified at all the sugar it takes to make jam, and this year a friend told us about Pomona's, we haven't seen the end result yet, our jam will sit for the next 24 hours, but even when we used the other brands we had some that didn't set well. It is just so good to know I'm not pumping the children with sugar!! For a 4 quart preparation of berries or juice you only need to use 3/4 cup of sugar. You can add more if desired but it is not needed. Ball is 6 or 7 cups and Sure jell is a little less. And you have to stick with their recipe or it won't jell properly. We are thankful for our friend letting us know!
The pickles are still in the water bath. Then one more load of cherry goods:-) Olivia is baby sitting the canner while I am writing this!
My husband has one care giving client in the evening on Saturday's so, after he went to work the boys finished up the chicken coop, I mention this because I remember when all the children were young and it was very hard to get things done around the house because of the time taking care of the little ones. It is all worth it and I wouldn't trade any of the years training and bringing up my children, but this fruit today really blessed me. We're doing the last load of cherry pie filling and I hear a saw running….I ask the girls," your dad is gone who is running a saw?" They said their brother, who works with him and is 21. That just flooded me with thankfulness, Wow, my baby is a man, and he is finishing the job his dad started! And my 15, 14, and 12 year old sons were helping too! I don't know what to say, it is such a blessing to have them just work with us! We are harvesting fruit! When they are small let them help you with everything, bring them into your life. When they are older they will bless you! Wow!
Bless the Lord, O my soul and forget not all His benefits… That is from Psalm 103 it is rich. Earlier this week when it was too hot for much I was comforted by verse 14…For He knoweth our frame; he remembereth that we are dust. I love that! He understands. He knows. He is O.K. if we have a low or slow day. That is freeing for a work-a-holic!! I'm not glad I'm driven, but I'm glad that He is showing me He is not driving me! Thank you Lord!
Tomorrow is the day of rest! Yea! Thank you Lord!