Example #1
0
 static function pre_user_query($query)
 {
     global $wpdb;
     $p2p_q = P2P_Query::create_from_qv($query->query_vars, 'user');
     if (is_wp_error($p2p_q)) {
         trigger_error($p2p_q->get_error_message(), E_USER_WARNING);
         $query->query_where = " AND 1=0";
         return;
     }
     if (null === $p2p_q) {
         return;
     }
     $map = array('fields' => 'query_fields', 'join' => 'query_from', 'where' => 'query_where', 'orderby' => 'query_orderby');
     $clauses = array();
     foreach ($map as $clause => $key) {
         $clauses[$clause] = $query->{$key};
     }
     $clauses = $p2p_q->alter_clauses($clauses, "{$wpdb->users}.ID");
     if (0 !== strpos($clauses['orderby'], 'ORDER BY ')) {
         $clauses['orderby'] = 'ORDER BY ' . $clauses['orderby'];
     }
     foreach ($map as $clause => $key) {
         $query->{$key} = $clauses[$clause];
     }
 }
Example #2
0
 static function pre_user_query($query)
 {
     global $wpdb;
     $q =& $query->query_vars;
     P2P_Query::expand_shortcut_qv($q);
     if (isset($q['connected_items'])) {
         $item = $q['connected_items'];
     } else {
         $item = 'any';
     }
     $r = P2P_Query::expand_connected_type($q, $item, 'user');
     if (false === $r) {
         $query->query_where = " AND 1=0";
         return;
     }
     // alter query
     $qv = P2P_Query::get_qv($q);
     if (!$qv) {
         return;
     }
     $map = array('fields' => 'query_fields', 'join' => 'query_from', 'where' => 'query_where', 'orderby' => 'query_orderby');
     $clauses = array();
     foreach ($map as $clause => $key) {
         $clauses[$clause] = $query->{$key};
     }
     $clauses = P2P_Query::alter_clauses($clauses, $qv, "{$wpdb->users}.ID");
     if (0 !== strpos($clauses['orderby'], 'ORDER BY ')) {
         $clauses['orderby'] = 'ORDER BY ' . $clauses['orderby'];
     }
     foreach ($map as $clause => $key) {
         $query->{$key} = $clauses[$clause];
     }
 }
Example #3
0
 static function posts_clauses($clauses, $wp_query)
 {
     global $wpdb;
     $qv = P2P_Query::get_qv($wp_query->query_vars);
     if (!$qv) {
         return $clauses;
     }
     $wp_query->_p2p_cache = true;
     return P2P_Query::alter_clauses($clauses, $qv, "{$wpdb->posts}.ID");
 }
Example #4
0
 static function parse_query($wp_query)
 {
     $r = P2P_Query::create_from_qv($wp_query->query_vars, 'post');
     if (is_wp_error($r)) {
         $wp_query->_p2p_error = $r;
         $wp_query->set('year', 2525);
         return;
     }
     if (null === $r) {
         return;
     }
     list($wp_query->_p2p_query, $wp_query->query_vars) = $r;
     $wp_query->is_home = false;
     $wp_query->is_archive = true;
 }
Example #5
0
 static function parse_query($wp_query)
 {
     $p2p_q = P2P_Query::create_from_qv($wp_query->query_vars, 'post');
     if (is_wp_error($p2p_q)) {
         trigger_error($p2p_q->get_error_message(), E_USER_WARNING);
         $wp_query->set('year', 2525);
         return;
     }
     if (null === $p2p_q) {
         return;
     }
     $wp_query->_p2p_query = $p2p_q;
     $wp_query->is_home = false;
     $wp_query->is_archive = true;
 }
 function expand_connected_type(&$q)
 {
     if (!isset($q['connected_type'])) {
         return;
     }
     $ctype = p2p_type(_p2p_pluck($q, 'connected_type'));
     if (!$ctype) {
         return false;
     }
     if (isset($q['connected_direction'])) {
         $directed = $ctype->set_direction(_p2p_pluck($q, 'connected_direction'));
     } else {
         $directed = P2P_Query::find_direction($ctype, $q['connected_items'], 'user');
     }
     if (!$directed) {
         trigger_error("Can't determine direction", E_USER_WARNING);
         return false;
     }
     $q = $directed->get_connected_args($q);
     return true;
 }
Example #7
0
 function test_connection_filtering()
 {
     $ctype = p2p_register_connection_type(array('name' => 'posts_to_pages', 'from' => 'post', 'to' => 'page', 'data' => array('type' => 'strong'), 'sortable' => true, 'from_query_vars' => array('post_status' => 'publish', 'connected_order' => 'asc')));
     $qv = array('connected_type' => $ctype->name, 'connected_direction' => 'to', 'connected_meta' => array('foo' => 'bar'), 'connected_orderby' => 'foo', 'connected_order' => 'desc');
     list($p2p_query, $qv) = P2P_Query::create_from_qv($qv, 'post');
     // 'to_query_vars' should automatically be added
     $this->assertEquals('publish', $qv['post_status']);
     // users should be able to filter connections via additional connected meta
     $this->assertEquals($p2p_query->meta, array_merge($ctype->data, array('foo' => 'bar')));
     // users should be able to specify a different order
     $this->assertEquals('foo', $p2p_query->orderby);
     $this->assertEquals('desc', $p2p_query->order);
 }