コード例 #1
0
ファイル: PodsAPI.php プロジェクト: satokora/IT354Project
 /**
  * Find related items related to an item
  *
  * @param int $field_id The Field ID
  * @param int $pod_id The Pod ID
  * @param int $id Item ID to get related IDs from
  * @param array $field Field data array
  * @param array $pod Pod data array
  *
  * @return array|bool
  *
  * @since 2.3
  *
  * @uses pods_query()
  */
 public function lookup_related_items_from($field_id, $pod_id, $id, $field = null, $pod = null)
 {
     $related_ids = false;
     $id = (int) $id;
     $tableless_field_types = PodsForm::tableless_field_types();
     if (empty($id) || !in_array(pods_v('type', $field), $tableless_field_types)) {
         return false;
     }
     $related_pick_limit = 0;
     if (!empty($field)) {
         $options = (array) pods_var_raw('options', $field, $field, null, true);
         $related_pick_limit = (int) pods_v('pick_limit', $options, 0);
         if ('single' == pods_var_raw('pick_format_type', $options)) {
             $related_pick_limit = 1;
         }
     }
     if (!pods_tableless()) {
         $field_id = (int) $field_id;
         $sister_id = (int) pods_var_raw('sister_id', $field, 0);
         $related_where = "\n                `field_id` = {$field_id}\n                AND `related_item_id` = {$id}\n            ";
         $sql = "\n                SELECT *\n                FROM `@wp_podsrel`\n                WHERE\n                    {$related_where}\n                ORDER BY `weight`\n            ";
         $relationships = pods_query($sql);
         if (!empty($relationships)) {
             $related_ids = array();
             foreach ($relationships as $relation) {
                 if ($field_id == $relation->field_id && !in_array($relation->item_id, $related_ids)) {
                     $related_ids[] = (int) $relation->item_id;
                 } elseif (0 < $sister_id && $field_id == $relation->related_field_id && !in_array($relation->related_item_id, $related_ids)) {
                     $related_ids[] = (int) $relation->related_item_id;
                 }
             }
         }
     } else {
         // @todo handle meta-based lookups
         return false;
         if (!is_array($pod)) {
             $pod = $this->load_pod(array('id' => $pod_id, 'table_info' => false), false);
         }
         if (!empty($pod) && in_array($pod['type'], array('post_type', 'media', 'user', 'comment', 'settings'))) {
             $related_ids = array();
             $meta_type = $pod['type'];
             if (in_array($pod['type'], array('post_type', 'media'))) {
                 $meta_type = 'post';
             }
             $no_conflict = pods_no_conflict_check($meta_type);
             if (!$no_conflict) {
                 pods_no_conflict_on($meta_type);
             }
             if ('settings' == $meta_type) {
                 $related_id = get_option('_pods_' . $pod['name'] . '_' . $field['name']);
                 if (empty($related_id)) {
                     $related_id = get_option($pod['name'] . '_' . $field['name']);
                 }
                 if (is_array($related_id) && !empty($related_id)) {
                     foreach ($related_id as $related) {
                         if (is_array($related) && !empty($related)) {
                             if (isset($related['id'])) {
                                 $related_ids[] = (int) $related['id'];
                             } else {
                                 foreach ($related as $r) {
                                     $related_ids[] = (int) $r;
                                 }
                             }
                         } else {
                             $related_ids[] = (int) $related;
                         }
                     }
                 }
             } else {
                 $related_id = get_metadata($meta_type, $id, '_pods_' . $field['name'], true);
                 if (empty($related_id)) {
                     $related_id = get_metadata($meta_type, $id, $field['name']);
                 }
                 if (is_array($related_id) && !empty($related_id)) {
                     foreach ($related_id as $related) {
                         if (is_array($related) && !empty($related)) {
                             if (isset($related['id'])) {
                                 $related_ids[] = (int) $related['id'];
                             } else {
                                 foreach ($related as $r) {
                                     if (isset($related['id'])) {
                                         $related_ids[] = (int) $r['id'];
                                     } else {
                                         $related_ids[] = (int) $r;
                                     }
                                 }
                             }
                         } else {
                             $related_ids[] = (int) $related;
                         }
                     }
                 }
             }
             if (!$no_conflict) {
                 pods_no_conflict_off($meta_type);
             }
         }
     }
     if (is_array($related_ids)) {
         $related_ids = array_unique(array_filter($related_ids));
     }
     return $related_ids;
 }
コード例 #2
0
 /**
  * Delete the value from the DB
  *
  * @param int $id
  * @param string $name
  * @param array $options
  * @param array $pod
  *
  * @since 2.3
  */
 public function delete($id = null, $name = null, $options = null, $pod = null)
 {
     if (empty(self::$api)) {
         self::$api = pods_api();
     }
     $simple_tableless_objects = $this->simple_objects();
     // Bidirectional relationship requirement checks
     $related_object = pods_var(self::$type . '_object', $options, '');
     // pod, post_type, taxonomy, etc..
     $related_val = pods_var(self::$type . '_val', $options, $related_object, null, true);
     // pod name, post type name, taxonomy name, etc..
     $related_sister_id = (int) pods_var('sister_id', $options, 0);
     if (!empty($related_sister_id) && !in_array($related_object, $simple_tableless_objects)) {
         $related_pod = self::$api->load_pod(array('name' => $related_val, 'table_info' => false), false);
         if (false !== $related_pod && ('pod' == $related_object || $related_object == $related_pod['type'])) {
             $related_field = false;
             // Ensure sister_id exists on related Pod
             foreach ($related_pod['fields'] as $related_pod_field) {
                 if ('pick' == $related_pod_field['type'] && $related_sister_id == $related_pod_field['id']) {
                     $related_field = $related_pod_field;
                     break;
                 }
             }
             if (!empty($related_field)) {
                 $values = self::$api->lookup_related_items($options['id'], $pod['id'], $id, $options, $pod);
                 if (!empty($values)) {
                     $no_conflict = pods_no_conflict_check($related_pod['type']);
                     if (!$no_conflict) {
                         pods_no_conflict_on($related_pod['type']);
                     }
                     self::$api->delete_relationships($values, $id, $related_pod, $related_field);
                     if (!$no_conflict) {
                         pods_no_conflict_off($related_pod['type']);
                     }
                 }
             }
         }
     }
 }
