term_id == $id ){ return $EM_Category; }elseif( is_object($id) && $EM_Category->term_id == $id->term_id ){ return $EM_Category; } } if( is_object($id) && get_class($id) == 'EM_Category' ){ return $id; }else{ return new EM_Category($id); } } class EM_Category extends EM_Object { //Taxonomy Fields var $id = ''; var $term_id; var $name; var $slug; var $term_group; var $term_taxonomy_id; var $taxonomy; var $description = ''; var $parent = 0; var $count; //extra attributes imposed by EM_Category var $image_url = ''; var $color; /** * Gets data from POST (default), supplied array, or from the database if an ID is supplied * @param $category_data * @return null */ function EM_Category( $category_data = false ) { global $wpdb; $this->ms_global_switch(); //Initialize $category = array(); if( !empty($category_data) ){ //Load category data if( is_object($category_data) && !empty($category_data->taxonomy) && $category_data->taxonomy == EM_TAXONOMY_CATEGORY ){ $category = $category_data; }elseif( !is_numeric($category_data) ){ $category = get_term_by('slug', $category_data, EM_TAXONOMY_CATEGORY); }else{ $category = get_term_by('id', $category_data, EM_TAXONOMY_CATEGORY); } } if( is_object($category) || is_array($category) ){ foreach($category as $key => $value){ $this->$key = $value; } } $this->id = $this->term_id; //backward compatability $this->ms_global_switch_back(); do_action('em_category',$this, $category_data); } function get_color(){ if( empty($this->color) ){ global $wpdb; $color = $wpdb->get_var('SELECT meta_value FROM '.EM_META_TABLE." WHERE object_id='{$this->term_id}' AND meta_key='category-bgcolor' LIMIT 1"); $this->color = ($color != '') ? $color:'#FFFFFF'; } return $this->color; } function get_image_url(){ if( empty($this->image_url) ){ global $wpdb; $image_url = $wpdb->get_var('SELECT meta_value FROM '.EM_META_TABLE." WHERE object_id='{$this->term_id}' AND meta_key='category-image' LIMIT 1"); $this->image_url = ($image_url != '') ? $image_url:''; } return $this->image_url; } function get_url(){ if( empty($this->link) ){ $this->ms_global_switch(); $this->link = get_term_link($this->slug, EM_TAXONOMY_CATEGORY); $this->ms_global_switch_back(); if ( is_wp_error($this->link) ) $this->link = ''; } return $this->link; } function has_events(){ global $wpdb; //FIXME old event category checking $events_table = EM_EVENTS_TABLE; $sql = "SELECT count(event_id) as events_no FROM $events_table WHERE category_id = {$this->id}"; $affected_events = $wpdb->get_row($sql); return apply_filters('em_category_has_events', (count($affected_events) > 0), $this); } function output_single($target = 'html'){ $format = get_option ( 'dbem_category_page_format' ); return apply_filters('em_category_output_single', $this->output($format, $target), $this, $target); } function output($format, $target="html") { preg_match_all('/\{([a-zA-Z0-9_]+)\}([^{]+)\{\/[a-zA-Z0-9_]+\}/', $format, $conditionals); if( count($conditionals[0]) > 0 ){ //Check if the language we want exists, if not we take the first language there foreach($conditionals[1] as $key => $condition){ $format = str_replace($conditionals[0][$key], apply_filters('em_category_output_condition', '', $condition, $conditionals[0][$key], $this), $format); } } $category_string = $format; preg_match_all("/(#@?_?[A-Za-z0-9]+)({([a-zA-Z0-9,]+)})?/", $format, $placeholders); foreach($placeholders[1] as $key => $result) { $replace = ''; $full_result = $placeholders[0][$key]; switch( $result ){ case '#_CATEGORYNAME': $replace = $this->name; break; case '#_CATEGORYID': $replace = $this->term_id; break; case '#_CATEGORYNOTES': case '#_CATEGORYDESCRIPTION': $replace = $this->description; break; case '#_CATEGORYIMAGE': case '#_CATEGORYIMAGEURL': if( $this->get_image_url() != ''){ if($result == '#_CATEGORYIMAGEURL'){ $replace = $this->get_image_url(); }else{ if( empty($placeholders[3][$key]) ){ $replace = "".esc_attr($this->name).""; }else{ $image_size = explode(',', $placeholders[3][$key]); if( $this->array_is_numeric($image_size) && count($image_size) > 1 ){ $replace = "".esc_attr($this->name).""; }else{ $replace = "".esc_attr($this->name).""; } } } } break; case '#_CATEGORYCOLOR': $replace = $this->get_color(); break; case '#_CATEGORYLINK': case '#_CATEGORYURL': $link = $this->get_url(); $replace = ($result == '#_CATEGORYURL') ? $link : ''.esc_html($this->name).''; break; case '#_CATEGORYEVENTSPAST': //depreciated, erroneous documentation, left for compatability case '#_CATEGORYEVENTSNEXT': //depreciated, erroneous documentation, left for compatability case '#_CATEGORYEVENTSALL': //depreciated, erroneous documentation, left for compatability case '#_CATEGORYPASTEVENTS': case '#_CATEGORYNEXTEVENTS': case '#_CATEGORYALLEVENTS': //convert depreciated placeholders for compatability $result = ($result == '#_CATEGORYEVENTSPAST') ? '#_CATEGORYPASTEVENTS':$result; $result = ($result == '#_CATEGORYEVENTSNEXT') ? '#_CATEGORYNEXTEVENTS':$result; $result = ($result == '#_CATEGORYEVENTSALL') ? '#_CATEGORYALLEVENTS':$result; //forget it ever happened? :/ if ($result == '#_CATEGORYPASTEVENTS'){ $scope = 'past'; } elseif ( $result == '#_CATEGORYNEXTEVENTS' ){ $scope = 'future'; } else{ $scope = 'all'; } $events = EM_Events::get( array('category'=>$this->term_id, 'scope'=>$scope) ); if ( count($events) > 0 ){ $replace .= get_option('dbem_category_event_list_item_header_format',''); } break; default: $replace = $full_result; break; } $replace = apply_filters('em_category_output_placeholder', $replace, $this, $full_result, $target); //USE WITH CAUTION! THIS MIGHT GET RENAMED $category_string = str_replace($full_result, $replace , $category_string ); } $name_filter = ($target == "html") ? 'dbem_general':'dbem_general_rss'; //TODO remove dbem_ filters $category_string = str_replace('#_CATEGORY', apply_filters($name_filter, $this->name) , $category_string ); //Depreciated return apply_filters('em_category_output', $category_string, $this, $format, $target); } function can_manage( $capability_owner = 'edit_categories', $capability_admin = false ){ global $em_capabilities_array; //Figure out if this is multisite and require an extra bit of validation $multisite_check = true; $can_manage = current_user_can($capability_owner); //if multisite and supoer admin, just return true if( is_multisite() && is_super_admin() ){ return true; } if( EM_MS_GLOBAL && !is_main_site() ){ //User can't admin this bit, as they're on a sub-blog $can_manage = false; if(array_key_exists($capability_owner, $em_capabilities_array) ){ $this->add_error( $em_capabilities_array[$capability_owner]); } } return $can_manage; } } ?>