suggest_table = $wpdb->prefix . 'scrib_suggest'; $this->options = get_option('scrib'); $this->options['site_url'] = get_settings('siteurl') . '/'; $this->options['search_url'] = get_settings('siteurl') .'/search/'; $this->options['browse_url'] = get_permalink($this->options['browse_id']) . '/'; $this->options['browse_name'] = trim(substr(get_page_uri($this->options['browse_id']), strrpos(get_page_uri($this->options['browse_id']), '/')), '/'); $this->the_matching_posts = NULL; $this->the_matching_posts_ordinals = NULL; $this->search_terms = NULL; $this->the_matching_post_counts = NULL; $this->taxonomy_name = $this->options['taxonomies']; $this->taxonomies = $this->taxonomies_register(); $this->taxonomies_for_related = $this->options['taxonomies_for_related']; $this->taxonomies_for_suggest = $this->options['taxonomies_for_suggest']; $this->harvest_table = $wpdb->prefix . 'scrib_harvest'; $this->kses_allowedposttags(); // allow more tags } public function activate() { global $wpdb; // setup default options if(!get_option('scrib')) update_option('scrib', array( 'taxonomies' => array( 's' => 'Keyword', 'scope' => 'Scope', 'auth' => 'Author', 'format' => 'Format', 'isbn' => 'ISBN', 'sourceid' => 'Source ID', 'subj' => 'Subject', 'title' => 'Title'), 'taxonomies_for_related' => array('auth', 'subj'), 'taxonomies_for_suggest' => array('auth', 'subj', 'title') )); $options = get_option('scrib'); // setup the browse page, if it doesn't exist if(empty($options['browse_id']) || $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE ID = ". intval($options['browse_id']) .' AND post_status = "publish" AND post_type = "page" ') == FALSE){ // create the default browse page $postdata['post_title'] = 'Browse'; $postdata['post_name'] = 'browse'; $postdata['comment_status'] = 0; $postdata['ping_status'] = 0; $postdata['post_status'] = 'publish'; $postdata['post_type'] = 'page'; $postdata['post_content'] = 'Browse new titles.'; $postdata['post_excerpt'] = 'Browse new titles.'; $postdata['post_author'] = 0; $post_id = wp_insert_post($postdata); // insert the post // set the options with this new page $options['browse_id'] = (int) $post_id; update_option('scrib', $options); } // setup the catalog author, if it doesn't exist if(empty($options['catalog_author_id']) || get_userdata($options['catalog_author_id']) == FALSE){ // create the default author $random_password = substr(md5(uniqid(microtime())), 0, 6); $user_id = wp_create_user('cataloger', $random_password); $user = new WP_User($user_id); $user->set_role('contributor'); // set the options $options['catalog_author_id'] = (int) $user_id; update_option('scrib', $options); } // setup widget defaults, if they don't exisit if(!get_option('widget_scrib_searchedit')) update_option('widget_scrib_searchedit', array( 'search-title' => 'Searching', 'search-text-top' => 'Your search found [[scrib_hit_count]] items with all of the following terms:', 'search-text-bottom' => 'Click [x] to remove a term, or use the facets in the sidebar to narrow your search. What are facets? Results sorted by keyword relevance.', 'browse-title' => 'Browsing New Titles', 'browse-text-top' => 'We have [[scrib_hit_count]] items with all of the following terms:', 'browse-text-bottom' => 'Click [x] to remove a term, or use the facets in the sidebar to narrow your search. What are facets? Results sorted by the date added to the collection.', 'default-title' => 'Browsing New Titles', 'default-text' => 'Showing new titles added to the collection. Use the facets below to explore the collection. What are facets?' )); if(!get_option('widget_scrib_scope')) update_option('widget_scrib_scope', array( 'title' => 'Searching In' )); if(!get_option('widget_scrib_facets')) update_option('widget_scrib_facets', array( 'number' => 9, 1 => array( 'title' => 'Narrow by Subject', 'facets' => 'subj', 'count' => '25', 'show_search' => 'on', 'format' => 'cloud'), 2 => array( 'title' => 'More in Subject', 'facets' => 'subj', 'count' => '0', 'show_singular' => 'on', 'format' => 'list'), 3 => array( 'title' => 'Format', 'facets' => 'format', 'count' => '25', 'show_search' => 'on', 'format' => 'list'), 4 => array( 'title' => 'Author', 'facets' => 'auth', 'count' => '9', 'show_singular' => 'on', 'show_browse' => 'on', 'format' => 'list') )); } public function kses_allowedposttags() { global $allowedposttags; unset($allowedposttags['font']); $allowedposttags['ul']['class'] = array(); $allowedposttags['ol']['class'] = array(); $allowedposttags['li']['class'] = array(); $allowedposttags['div']['class'] = array(); $allowedposttags['div']['style'] = array(); $allowedposttags['h1']['id'] = array(); $allowedposttags['h1']['class'] = array(); $allowedposttags['h2']['id'] = array(); $allowedposttags['h2']['class'] = array(); $allowedposttags['h3']['id'] = array(); $allowedposttags['h3']['class'] = array(); $allowedposttags['h4']['id'] = array(); $allowedposttags['h4']['class'] = array(); $allowedposttags['h5']['id'] = array(); $allowedposttags['h5']['class'] = array(); $allowedposttags['h6']['id'] = array(); $allowedposttags['h6']['class'] = array(); // tags required for YouTube embeds $allowedposttags['embed']['src'] = array(); $allowedposttags['embed']['type'] = array(); $allowedposttags['embed']['wmode'] = array(); $allowedposttags['embed']['width'] = array(); $allowedposttags['embed']['height'] = array(); $allowedposttags['object']['width'] = array(); $allowedposttags['object']['height'] = array(); $allowedposttags['param']['name'] = array(); $allowedposttags['param']['value'] = array(); return(TRUE); } public function addmenus(){ add_options_page('Scriblio Settings', 'Scriblio', 5, __FILE__, array(&$this, 'admin_menu')); } public function admin_menu(){ require(ABSPATH . PLUGINDIR .'/'. plugin_basename(dirname(__FILE__)) .'/scriblio_admin.php'); } public function query_vars($vars){ // filter wp's query vars, add scrib vars return(array_unique(array_merge($this->taxonomies, $vars))); } public function taxonomies_register($reset = NULL) { // define the Scrib taxonomies global $wpdb; // get the taxonomies from the config or punt and read them from the DB if(get_option('scrib') && !$reset){ $taxonomies = get_option('scrib'); $taxonomies = array_keys($taxonomies['taxonomies']); }else{ $taxonomies = $this->taxonomies_getall(); update_option('Scrib_taxonomies', $facets); } // register those taxonomies foreach($taxonomies as $taxonomy){ if($taxonomy == 's' || $taxonomy == 'scope') continue; // we don't want to register these 'special' taxonomies register_taxonomy( $taxonomy, 'post' ); } return($taxonomies); } public function taxonomies_getall() { global $wpdb; return(array_merge(array('s', 'scope'), $wpdb->get_col("SELECT taxonomy FROM $wpdb->term_taxonomy GROUP BY taxonomy"))); } public function is_term($term, $taxonomy = '') { global $wpdb; $wild = FALSE; $wild = strpos($term, '*'); if ( is_int($term) ) { if ( 0 == $term ) return 0; $where = "t.term_id = '$term'"; } else { if ( ! $term = sanitize_title($term) ) return 0; if($wild){ $where = "t.slug LIKE '$term%'"; }else{ $where = "t.slug = '$term'"; } } $term_id = $wpdb->get_col("SELECT term_id FROM $wpdb->terms as t WHERE $where"); if ( empty($taxonomy) || empty($term_id) ) return $term_id; return $wpdb->get_col("SELECT tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $where AND tt.taxonomy = '$taxonomy'"); } public function get_matching_posts(){ global $bsuite, $wp_query, $wpdb; $post_ids = NULL; if( $this->search_terms ){ $search_terms = $this->search_terms; // a little work around for the /related/ queries if( $bsuite->bsuggestive_to ) $wp_query->query_vars['paged'] = (int) $_REQUEST['paged']; // figure out what page of posts to show // $paged, $posts_per_page, and $limit are here for cases // where the query doesn't have an explicit LIMIT declaration $paged = (int) $wp_query->query_vars['paged'] ? (int) $wp_query->query_vars['paged'] : 1; $posts_per_page = (int) $wp_query->query_vars['posts_per_page'] ? (int) $wp_query->query_vars['posts_per_page'] : (int) get_settings('posts_per_page'); $this->posts_per_page = $posts_per_page; $limit = 'LIMIT '. ($paged - 1) * $posts_per_page .', '. $posts_per_page; $cache_key = md5( serialize( $this->search_terms ) . $paged ); $cache = wp_cache_get( $cache_key , 'scrib_search_'. $cache_key{1} ); if ( isset($cache['count']) && $cache['count'] === 0 ){ $this->the_matching_posts = FALSE; $this->the_matching_post_counts = $cache['post_counts']; $this->the_matching_facets = FALSE; $this->the_matching_posts_count = 0; $this->the_matching_posts_ordinals = FALSE; return(FALSE); } if( !$cache ){ // handle the /related/ queries if( $bsuite->bsuggestive_to ){ if( count( $bsuite->bsuggestive_getposts( $bsuite->bsuggestive_to ))){ $cache['posts'] = array_slice( $bsuite->bsuggestive_getposts( $bsuite->bsuggestive_to ), ( $paged - 1 ) * $posts_per_page, $posts_per_page ); $cache['count'] = count( $cache['posts'] ); $cache['ordinals'] = array_flip( $cache['posts'] ); $cache['facets'] = $wpdb->get_results( "SELECT b.term_id, b.name, a.taxonomy, COUNT(c.term_taxonomy_id) as `count` FROM $wpdb->term_relationships c LEFT JOIN $wpdb->term_taxonomy a ON a.term_taxonomy_id = c.term_taxonomy_id LEFT JOIN $wpdb->terms b ON a.term_id = b.term_id WHERE c.object_id IN (". implode( $bsuite->bsuggestive_getposts( $bsuite->bsuggestive_to ), ',' ) .") GROUP BY c.term_taxonomy_id ORDER BY `count` DESC LIMIT 1000" ); }else{ $cache = array( 'count' => 0 ); } wp_cache_add( $cache_key , $cache, 'scrib_search_'. $cache_key{1} ); $this->the_matching_posts = $cache['posts']; $this->the_matching_facets = $cache['facets']; $this->the_matching_posts_count = count( $bsuite->bsuggestive_getposts( $bsuite->bsuggestive_to )); $this->the_matching_posts_ordinals = $cache['ordinals']; add_filter('the_posts', array(&$this, 'sort_matching_posts')); return(TRUE); } $from[] = " FROM $wpdb->posts a "; // the scope $author_id = ''; if($search_terms['scope'][0] == 'catalog') $author_id = 'AND a.post_author = '. (int) $this->options['catalog_author_id']; if($search_terms['scope'][0] == 'blog') $author_id = 'AND a.post_author <> '. (int) $this->options['catalog_author_id']; unset($search_terms['scope']); // the keywords if(!empty($search_terms['s'])){ $boolean = ''; if(ereg('"|\+|\-|\(|\<|\>|\*', $this->search_terms['s'])) $boolean = ' IN BOOLEAN MODE'; if($this->options['sphinxsearch'] && empty($boolean)){ // get the sphinx client library & configuration require_once(ABSPATH . PLUGINDIR .'/'. plugin_basename(dirname(__FILE__)) .'/includes/sphinxapi.php'); require_once(ABSPATH . PLUGINDIR .'/'. plugin_basename(dirname(__FILE__)) .'/conf_sphinx.php'); // init sphinx & apply the config $sphinx = new SphinxClient (); $sphinx->SetServer ( $sphinx_host, $sphinx_port ); $sphinx->SetLimits ( $sphinx_recstart, $sphinx_reclimit, $sphinx_recoffset ); $sphinx->SetWeights ( $sphinx_weights); $sphinx->SetMatchMode ( $sphinx_matchmode ); $sphinx->SetSortMode ( $sphinx_sortmode, $sphinx_sortby ); // searching the catalog or blog posts or all if($wp_query->query_vars['scope'] == 'catalog') $sphinx->SetFilter ( 'type', array ( 1 ) ); if($wp_query->query_vars['scope'] == 'blog') $sphinx->SetFilter ( 'type', array ( 0 ) ); // do the search $res = $sphinx->Query ( implode($this->search_terms['s'], ' '), $sphinx_index ); if ( is_array($res['matched']) ){ //print_r(array_keys($res['matched'])); //print_r($res['matched']); $keyword_post_ids = array_keys($res['matched']); if (SAVEQUERIES) { unset( $res['matches'] ); unset( $res['matched'] ); $wpdb->queries[] = $res; } } unset($search_terms['s']); }else{ $keyword_post_ids = $wpdb->get_col(" SELECT a.ID, MATCH (b.content, b.title) AGAINST ('". $wpdb->escape(implode($this->search_terms['s'], ' ')) ."'$boolean) AS score FROM $wpdb->posts a LEFT JOIN $bsuite->search_table b ON ( b.post_id = a.ID ) WHERE 1=1 AND (MATCH (b.content, b.title) AGAINST ('". $wpdb->escape(implode($this->search_terms['s'], ' ')) ."'$boolean)) $author_id AND (post_status IN ('publish', 'private')) ORDER BY score DESC LIMIT 1000 "); unset($search_terms['s']); } if( 1 > count( $keyword_post_ids )){ wp_cache_add( $cache_key , array('count' => 0), 'scrib_search_'. $cache_key{1} ); $this->the_matching_posts = FALSE; $this->the_matching_post_counts = $matching_post_counts; $this->the_matching_facets = FALSE; $this->the_matching_posts_count = 0; $this->the_matching_posts_ordinals = FALSE; return(FALSE); } } // the other facets if(!empty($search_terms)){ foreach($search_terms as $taxonomy => $values){ foreach($values as $key => $value){ if(!$tt_ids[] = $this->is_term ( $value, $taxonomy )) $matching_post_counts[$taxonomy][$key] = 0; else $matching_post_counts[$taxonomy][$key] = $wpdb->get_var("SELECT COUNT(term_taxonomy_id) FROM $wpdb->term_relationships WHERE term_taxonomy_id IN (". implode($this->is_term ( $value, $taxonomy ) , ',' ) .')' ); if($matching_post_counts[$taxonomy][$key] < 1){ wp_cache_add( $cache_key , array( 'count' => 0, 'post_counts' => $matching_post_counts ), 'scrib_search_'. $cache_key{1} ); $this->the_matching_posts = FALSE; $this->the_matching_post_counts = $matching_post_counts; $this->the_matching_facets = FALSE; $this->the_matching_posts_count = 0; $this->the_matching_posts_ordinals = FALSE; return(FALSE); } } } } $tt_ids = array_filter($tt_ids); $taliases = range('a','z'); $i = 1; if(count($tt_ids) > 0){ foreach($tt_ids as $tt_id){ $from[] = " INNER JOIN $wpdb->term_relationships ". $taliases[ceil($i / 26)] . $taliases[($i % 26)] .' ON a.ID = '. $taliases[ceil($i / 26)] . $taliases[($i % 26)] .'.object_id '; $where[] = ' AND '. $taliases[ceil($i / 26)] . $taliases[($i % 26)] .'.term_taxonomy_id IN ('. implode($tt_id, ',') .') '; $i++; } } // it's a piece of cake to bake a pretty cake // bring this all together and find the right posts $orderby = ''; $keyword_select = ''; if( empty( $keyword_post_ids ) ){ $orderby = 'ORDER BY a.post_date_gmt DESC'; }else{ $keyword_select = 'AND a.ID IN ('. implode($keyword_post_ids, ',') .')' ; $limit = ''; } $post_ids = $wpdb->get_col('SELECT SQL_CALC_FOUND_ROWS a.ID '. implode($from) .' WHERE 1=1 '. implode($where) .' '. $keyword_select .' '. $author_id .' AND (a.post_type IN ("post", "page") AND (a.post_status IN ("publish", "private"))) GROUP BY a.ID '. $orderby .' '. $limit); if(count($post_ids) > 0){ $cache['count'] = $wpdb->get_var('SELECT FOUND_ROWS()'); if(empty($limit)){ count($post_ids); $post_ids_for_facets = array_slice(array_intersect($keyword_post_ids, $post_ids), 0, 150); $post_ids = array_slice(array_intersect($keyword_post_ids, $post_ids), ($paged - 1) * $posts_per_page, $posts_per_page); }else{ $post_ids_for_facets = $wpdb->get_col('SELECT SQL_CALC_FOUND_ROWS a.ID '. implode($from) .' WHERE 1=1 '. implode($where) .' '. $author_id .' AND (a.post_type IN ("post", "page") AND (a.post_status IN ("publish", "private"))) GROUP BY a.ID '. $orderby .' LIMIT '. ($paged - 1) * $posts_per_page .',150'); } $cache['facets'] = $wpdb->get_results("SELECT b.term_id, b.name, a.taxonomy, COUNT(c.term_taxonomy_id) as `count` FROM $wpdb->term_relationships c LEFT JOIN $wpdb->term_taxonomy a ON a.term_taxonomy_id = c.term_taxonomy_id LEFT JOIN $wpdb->terms b ON a.term_id = b.term_id WHERE c.object_id IN (". implode($post_ids_for_facets, ',') .") GROUP BY c.term_taxonomy_id ORDER BY `count` DESC LIMIT 1000"); $cache['posts'] = $post_ids; $cache['ordinals'] = array_flip($post_ids); $cache['post_counts'] = $matching_post_counts; }else{ $cache = array('count' => 0); } wp_cache_add( $cache_key , $cache, 'scrib_search_'. $cache_key{1} ); } if(is_array($cache)){ $this->the_matching_posts = $cache['posts']; $this->the_matching_post_counts = $matching_post_counts; $this->the_matching_facets = $cache['facets']; $this->the_matching_posts_count = $cache['count']; $this->the_matching_posts_ordinals = $cache['ordinals']; add_filter('the_posts', array(&$this, 'sort_matching_posts')); return(TRUE); }else{ $this->the_matching_posts = FALSE; $this->the_matching_post_counts = $matching_post_counts; $this->the_matching_facets = FALSE; $this->the_matching_posts_count = 0; $this->the_matching_posts_ordinals = FALSE; return(FALSE); } } } public function sort_matching_posts($the_posts){ $GLOBALS["wp_query"]->found_posts = $GLOBALS["wp_query"]->post_count = $this->the_matching_posts_count; $GLOBALS["wp_query"]->max_num_pages = ceil( $this->the_matching_posts_count / $this->posts_per_page); //print_r($the_posts); //print_r($this->the_matching_posts_ordinals); // insert the ordinal into each post for sorting foreach($the_posts as $post){ //echo $post->ID . '='. $this->the_matching_posts_ordinals[$post->ID] .', '; $new_order[$this->the_matching_posts_ordinals[$post->ID]] = $post; } // now that the posts are re-keyed, sort them ksort($new_order); // This shuffle resets the keys on the array. // A function later in WP expects the array keys to be sequential, // and the output here might otherwise be non-sequential. array_unshift($new_order, 'Junk'); array_shift($new_order); //print_r($new_order); return($new_order); } public function search_terms(){ global $wp_query; $temp = array_map('stripslashes', (array_intersect_key($wp_query->query_vars, array_flip($this->taxonomies)))); $terms = FALSE; if(is_array($temp)){ $terms = array(); reset($temp); while (list($key, $val) = each($temp)) { $values = (explode('|', urldecode($val))); foreach($values as $val){ $terms[$key][] = $val; } } } if(!empty($wp_query->query_vars['s'])) $terms['s'] = explode('|', stripslashes(urldecode($wp_query->query_vars['s']))); if($this->is_browse && empty($terms)){ $terms['scope'][] = 'catalog'; $this->autoscoped = TRUE; } $this->search_terms = $terms; return(array_filter($terms)); } public function posts_where($query){ // hide catalog entries from front page and rss feeds. global $wp_query; if($wp_query->is_home) return(" AND post_author <> {$this->options['catalog_author_id']}". $query); if($wp_query->is_feed && count($wp_query->query) < 2) return(" AND post_author <> {$this->options['catalog_author_id']}". $query); return($query); } public function the_query($query, $limit = NULL){ global $bsuite, $wp_query, $wpdb; //error_log( $query ."\r\r". print_r( $wp_query->query_vars, TRUE ) ); if($wp_query->is_admin) return($query); //echo "
]]
global $id;
return(''. $thing .'');
}
public function token_reviews($thing) {
// [[reviews|0738202444]]
if(function_exists('scrib_reviews')){
return(scrib_reviews($thing));
}else{
return('');
}
}
public function token_availability($thing) {
// [[availability|l1292675]]
if(function_exists('scrib_availability')){
return(scrib_availability($thing));
}else{
return('');
}
// return('click for location and availability');
// return('click for availability');
}
// end token-related functions
public function token_hit_count($thing) {
// [[scrib_hit_count]]
if(999 < $this->the_matching_posts_count)
return('more than 1000');
else
return($this->the_matching_posts_count);
}
public function suggest_init_table(){
global $wpdb;
set_time_limit(0);
ignore_user_abort(TRUE);
$interval = 250;
if( !isset( $_GET[ 'n' ] ) ) {
$n = 0;
$charset_collate = '';
if ( version_compare(mysql_get_server_info(), '4.1.0', '>=') ) {
if ( ! empty($wpdb->charset) )
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
if ( ! empty($wpdb->collate) )
$charset_collate .= " COLLATE $wpdb->collate";
}
// drop the old table
if($wpdb->get_var("SHOW TABLES LIKE '$this->suggest_table'"))
$wpdb->get_results("DROP TABLE $this->suggest_table");
// create the table
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta("
CREATE TABLE $this->suggest_table (
term_id bigint(20) NOT NULL default '0',
term_name varchar(55) NOT NULL default '',
term_rank bigint(20) NOT NULL default '0',
PRIMARY KEY (term_id),
KEY term_name (term_name(3))
) ENGINE=MyISAM $charset_collate ");
} else {
$n = (int) $_GET[ 'n' ] ;
}
// get the terms
$in_taxonomies = "'" . implode("', '", $this->taxonomies_for_suggest) . "'";
$terms = $wpdb->get_results("SELECT t.term_id, t.name, tt.count FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ($in_taxonomies) ORDER BY t.term_id LIMIT $n, $interval");
if( count( $terms ) ) {
echo '' . __('Rebuilding Scriblio search suggest table. Please be patient.', 'Scrib') . " Working $interval terms, starting with $n .
'. __('Scriblio search suggest table rebuilt.', 'bsuite') .'
'; ?> autoscoped ) unset($input['scope']); $tags = FALSE; reset($input); while (list($key, $val) = each($input)) { $tags[$key] = implode('|', $val); } if (!empty($tags['s'])) { $keywords = $tags['s']; unset($tags['s']); $taglink = $this->options['search_url'] . urlencode($keywords) .'?'. http_build_query($tags); }else{ $taglink = $this->options['browse_url'] .'?'. http_build_query($tags); } return trim($taglink, '?'); } public function get_tag_link( $tag ) { global $wp_rewrite; $taglink = $this->options['browse_url'] . '?' . $tag->taxonomy . '=' . $tag->slug; // return apply_filters('tag_link', $taglink, $tag_id); return $taglink; } public function the_tags_for_bsuite_suggestive( $tags, $post_id ) { global $object_term_cache, $blog_id; $post_id = (int) $post_id; if ( !$post_id ) return($tags); if($terms = array_intersect_key($object_term_cache[$blog_id][$post_id], array_flip($this->taxonomies_for_related))){ foreach ( $terms as $taxonomy ){ foreach ( $taxonomy as $tag ) $tags[] = $tag->name; } return($tags); }else if($terms = wp_get_object_terms($post_id, $this->taxonomies_for_related)){ foreach ( $terms as $term ){ $tags[] = $term->name; } return($tags); }else{ return($tags); } } public function get_the_tags( $id = 0 ) { global $post, $object_term_cache, $blog_id; $id = (int) $id; if ( !$id ) $id = (int) $post->ID; $tags = array_intersect_key($object_term_cache[$blog_id][$id], array_flip($this->taxonomies)); // $tags = apply_filters( 'get_the_tags', $tags ); if ( empty( $tags ) ) return false; return $tags; } public function get_the_tag_list( $facets = FALSE, $before = '', $sep = '', $after = '' ) { $tags = $this->get_the_tags(); if ( empty( $tags ) ) return false; if ( $facets === FALSE ) $facets = $this->taxonomies; if ( !is_array($facets) ) $facets = explode(',', $facets); $tag_list = $before; foreach ( $tags as $taxonomy ){ foreach ( $taxonomy as $tag ){ if(in_array($tag->taxonomy, $facets)) $tag_links[] = '' . $tag->name . ''; } } if(empty($tag_links)) return(FALSE); $tag_links = join( $sep, $tag_links ); // $tag_links = apply_filters( 'the_tags', $tag_links ); $tag_list .= $tag_links; $tag_list .= $after; return $tag_list; } public function the_tags( $facets = FALSE, $before = 'Tags: ', $sep = ', ', $after = '' ) { echo $this->get_the_tag_list($facets, $before, $sep, $after); } public function tag_cloud( $args = '' ) { $defaults = array( 'smallest' => 8, 'largest' => 33, 'unit' => 'pt', 'number' => 45, 'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC', 'exclude' => '', 'include' => '' ); $args = wp_parse_args( $args, $defaults ); if ( empty($this->the_matching_facets) ) return; $return = $this->generate_tag_cloud( $this->the_matching_facets, $args ); // Here's where those top tags get sorted according to $args //echo apply_filters( 'wp_tag_cloud', $return, $args ); return $return; } public function &generate_tag_cloud( $tags, $args = '' ) { global $wp_rewrite; $defaults = array( 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45, 'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC', 'facets' => $this->taxonomies ); $args = wp_parse_args( $args, $defaults ); extract($args); if(!is_array($facets)) $facets = explode(',', $facets); if ( !$tags ) return; $counts = $tag_links = $selected = array(); foreach ( (array) $tags as $tag ) { if(!in_array($tag->taxonomy, $facets)) continue; $counts[$tag->name] = $tag->count; if(in_array($tag->name, $this->search_terms[$tag->taxonomy])){ $selected[$tag->name] = ' selected'; $tag_links[$tag->name] = $this->get_search_link( $this->search_terms ); }else{ $selected[$tag->name] = ''; $tag_links[$tag->name] = $this->get_search_link( array_merge_recursive($this->search_terms, array($tag->taxonomy => array($tag->name))) ); } $tag_ids[$tag->name] = $tag->term_id; } if ( !$counts ) return; asort($counts); if($number > 0) $counts = array_slice($counts, -$number, $number, TRUE); $min_count = min($counts); $spread = max($counts) - $min_count; if ( $spread <= 0 ) $spread = 1; $font_spread = $largest - $smallest; if ( $font_spread <= 0 ) $font_spread = 1; $font_step = $font_spread / $spread; // SQL cannot save you; this is a second (potentially different) sort on a subset of data. if ( 'name' == $orderby ) uksort($counts, 'strnatcasecmp'); else asort($counts); if ( 'DESC' == $order ) $counts = array_reverse( $counts, true ); $a = array(); $rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : ''; foreach ( $counts as $tag => $count ) { $tag_id = $tag_ids[$tag]; $tag_link = clean_url($tag_links[$tag]); $tag_link = $tag_links[$tag]; // $tag = str_replace(' ', ' ', wp_specialchars( $tag )); $tag = wp_specialchars( $tag ); $a[] = "$tag" ; } switch ( $format ) : case 'array' : $return =& $a; break; case 'list' : $return = "
';
return(''. $image .'');
}
public function the_format($return = NULL) {
if($return){
return strip_tags($this->get_the_tag_list('format'));
}else{
echo strip_tags($this->get_the_tag_list('format'));
}
}
public function link2me( $things, $post_id ){
$things[] = array('code' => $this->the_image( 'small', $post_id ), 'name' => 'Embed Small' );
$things[] = array('code' => $this->the_image( 'large', $post_id ), 'name' => 'Embed Large' );
return( $things );
}
function the_related_bookjackets($before = ''. $sms .'
Sending messages is free, but your mobile service provider may charge you to receive the messages. Please check your plan details before continuing.
Unfortunately, you cannot reply to any SMS text messages you receive using this service.
Messaging services are provided by Clickatell and are subject to their privacy policy.
'; return( $content ); } function textthis_redirect(){ global $wp_query, $post_cache; if( !empty( $_REQUEST['textthis'] ) && !empty( $wp_query->query_vars['p'] )){ if( !$textthis = $this->textthis() ) return( FALSE ); if(!ereg('^'.__('Text This', 'Scrib'), $post_cache[1][$wp_query->query_vars['p']]->post_title)) $post_cache[1][$wp_query->query_vars['p']]->post_title = __('Text This', 'Scrib') .': '. $post_cache[1][$wp_query->query_vars['p']]->post_title; $post_cache[1][$wp_query->query_vars['p']]->post_content = $textthis; $post_cache[1][$wp_query->query_vars['p']]->comment_status = 'closed'; } } // end sharelinks related functions public function widget_editsearch($args) { if(!is_search()) return; global $wp_query; extract($args); $options = get_option('widget_scrib_searchedit'); $search_title = $options['search-title']; $search_text_top = apply_filters( 'widget_text', $options['search-text-top'] ); $search_text_bottom = apply_filters( 'widget_text', $options['search-text-bottom'] ); $browse_title = $options['browse-title']; $browse_text_top = apply_filters( 'widget_text', $options['browse-text-top'] ); $browse_text_bottom = apply_filters( 'widget_text', $options['browse-text-bottom'] ); $default_title = $options['default-title']; $default_text = apply_filters( 'widget_text', $options['default-text'] ); $search_terms = $this->search_terms; unset($search_terms['scope']); echo $before_widget; if( $this->is_browse && empty( $search_terms )) { if ( !empty( $default_title ) ) echo $before_title . $default_title . $after_title; if ( !empty( $default_text ) ) echo ''; }else if( $this->is_browse ) { if ( !empty( $browse_title ) ) echo $before_title . $browse_title . $after_title; if ( !empty( $browse_text_top ) ) echo ''; $this->editsearch(); if ( !empty( $browse_text_bottom ) ) echo ''; }else{ if ( !empty( $search_title ) ) echo $before_title . $search_title . $after_title; if ( !empty( $search_text_top ) ) echo ''; $this->editsearch(); if ( !empty( $search_text_bottom ) ) echo ''; } echo $after_widget; } public function widget_editsearch_control() { $options = $newoptions = get_option('widget_scrib_searchedit'); if ( $_POST['widget_scrib_searchedit-submit'] ) { $newoptions['search-title'] = strip_tags(stripslashes($_POST['widget_scrib_searchedit-search-title'])); $newoptions['search-text-top'] = stripslashes($_POST["widget_scrib_searchedit-search-text-top"]); $newoptions['search-text-bottom'] = stripslashes($_POST["widget_scrib_searchedit-search-text-bottom"]); $newoptions['browse-title'] = strip_tags(stripslashes($_POST['widget_scrib_searchedit-browse-title'])); $newoptions['browse-text-top'] = stripslashes($_POST["widget_scrib_searchedit-browse-text-top"]); $newoptions['browse-text-bottom'] = stripslashes($_POST["widget_scrib_searchedit-browse-text-bottom"]); $newoptions['default-title'] = strip_tags(stripslashes($_POST['widget_scrib_searchedit-default-title'])); $newoptions['default-text'] = stripslashes($_POST["widget_scrib_searchedit-default-text"]); if ( !current_user_can('unfiltered_html') ){ $newoptions['search-text-top'] = stripslashes(wp_filter_post_kses($newoptions['search-text-top'])); $newoptions['search-text-bottom'] = stripslashes(wp_filter_post_kses($newoptions['search-text-bottom'])); $newoptions['browse-text-top'] = stripslashes(wp_filter_post_kses($newoptions['browse-text-top'])); $newoptions['browse-text-bottom'] = stripslashes(wp_filter_post_kses($newoptions['browse-text-bottom'])); $newoptions['default-text'] = stripslashes(wp_filter_post_kses($newoptions['default-text'])); } } if ( $options != $newoptions ) { $options = $newoptions; update_option('widget_scrib_searchedit', $options); } $search_title = attribute_escape( $options['search-title'] ); $search_text_top = format_to_edit($options['search-text-top']); $search_text_bottom = format_to_edit($options['search-text-bottom']); $browse_title = attribute_escape( $options['browse-title'] ); $browse_text_top = format_to_edit($options['browse-text-top']); $browse_text_bottom = format_to_edit($options['browse-text-bottom']); $default_title = attribute_escape( $options['default-title'] ); $default_text = format_to_edit($options['default-text']); ?>
bsuggestive_to ) return; global $wp_query; extract($args); $options = get_option('widget_scrib_scope'); $title = $options['title']; $text_top = apply_filters( 'widget_text', $options['text-top'] ); $text_bottom = apply_filters( 'widget_text', $options['text-bottom'] ); $title_no_terms = $options['title-no-terms']; $text_no_terms = apply_filters( 'widget_text', $options['text-no-terms'] ); ?> the_scope(); ?>