'id'); protected $fields_to_wp = array('id' => 'ID'); static $read_query_cache = array(); protected $read_use_cache = TRUE; protected $default_sort = array(); protected function _convertFromWp( $userdata ) { $return = array( 'id' => $userdata->ID, 'email' => $userdata->user_email, 'display_name' => $userdata->display_name, 'username' => $userdata->user_login, ); return $return; } public function withMeta() { $this->withMeta = TRUE; return $this; } protected function _convertToWp( $values ) { $core = array(); $meta = array(); if( array_key_exists('id', $values) ){ $core['ID'] = $values['id']; unset( $values['id'] ); } if( array_key_exists('email', $values) ){ $core['user_email'] = $values['email']; unset( $values['email'] ); } if( array_key_exists('display_name', $values) ){ $core['display_name'] = $values['display_name']; unset( $values['display_name'] ); } if( array_key_exists('username', $values) ){ $core['user_login'] = $values['username']; unset( $values['username'] ); } if( array_key_exists('role', $values) ){ $meta['role'] = $values['role']; unset( $values['role'] ); } if( $values ){ $meta = $meta + $values; } $return = array( $core, $meta ); return $return; } public function set_search_in( $fields = array() ){ $this->search_in = $fields; return $this; } // READ public function read_prepare_query( $args = array() ) { $q = array(); $meta_query = array(); foreach( $args['WHERE'] as $w ){ list( $k, $compare, $v ) = $w; if( 'NOTIN' == $compare ){ $compare = 'NOT IN'; } $test = array($k => array($compare, $v)); list( $core_where, $meta_where ) = $this->_convertToWp( $test ); // _print_r( $args['WHERE'] ); // echo 'CORE WHERE'; // _print_r( $core_where ); // echo 'META WHERE'; // _print_r( $meta_where ); // exit; // don't query main table except ID, post_name, post_title as it's too difficult at the moment if( $core_where ){ foreach( $core_where as $k => $more ){ list( $compare, $v ) = $more; switch( $k ){ case 'ID': switch( $compare ){ case '=': case 'IN': if( (! is_array($v)) && (! $v) ){ $return = NULL; return $return; } $q['include'] = $v; break; case '<>': case 'NOTIN': case 'NOT IN': $q['exclude'] = $v; break; } break; } } } if( $meta_where ){ foreach( $meta_where as $k => $more ){ list( $compare, $v ) = $more; switch( $k ){ case 'role': switch( $compare ){ case '=': case 'IN': $q['role__in'] = is_array($v) ? $v : array($v); break; case '<>': case 'NOTIN': case 'NOT IN': $q['role__not_in'] = is_array($v) ? $v : array($v); break; } break; default: $meta_query[] = array( 'key' => $k, 'compare' => $compare, 'value' => $v, ); break; } } } } if( $meta_query ){ $meta_query['relation'] = 'AND'; } // _print_r( $q ); // exit; if( $args['SORT'] ){ $wp_orderby = array(); $sort = array(); foreach( $args['SORT'] as $s ){ $sort[$s[0]] = $s[1]; } list( $sort_core, $sort_meta ) = $this->_convertToWp( $sort ); foreach( $sort_core as $k => $ascdesc ){ $q['orderby'] = $k; $q['order'] = $ascdesc; } if( $sort_meta ){ foreach( $sort_meta as $k => $ascdesc ){ $q['orderby'] = 'meta_value'; $q['order'] = $ascdesc; $q['meta_key'] = $k; } } } if( $args['LIMIT'] ){ $q['number'] = $args['LIMIT'][0]; if( $args['LIMIT'][1] ){ $q['offset'] = $args['LIMIT'][1]; } } else { // $q['posts_per_page'] = -1; } if( $args['SEARCH'] ){ $q['search'] = $args['SEARCH']; } if( $meta_query ){ $q['meta_query'] = $meta_query; } return $q; } public function count( $args = array() ) { $return = NULL; if( NULL === $args ){ return $return; } $args = HC3_Functions::tempCrudPrepareArgs( $args, $this->idField ); if( $this->read_use_cache ){ $cache_key = $this->wp_type . ':count' . json_encode($args); if( array_key_exists($cache_key, self::$read_query_cache) ){ // echo "ON CACHE: '$sql'
"; $return = self::$read_query_cache[$cache_key]; return $return; } } $q = $this->read_prepare_query( $args ); if( $q !== NULL ){ $q['number'] = 1; $wp_users_query = new WP_User_Query( $q ); $return = $wp_users_query->get_total(); } return $return; } public function read( $args = array() ) { $return = array(); if( NULL === $args ){ return $return; } $args = array_merge( $this->default_sort, $args ); $args = HC3_Functions::tempCrudPrepareArgs( $args, $this->idField ); // _print_r( $args ); if( $this->read_use_cache ){ $cache_key = $this->wp_type . ':' . json_encode($args); if( isset(self::$read_query_cache[$cache_key]) ){ // echo "ON CACHE: '$cache_key'
"; $return = self::$read_query_cache[$cache_key]; return $return; } } // $args = array(); $q = $this->read_prepare_query( $args ); if( $q !== NULL ){ // echo 'QUERY
'; // _print_r( $q ); // exit; $wp_users_query = new WP_User_Query( $q ); $wp_users = $wp_users_query->get_results(); $return = array(); $count = count($wp_users); for( $ii = 0; $ii < $count; $ii++ ){ // $meta = get_metadata( 'post', $posts[$ii]->ID ); // $values = array_map( function($n){return $n[0];}, $meta ); $values = $this->_convertFromWp( $wp_users[$ii] ); $key_id = $values['id']; $return[ $key_id ] = $values; } } if( $this->read_use_cache ){ self::$read_query_cache[$cache_key] = $return; } return $return; } // CREATE public function create( $values ) { } // UPDATE public function update( $id, $values ) { } public function updateMeta( $id, $values ) { } // DELETE public function delete( $id ) { } public function deleteAll() { $return = TRUE; return $return; } }