コード例 #3
0
ファイル: Pods.php プロジェクト: erkmen/wpstartersetup
 /**
  * Return the value for a field.
  *
  * If you are getting a field for output in a theme, most of the time you will want to use display() instead.
  *
  * This function will return arrays for relationship and file fields.
  *
  * @param string|array $name The field name, or an associative array of parameters
  * @param boolean $single (optional) For tableless fields, to return the whole array or the just the first item, or an associative array of parameters
  * @param boolean $raw (optional) Whether to return the raw value, or to run through the field type's display method, or an associative array of parameters
  *
  * @return mixed|null Value returned depends on the field type, null if the field doesn't exist, false if no value returned for tableless fields
  * @since 2.0
  * @link http://pods.io/docs/field/
  */
 public function field($name, $single = null, $raw = false)
 {
     global $sitepress;
     $defaults = array('name' => $name, 'orderby' => null, 'single' => $single, 'params' => null, 'in_form' => false, 'raw' => $raw, 'raw_display' => false, 'display' => false, 'get_meta' => false, 'output' => null, 'deprecated' => false, 'args' => array());
     if (is_array($name) || is_object($name)) {
         $defaults['name'] = null;
         $params = (object) array_merge($defaults, (array) $name);
     } elseif (is_array($single) || is_object($single)) {
         $defaults['single'] = null;
         $params = (object) array_merge($defaults, (array) $single);
     } elseif (is_array($raw) || is_object($raw)) {
         $defaults['raw'] = false;
         $params = (object) array_merge($defaults, (array) $raw);
     } else {
         $params = (object) $defaults;
     }
     if ($params->in_form) {
         $params->output = 'ids';
     } elseif (null === $params->output) {
         $params->output = $this->do_hook('field_related_output_type', 'arrays', $this->row, $params);
     }
     if (in_array($params->output, array('id', 'name', 'object', 'array', 'pod'))) {
         $params->output .= 's';
     }
     // Support old $orderby variable
     if (null !== $params->single && is_string($params->single) && empty($params->orderby)) {
         pods_deprecated('Pods::field', '2.0', 'Use $params[ \'orderby\' ] instead');
         $params->orderby = $params->single;
         $params->single = false;
     }
     if (null !== $params->single) {
         $params->single = (bool) $params->single;
     }
     if (is_array($params->name) || strlen(trim($params->name)) < 1) {
         return null;
     }
     $params->name = trim($params->name);
     $params->full_name = $params->name;
     $value = null;
     if (isset($this->row_override[$params->name])) {
         $value = $this->row_override[$params->name];
     }
     if (false === $this->row()) {
         if (false !== $this->data()) {
             $this->fetch();
         } else {
             return $value;
         }
     }
     if ($this->data->field_id == $params->name) {
         if (isset($this->row[$params->name])) {
             return $this->row[$params->name];
         } elseif (null !== $value) {
             return $value;
         }
         return 0;
     }
     $tableless_field_types = PodsForm::tableless_field_types();
     $simple_tableless_objects = PodsForm::field_method('pick', 'simple_objects');
     $params->traverse = array();
     if (in_array($params->name, array('_link', 'detail_url')) || in_array($params->name, array('permalink', 'the_permalink')) && in_array($this->pod_data['type'], array('post_type', 'media'))) {
         if (0 < strlen($this->detail_page)) {
             $value = get_home_url() . '/' . $this->do_magic_tags($this->detail_page);
         } elseif (in_array($this->pod_data['type'], array('post_type', 'media'))) {
             $value = get_permalink($this->id());
         } elseif ('taxonomy' == $this->pod_data['type']) {
             $value = get_term_link($this->id(), $this->pod_data['name']);
         } elseif ('user' == $this->pod_data['type']) {
             $value = get_author_posts_url($this->id());
         } elseif ('comment' == $this->pod_data['type']) {
             $value = get_comment_link($this->id());
         }
     }
     $field_data = false;
     $field_type = false;
     $first_field = explode('.', $params->name);
     $first_field = $first_field[0];
     if (isset($this->fields[$first_field])) {
         $field_data = $this->fields[$first_field];
         $field_type = 'field';
     } elseif (isset($this->pod_data['object_fields']) && !empty($this->pod_data['object_fields'])) {
         if (isset($this->pod_data['object_fields'][$first_field])) {
             $field_data = $this->pod_data['object_fields'][$first_field];
             $field_type = 'object_field';
         } else {
             foreach ($this->pod_data['object_fields'] as $object_field => $object_field_opt) {
                 if (in_array($first_field, $object_field_opt['alias'])) {
                     if ($first_field == $params->name) {
                         $params->name = $object_field;
                     }
                     $first_field = $object_field;
                     $field_data = $object_field_opt;
                     $field_type = 'object_field';
                     break;
                 }
             }
         }
     }
     // Simple fields have no other output options
     if ('pick' == $field_data['type'] && in_array($field_data['pick_object'], $simple_tableless_objects)) {
         $params->output = 'arrays';
     }
     if (empty($value) && in_array($field_data['type'], $tableless_field_types)) {
         $params->raw = true;
         $value = false;
         if ('arrays' != $params->output && isset($this->row['_' . $params->output . '_' . $params->name])) {
             $value = $this->row['_' . $params->output . '_' . $params->name];
         } elseif ('arrays' == $params->output && isset($this->row[$params->name])) {
             $value = $this->row[$params->name];
         }
         if (false !== $value && !is_array($value) && 'pick' == $field_data['type'] && in_array($field_data['pick_object'], $simple_tableless_objects)) {
             $value = PodsForm::field_method('pick', 'simple_value', $params->name, $value, $field_data, $this->pod_data, $this->id(), true);
         }
     }
     if (empty($value) && isset($this->row[$params->name]) && (!in_array($field_data['type'], $tableless_field_types) || 'arrays' == $params->output)) {
         if (empty($field_data) || in_array($field_data['type'], array('boolean', 'number', 'currency'))) {
             $params->raw = true;
         }
         $value = $this->row[$params->name];
     } elseif (empty($value)) {
         $object_field_found = false;
         if ('object_field' == $field_type) {
             $object_field_found = true;
             if (isset($this->row[$first_field])) {
                 $value = $this->row[$first_field];
             } elseif (in_array($field_data['type'], $tableless_field_types)) {
                 $this->fields[$first_field] = $field_data;
                 $object_field_found = false;
             } else {
                 return null;
             }
         }
         if ('post_type' == $this->pod_data['type'] && !isset($this->fields[$params->name])) {
             if (!isset($this->fields['post_thumbnail']) && ('post_thumbnail' == $params->name || 0 === strpos($params->name, 'post_thumbnail.'))) {
                 $size = 'thumbnail';
                 if (0 === strpos($params->name, 'post_thumbnail.')) {
                     $field_names = explode('.', $params->name);
                     if (isset($field_names[1])) {
                         $size = $field_names[1];
                     }
                 }
                 // Pods will auto-get the thumbnail ID if this isn't an attachment
                 $value = pods_image($this->id(), $size, 0, null, true);
                 $object_field_found = true;
             } elseif (!isset($this->fields['post_thumbnail_url']) && ('post_thumbnail_url' == $params->name || 0 === strpos($params->name, 'post_thumbnail_url.'))) {
                 $size = 'thumbnail';
                 if (0 === strpos($params->name, 'post_thumbnail_url.')) {
                     $field_names = explode('.', $params->name);
                     if (isset($field_names[1])) {
                         $size = $field_names[1];
                     }
                 }
                 // Pods will auto-get the thumbnail ID if this isn't an attachment
                 $value = pods_image_url($this->id(), $size, 0, true);
                 $object_field_found = true;
             } elseif (0 === strpos($params->name, 'image_attachment.')) {
                 $size = 'thumbnail';
                 $image_id = 0;
                 $field_names = explode('.', $params->name);
                 if (isset($field_names[1])) {
                     $image_id = $field_names[1];
                 }
                 if (isset($field_names[2])) {
                     $size = $field_names[2];
                 }
                 if (!empty($image_id)) {
                     $value = pods_image($image_id, $size, 0, null, true);
                     if (!empty($value)) {
                         $object_field_found = true;
                     }
                 }
             } elseif (0 === strpos($params->name, 'image_attachment_url.')) {
                 $size = 'thumbnail';
                 $image_id = 0;
                 $field_names = explode('.', $params->name);
                 if (isset($field_names[1])) {
                     $image_id = $field_names[1];
                 }
                 if (isset($field_names[2])) {
                     $size = $field_names[2];
                 }
                 if (!empty($image_id)) {
                     $value = pods_image_url($image_id, $size, 0, true);
                     if (!empty($value)) {
                         $object_field_found = true;
                     }
                 }
             }
         } elseif ('user' == $this->pod_data['type'] && !isset($this->fields[$params->name])) {
             if (!isset($this->fields['avatar']) && ('avatar' == $params->name || 0 === strpos($params->name, 'avatar.'))) {
                 $size = null;
                 if (0 === strpos($params->name, 'avatar.')) {
                     $field_names = explode('.', $params->name);
                     if (isset($field_names[1])) {
                         $size = (int) $field_names[1];
                     }
                 }
                 if (!empty($size)) {
                     $value = get_avatar($this->id(), $size);
                 } else {
                     $value = get_avatar($this->id());
                 }
                 $object_field_found = true;
             }
         } elseif (0 === strpos($params->name, 'image_attachment.')) {
             $size = 'thumbnail';
             $image_id = 0;
             $field_names = explode('.', $params->name);
             if (isset($field_names[1])) {
                 $image_id = $field_names[1];
             }
             if (isset($field_names[2])) {
                 $size = $field_names[2];
             }
             if (!empty($image_id)) {
                 $value = pods_image($image_id, $size, 0, null, true);
                 if (!empty($value)) {
                     $object_field_found = true;
                 }
             }
         } elseif (0 === strpos($params->name, 'image_attachment_url.')) {
             $size = 'thumbnail';
             $image_id = 0;
             $field_names = explode('.', $params->name);
             if (isset($field_names[1])) {
                 $image_id = $field_names[1];
             }
             if (isset($field_names[2])) {
                 $size = $field_names[2];
             }
             if (!empty($image_id)) {
                 $value = pods_image_url($image_id, $size, 0, true);
                 if (!empty($value)) {
                     $object_field_found = true;
                 }
             }
         }
         if (false === $object_field_found) {
             $params->traverse = array($params->name);
             if (false !== strpos($params->name, '.')) {
                 $params->traverse = explode('.', $params->name);
                 $params->name = $params->traverse[0];
             }
             if (isset($this->fields[$params->name]) && isset($this->fields[$params->name]['type'])) {
                 $v = $this->do_hook('field_' . $this->fields[$params->name]['type'], null, $this->fields[$params->name], $this->row, $params);
                 if (null !== $v) {
                     return $v;
                 }
             }
             $simple = false;
             $simple_data = array();
             if (isset($this->fields[$params->name])) {
                 if ('meta' == $this->pod_data['storage']) {
                     if (!in_array($this->fields[$params->name]['type'], $tableless_field_types)) {
                         $simple = true;
                     }
                 }
                 if (in_array($this->fields[$params->name]['type'], $tableless_field_types)) {
                     $params->raw = true;
                     if ('pick' == $this->fields[$params->name]['type'] && in_array($this->fields[$params->name]['pick_object'], $simple_tableless_objects)) {
                         $simple = true;
                         $params->single = true;
                     }
                 } elseif (in_array($this->fields[$params->name]['type'], array('boolean', 'number', 'currency'))) {
                     $params->raw = true;
                 }
             }
             if (!isset($this->fields[$params->name]) || !in_array($this->fields[$params->name]['type'], $tableless_field_types) || $simple) {
                 if (null === $params->single) {
                     if (isset($this->fields[$params->name]) && !in_array($this->fields[$params->name]['type'], $tableless_field_types)) {
                         $params->single = true;
                     } else {
                         $params->single = false;
                     }
                 }
                 $no_conflict = pods_no_conflict_check($this->pod_data['type']);
                 if (!$no_conflict) {
                     pods_no_conflict_on($this->pod_data['type']);
                 }
                 if (in_array($this->pod_data['type'], array('post_type', 'media'))) {
                     $id = $this->id();
                     // Support for WPML 'duplicated' translation handling
                     if (is_object($sitepress) && $sitepress->is_translated_post_type($this->pod_data['name'])) {
                         $master_post_id = (int) get_post_meta($id, '_icl_lang_duplicate_of', true);
                         if (0 < $master_post_id) {
                             $id = $master_post_id;
                         }
                     }
                     $value = get_post_meta($id, $params->name, $params->single);
                     $single_multi = pods_var($this->fields[$params->name]['type'] . '_format_type', $this->fields[$params->name]['options'], 'single');
                     if ($simple && !is_array($value) && 'single' != $single_multi) {
                         $value = get_post_meta($id, $params->name);
                     }
                 } elseif (in_array($this->pod_data['type'], array('user', 'comment'))) {
                     $value = get_metadata($this->pod_data['type'], $this->id(), $params->name, $params->single);
                     $single_multi = pods_var($this->fields[$params->name]['type'] . '_format_type', $this->fields[$params->name]['options'], 'single');
                     if ($simple && !is_array($value) && 'single' != $single_multi) {
                         $value = get_metadata($this->pod_data['type'], $this->id(), $params->name);
                     }
                 } elseif ('settings' == $this->pod_data['type']) {
                     $value = get_option($this->pod_data['name'] . '_' . $params->name, null);
                 }
                 // Handle Simple Relationships
                 if ($simple) {
                     if (null === $params->single) {
                         $params->single = false;
                     }
                     $value = PodsForm::field_method('pick', 'simple_value', $params->name, $value, $this->fields[$params->name], $this->pod_data, $this->id(), true);
                 }
                 if (!$no_conflict) {
                     pods_no_conflict_off($this->pod_data['type']);
                 }
             } else {
                 // Dot-traversal
                 $pod = $this->pod;
                 $ids = array($this->id());
                 $all_fields = array();
                 $lookup = $params->traverse;
                 if (!empty($lookup)) {
                     unset($lookup[0]);
                     foreach ($this->fields as $field) {
                         if (!in_array($field['type'], $tableless_field_types) || in_array($field['name'], $lookup)) {
                             continue;
                         }
                         $lookup[] = $field['name'];
                     }
                 }
                 // Get fields matching traversal names
                 if (!empty($lookup)) {
                     $fields = $this->api->load_fields(array('name' => $lookup, 'type' => $tableless_field_types, 'object_fields' => true));
                     if (!empty($fields)) {
                         foreach ($fields as $field) {
                             if (!empty($field)) {
                                 if (!isset($all_fields[$field['pod']])) {
                                     $all_fields[$field['pod']] = array();
                                 }
                                 $all_fields[$field['pod']][$field['name']] = $field;
                             }
                         }
                     }
                     if (isset($this->pod_data['object_fields']) && !empty($this->pod_data['object_fields'])) {
                         foreach ($this->pod_data['object_fields'] as $object_field => $object_field_opt) {
                             if (in_array($object_field_opt['type'], $tableless_field_types)) {
                                 $all_fields[$this->pod][$object_field] = $object_field_opt;
                             }
                         }
                     }
                 }
                 $last_type = $last_object = $last_pick_val = '';
                 $last_options = array();
                 $single_multi = pods_var($this->fields[$params->name]['type'] . '_format_type', $this->fields[$params->name]['options'], 'single');
                 if ('multi' == $single_multi) {
                     $limit = (int) pods_var($this->fields[$params->name]['type'] . '_limit', $this->fields[$params->name]['options'], 0);
                 } else {
                     $limit = 1;
                 }
                 $last_limit = 0;
                 // Loop through each traversal level
                 foreach ($params->traverse as $key => $field) {
                     $last_loop = false;
                     if (count($params->traverse) <= $key + 1) {
                         $last_loop = true;
                     }
                     $field_exists = isset($all_fields[$pod][$field]);
                     $simple = false;
                     $last_options = array();
                     if ($field_exists && 'pick' == $all_fields[$pod][$field]['type'] && in_array($all_fields[$pod][$field]['pick_object'], $simple_tableless_objects)) {
                         $simple = true;
                         $last_options = $all_fields[$pod][$field];
                     }
                     // Tableless handler
                     if ($field_exists && (!in_array($all_fields[$pod][$field]['type'], array('pick', 'taxonomy')) || !$simple)) {
                         $type = $all_fields[$pod][$field]['type'];
                         $pick_object = $all_fields[$pod][$field]['pick_object'];
                         $pick_val = $all_fields[$pod][$field]['pick_val'];
                         if ('table' == $pick_object) {
                             $pick_val = pods_var('pick_table', $all_fields[$pod][$field]['options'], $pick_val, null, true);
                         } elseif ('__current__' == $pick_val) {
                             $pick_val = $pod;
                         }
                         $last_limit = 0;
                         if (in_array($type, $tableless_field_types)) {
                             $single_multi = pods_var("{$type}_format_type", $all_fields[$pod][$field]['options'], 'single');
                             if ('multi' == $single_multi) {
                                 $last_limit = (int) pods_var("{$type}_limit", $all_fields[$pod][$field]['options'], 0);
                             } else {
                                 $last_limit = 1;
                             }
                         }
                         $last_type = $type;
                         $last_object = $pick_object;
                         $last_pick_val = $pick_val;
                         $last_options = $all_fields[$pod][$field];
                         // Temporary hack until there's some better handling here
                         $last_limit = $last_limit * count($ids);
                         // Get related IDs
                         if (!isset($all_fields[$pod][$field]['pod_id'])) {
                             $all_fields[$pod][$field]['pod_id'] = 0;
                         }
                         if (isset($all_fields[$pod][$field]['id'])) {
                             $ids = $this->api->lookup_related_items($all_fields[$pod][$field]['id'], $all_fields[$pod][$field]['pod_id'], $ids, $all_fields[$pod][$field]);
                         }
                         // No items found
                         if (empty($ids)) {
                             return false;
                         } elseif (0 < $last_limit) {
                             $ids = array_slice($ids, 0, $last_limit);
                         }
                         // Get $pod if related to a Pod
                         if (!empty($pick_object) && !empty($pick_val)) {
                             if ('pod' == $pick_object) {
                                 $pod = $pick_val;
                             } else {
                                 $check = $this->api->get_table_info($pick_object, $pick_val);
                                 if (!empty($check) && !empty($check['pod'])) {
                                     $pod = $check['pod']['name'];
                                 }
                             }
                         }
                     } else {
                         // Invalid field
                         if (0 == $key) {
                             return false;
                         }
                         $last_loop = true;
                     }
                     if ($last_loop) {
                         $object_type = $last_object;
                         $object = $last_pick_val;
                         if (in_array($last_type, PodsForm::file_field_types())) {
                             $object_type = 'media';
                             $object = 'attachment';
                         }
                         $data = array();
                         $table = $this->api->get_table_info($object_type, $object, null, null, $last_options);
                         $join = $where = array();
                         if (!empty($table['join'])) {
                             $join = (array) $table['join'];
                         }
                         if (!empty($table['where']) || !empty($ids)) {
                             foreach ($ids as $id) {
                                 $where[$id] = '`t`.`' . $table['field_id'] . '` = ' . (int) $id;
                             }
                             if (!empty($where)) {
                                 $where = array(implode(' OR ', $where));
                             }
                             if (!empty($table['where'])) {
                                 $where = array_merge($where, array_values((array) $table['where']));
                             }
                         }
                         /**
                          * @var $related_obj Pods
                          */
                         $related_obj = false;
                         if ('pod' == $object_type) {
                             $related_obj = pods($object, null, false);
                         } elseif (isset($table['pod']) && !empty($table['pod'])) {
                             $related_obj = pods($table['pod']['name'], null, false);
                         }
                         if (!empty($table['table']) || !empty($related_obj)) {
                             $sql = array('select' => '*, `t`.`' . $table['field_id'] . '` AS `pod_item_id`', 'table' => $table['table'], 'join' => $join, 'where' => $where, 'orderby' => $params->orderby, 'pagination' => false, 'search' => false, 'limit' => -1);
                             // Output types
                             if (in_array($params->output, array('ids', 'objects', 'pods'))) {
                                 $sql['select'] = '`t`.`' . $table['field_id'] . '` AS `pod_item_id`';
                             } elseif ('names' == $params->output && !empty($table['field_index'])) {
                                 $sql['select'] = '`t`.`' . $table['field_index'] . '` AS `pod_item_index`, `t`.`' . $table['field_id'] . '` AS `pod_item_id`';
                             }
                             if (is_array($params->params) && !empty($params->params)) {
                                 $where = $sql['where'];
                                 $sql = array_merge($sql, $params->params);
                                 if (isset($params->params['where'])) {
                                     $sql['where'] = array_merge((array) $where, (array) $params->params['where']);
                                 }
                             }
                             if (empty($related_obj)) {
                                 if (!is_object($this->alt_data)) {
                                     $this->alt_data = pods_data(null, 0, true, true);
                                 }
                                 $item_data = $this->alt_data->select($sql);
                             } else {
                                 $item_data = $related_obj->find($sql)->data();
                             }
                             $items = array();
                             if (!empty($item_data)) {
                                 foreach ($item_data as $item) {
                                     if (is_array($item)) {
                                         $item = (object) $item;
                                     }
                                     if (empty($item->pod_item_id)) {
                                         continue;
                                     }
                                     // Bypass pass field
                                     if (isset($item->user_pass)) {
                                         unset($item->user_pass);
                                     }
                                     // Get Item ID
                                     $item_id = $item->pod_item_id;
                                     // Cleanup
                                     unset($item->pod_item_id);
                                     // Output types
                                     if ('ids' == $params->output) {
                                         $item = (int) $item_id;
                                     } elseif ('names' == $params->output && !empty($table['field_index'])) {
                                         $item = $item->pod_item_index;
                                     } elseif ('objects' == $params->output) {
                                         if (in_array($object_type, array('post_type', 'media'))) {
                                             $item = get_post($item_id);
                                         } elseif ('taxonomy' == $object_type) {
                                             $item = get_term($item_id, $object);
                                         } elseif ('user' == $object_type) {
                                             $item = get_userdata($item_id);
                                             if (!empty($item)) {
                                                 // Get other vars
                                                 $roles = $item->roles;
                                                 $caps = $item->caps;
                                                 $allcaps = $item->allcaps;
                                                 $item = $item->data;
                                                 // Set other vars
                                                 $item->roles = $roles;
                                                 $item->caps = $caps;
                                                 $item->allcaps = $allcaps;
                                                 unset($item->user_pass);
                                             }
                                         } elseif ('comment' == $object_type) {
                                             $item = get_comment($item_id);
                                         } else {
                                             $item = (object) $item;
                                         }
                                     } elseif ('pods' == $params->output) {
                                         $item = pods($object, (int) $item_id);
                                     } else {
                                         // arrays
                                         $item = get_object_vars((object) $item);
                                     }
                                     // Pass item data into $data
                                     $items[$item_id] = $item;
                                 }
                                 // Cleanup
                                 unset($item_data);
                                 // Return all of the data in the order expected
                                 if (empty($params->orderby)) {
                                     foreach ($ids as $id) {
                                         if (isset($items[$id])) {
                                             $data[$id] = $items[$id];
                                         }
                                     }
                                 }
                             }
                         }
                         if (in_array($last_type, $tableless_field_types) || in_array($last_type, array('boolean', 'number', 'currency'))) {
                             $params->raw = true;
                         }
                         if (empty($data)) {
                             $value = false;
                         } else {
                             $object_type = $table['type'];
                             if (in_array($table['type'], array('post_type', 'attachment', 'media'))) {
                                 $object_type = 'post';
                             }
                             $no_conflict = true;
                             if (in_array($object_type, array('post', 'user', 'comment', 'settings'))) {
                                 $no_conflict = pods_no_conflict_check($object_type);
                                 if (!$no_conflict) {
                                     pods_no_conflict_on($object_type);
                                 }
                             }
                             // Return entire array
                             if (false !== $field_exists && (in_array($last_type, $tableless_field_types) && !$simple)) {
                                 $value = $data;
                             } else {
                                 $value = array();
                                 foreach ($data as $item_id => $item) {
                                     // $field is 123x123, needs to be _src.123x123
                                     $full_field = implode('.', array_splice($params->traverse, $key));
                                     if ((false !== strpos($full_field, '_src') || 'guid' == $field) && (in_array($table['type'], array('attachment', 'media')) || in_array($last_type, PodsForm::file_field_types())) || (in_array($field, array('_link', 'detail_url')) || in_array($field, array('permalink', 'the_permalink')) && in_array($last_type, PodsForm::file_field_types()))) {
                                         $size = 'full';
                                         if (false !== strpos($full_field, '_src.') && 5 < strlen($full_field)) {
                                             $size = substr($full_field, 5);
                                         } elseif (false !== strpos($full_field, '_src_relative.') && 14 < strlen($full_field)) {
                                             $size = substr($full_field, 14);
                                         } elseif (false !== strpos($full_field, '_src_schemeless.') && 16 < strlen($full_field)) {
                                             $size = substr($full_field, 16);
                                         }
                                         $value_url = pods_image_url($item_id, $size);
                                         if (false !== strpos($full_field, '_src_relative') && !empty($value_url)) {
                                             $value_url_parsed = parse_url($value_url);
                                             $value_url = $value_url_parsed['path'];
                                         } elseif (false !== strpos($full_field, '_src_schemeless') && !empty($value_url)) {
                                             $value_url = str_replace(array('http://', 'https://'), '//', $value_url);
                                         }
                                         if (!empty($value_url)) {
                                             $value[] = $value_url;
                                         }
                                         $params->raw_display = true;
                                     } elseif (false !== strpos($full_field, '_img') && (in_array($table['type'], array('attachment', 'media')) || in_array($last_type, PodsForm::file_field_types()))) {
                                         $size = 'full';
                                         if (false !== strpos($full_field, '_img.') && 5 < strlen($full_field)) {
                                             $size = substr($full_field, 5);
                                         }
                                         $value[] = pods_image($item_id, $size);
                                         $params->raw_display = true;
                                     } elseif (in_array($field, array('_link', 'detail_url')) || in_array($field, array('permalink', 'the_permalink')) && 'post' == $object_type) {
                                         if ('pod' == $object_type) {
                                             if (is_object($related_obj)) {
                                                 $related_obj->fetch($item_id);
                                                 $value[] = $related_obj->field('detail_url');
                                             } else {
                                                 $value[] = '';
                                             }
                                         } elseif ('post' == $object_type) {
                                             $value[] = get_permalink($item_id);
                                         } elseif ('taxonomy' == $object_type) {
                                             $value[] = get_term_link($item_id, $object);
                                         } elseif ('user' == $object_type) {
                                             $value[] = get_author_posts_url($item_id);
                                         } elseif ('comment' == $object_type) {
                                             $value[] = get_comment_link($item_id);
                                         } else {
                                             $value[] = '';
                                         }
                                         $params->raw_display = true;
                                     } elseif (is_array($item) && isset($item[$field])) {
                                         if ($table['field_id'] == $field) {
                                             $value[] = (int) $item[$field];
                                         } else {
                                             $value[] = $item[$field];
                                         }
                                     } elseif (is_object($item) && isset($item->{$field})) {
                                         if ($table['field_id'] == $field) {
                                             $value[] = (int) $item->{$field};
                                         } else {
                                             $value[] = $item->{$field};
                                         }
                                     } elseif ('post' == $object_type) {
                                         // Support for WPML 'duplicated' translation handling
                                         if (is_object($sitepress) && $sitepress->is_translated_post_type($object)) {
                                             $master_post_id = (int) get_post_meta($item_id, '_icl_lang_duplicate_of', true);
                                             if (0 < $master_post_id) {
                                                 $item_id = $master_post_id;
                                             }
                                         }
                                         $value[] = get_post_meta($item_id, $field, true);
                                     } elseif (in_array($object_type, array('post', 'user', 'comment'))) {
                                         $value[] = get_metadata($object_type, $item_id, $field, true);
                                     } elseif ('settings' == $object_type) {
                                         $value[] = get_option($object . '_' . $field);
                                     }
                                 }
                             }
                             if (in_array($object_type, array('post', 'user', 'comment', 'settings')) && !$no_conflict) {
                                 pods_no_conflict_off($object_type);
                             }
                             // Handle Simple Relationships
                             if ($simple) {
                                 if (null === $params->single) {
                                     $params->single = false;
                                 }
                                 $value = PodsForm::field_method('pick', 'simple_value', $field, $value, $last_options, $all_fields[$pod], 0, true);
                             } elseif (false === $params->in_form && !empty($value)) {
                                 $value = array_values($value);
                             }
                             // Return a single column value
                             if (false === $params->in_form && 1 == $limit && !empty($value) && is_array($value) && 1 == count($value)) {
                                 $value = current($value);
                             }
                         }
                         break;
                     }
                 }
             }
         }
     }
     if (!empty($params->traverse) && 1 < count($params->traverse)) {
         $field_names = implode('.', $params->traverse);
         $this->row[$field_names] = $value;
     } elseif ('arrays' != $params->output && in_array($field_data['type'], $tableless_field_types)) {
         $this->row['_' . $params->output . '_' . $params->full_name] = $value;
     } elseif ('arrays' == $params->output || !in_array($field_data['type'], $tableless_field_types)) {
         $this->row[$params->full_name] = $value;
     }
     if ($params->single && is_array($value) && 1 == count($value)) {
         $value = current($value);
     }
     // @todo Expand this into traversed fields too
     if (!empty($field_data) && ($params->display || !$params->raw) && !$params->in_form && !$params->raw_display) {
         if ($params->display || ($params->get_meta || $params->deprecated) && !in_array($field_data['type'], $tableless_field_types)) {
             $field_data['options'] = pods_var_raw('options', $field_data, array(), null, true);
             $post_temp = false;
             if ('post_type' == pods_var('type', $this->pod_data) && 0 < $this->id() && (!isset($GLOBALS['post']) || empty($GLOBALS['post']))) {
                 global $post_ID, $post;
                 $post_temp = true;
                 $old_post = $GLOBALS['post'];
                 $old_ID = $GLOBALS['post_ID'];
                 $post = get_post($this->id());
                 $post_ID = $this->id();
             }
             $filter = pods_var_raw('display_filter', $field_data['options']);
             if (0 < strlen($filter)) {
                 $args = array($filter, $value);
                 $filter_args = pods_var_raw('display_filter_args', $field_data['options']);
                 if (!empty($filter_args)) {
                     $args = array_merge($args, compact($filter_args));
                 }
                 $value = call_user_func_array('apply_filters', $args);
             } elseif (1 == pods_var('display_process', $field_data['options'], 1)) {
                 $value = PodsForm::display($field_data['type'], $value, $params->name, array_merge($field_data, $field_data['options']), $this->pod_data, $this->id());
             }
             if ($post_temp) {
                 $post = $old_post;
                 $post_ID = $old_ID;
             }
         } else {
             $value = PodsForm::value($field_data['type'], $value, $params->name, array_merge($field_data, $field_data['options']), $this->pod_data, $this->id());
         }
     }
     $value = $this->do_hook('field', $value, $this->row, $params);
     return $value;
 }
コード例 #4
0
ファイル: PodsMeta.php プロジェクト: centaurustech/chipin
 /**
  * @param $object_type
  * @param null $_null
  * @param int $object_id
  * @param string $meta_key
  * @param bool $single
  *
  * @return array|bool|int|mixed|null|string|void
  */
 public function get_meta($object_type, $_null = null, $object_id = 0, $meta_key = '', $single = false)
 {
     $meta_type = $object_type;
     if ('post_type' == $meta_type) {
         $meta_type = 'post';
     }
     if (empty($meta_key)) {
         $single = false;
     }
     $object = $this->get_object($object_type, $object_id);
     if (empty($object_id) || empty($object)) {
         return $_null;
     }
     $no_conflict = pods_no_conflict_check($meta_type);
     if (!$no_conflict) {
         pods_no_conflict_on($meta_type);
     }
     $meta_cache = array();
     if (!$single && isset($GLOBALS['wp_object_cache']) && is_object($GLOBALS['wp_object_cache'])) {
         $meta_cache = wp_cache_get($object_id, 'pods_' . $meta_type . '_meta');
         if (empty($meta_cache)) {
             $meta_cache = wp_cache_get($object_id, $meta_type . '_meta');
             if (empty($meta_cache)) {
                 $meta_cache = update_meta_cache($meta_type, array($object_id));
                 $meta_cache = $meta_cache[$object_id];
             }
         }
     }
     if (empty($meta_cache) || !is_array($meta_cache)) {
         $meta_cache = array();
     }
     $pod = pods($object['name']);
     $meta_keys = array($meta_key);
     if (empty($meta_key)) {
         $meta_keys = array_keys($meta_cache);
     }
     $key_found = false;
     foreach ($meta_keys as $meta_k) {
         if (!empty($pod)) {
             if (isset($pod->fields[$meta_k])) {
                 if (empty($pod->id)) {
                     $pod->fetch($object_id);
                     $pod->id = $object_id;
                 }
                 $key_found = true;
                 $meta_cache[$meta_k] = $pod->field(array('name' => $meta_k, 'single' => $single, 'get_meta' => true));
                 if (!is_array($meta_cache[$meta_k]) || !isset($meta_cache[$meta_k][0])) {
                     if (empty($meta_cache[$meta_k]) && !is_array($meta_cache[$meta_k]) && $single) {
                         $meta_cache[$meta_k] = array();
                     } else {
                         $meta_cache[$meta_k] = array($meta_cache[$meta_k]);
                     }
                 }
                 if (in_array($pod->fields[$meta_k]['type'], PodsForm::tableless_field_types()) && isset($meta_cache['_pods_' . $meta_k])) {
                     unset($meta_cache['_pods_' . $meta_k]);
                 }
             } elseif (false !== strpos($meta_k, '.')) {
                 if (empty($pod->id)) {
                     $pod->fetch($object_id);
                     $pod->id = $object_id;
                 }
                 $key_found = true;
                 $first = current(explode('.', $meta_k));
                 if (isset($pod->fields[$first])) {
                     $meta_cache[$meta_k] = $pod->field(array('name' => $meta_k, 'single' => $single, 'get_meta' => true));
                     if ((!is_array($meta_cache[$meta_k]) || !isset($meta_cache[$meta_k][0])) && $single) {
                         if (empty($meta_cache[$meta_k]) && !is_array($meta_cache[$meta_k]) && $single) {
                             $meta_cache[$meta_k] = array();
                         } else {
                             $meta_cache[$meta_k] = array($meta_cache[$meta_k]);
                         }
                     }
                     if (in_array($pod->fields[$first]['type'], PodsForm::tableless_field_types()) && isset($meta_cache['_pods_' . $first])) {
                         unset($meta_cache['_pods_' . $first]);
                     }
                 }
             }
         }
     }
     if (!$no_conflict) {
         pods_no_conflict_off($meta_type);
     }
     unset($pod);
     // memory clear
     if (!$key_found) {
         return $_null;
     }
     if (!$single && isset($GLOBALS['wp_object_cache']) && is_object($GLOBALS['wp_object_cache'])) {
         wp_cache_set($object_id, $meta_cache, 'pods_' . $meta_type . '_meta');
     }
     if (empty($meta_key)) {
         return $meta_cache;
     } elseif (isset($meta_cache[$meta_key])) {
         $value = $meta_cache[$meta_key];
     } else {
         $value = '';
     }
     if (!is_numeric($value) && empty($value)) {
         if ($single) {
             $value = '';
         } else {
             $value = array();
         }
     } elseif (!is_array($value)) {
         $value = array($value);
     }
     return $value;
 }
コード例 #5
0
     if (!empty($wpdb->collate)) {
         $charset_collate .= " COLLATE {$wpdb->collate}";
     }
     if ('DEFAULT CHARSET utf8' != $charset_collate) {
         $sql = str_replace('DEFAULT CHARSET utf8', $charset_collate, $sql);
     }
     $sql = explode(";\n", str_replace(array("\r", 'wp_'), array("\n", $wpdb->prefix), $sql));
     for ($i = 0, $z = count($sql); $i < $z; $i++) {
         $query = trim($sql[$i]);
         if (empty($query)) {
             continue;
         }
         pods_query($query, 'Cannot setup SQL tables');
     }
 }
 pods_no_conflict_on('post');
 // convert field types based on options set
 $fields = $wpdb->get_results("\n            SELECT `p`.`ID`\n            FROM `{$wpdb->posts}` AS `p`\n            LEFT JOIN `{$wpdb->postmeta}` AS `pm` ON `pm`.`post_id` = `p`.`ID`\n            WHERE\n                `p`.`post_type` = '_pods_field'\n                AND `pm`.`meta_key` = 'type'\n                AND `pm`.`meta_value` = 'date'\n        ");
 if (!empty($fields)) {
     foreach ($fields as $field) {
         $new_type = get_post_meta($field->ID, 'date_format_type', true);
         if ('datetime' == $new_type) {
             $new = array('date_format' => 'datetime_format', 'date_time_type' => 'datetime_time_type', 'date_time_format' => 'datetime_time_format', 'date_html5' => 'datetime_html5');
             update_post_meta($field->ID, 'type', $new_type);
         } elseif ('time' == $new_type) {
             $new = array('date_time_type' => 'time_type', 'date_time_format' => 'time_format', 'date_html5' => 'time_html5');
             update_post_meta($field->ID, 'type', $new_type);
         }
     }
 }
 $fields = $wpdb->get_results("\n            SELECT `p`.`ID`\n            FROM `{$wpdb->posts}` AS `p`\n            LEFT JOIN `{$wpdb->postmeta}` AS `pm` ON `pm`.`post_id` = `p`.`ID`\n            WHERE\n                `p`.`post_type` = '_pods_field'\n                AND `pm`.`meta_key` = 'type'\n                AND `pm`.`meta_value` = 'number'\n        ");