/** * @param $object_type * @param null $_null * @param int $object_id * @param string $meta_key * @param string $meta_value * @param bool $delete_all * * @return null */ public function delete_meta($object_type, $_null = null, $object_id = 0, $meta_key = '', $meta_value = '', $delete_all = false) { if (pods_tableless()) { return $_null; } $object = $this->get_object($object_type, $object_id); if (empty($object_id) || empty($object) || !isset($object['fields'][$meta_key])) { return $_null; } // @todo handle $delete_all (delete the field values from all pod items) if (!empty($meta_value) && in_array($object['fields'][$meta_key]['type'], PodsForm::tableless_field_types())) { if (!is_object(self::$current_field_pod) || self::$current_field_pod->pod != $object['name']) { self::$current_field_pod = pods($object['name'], $object_id); } elseif (self::$current_field_pod->id() != $object_id) { self::$current_field_pod->fetch($object_id); } $pod = self::$current_field_pod; $pod->remove_from($meta_key, $meta_value); } else { if (!is_object(self::$current_field_pod) || self::$current_field_pod->pod != $object['name']) { self::$current_field_pod = pods($object['name']); } $pod = self::$current_field_pod; $pod->save(array($meta_key => null), null, $object_id); } return $_null; }
/** * Get an offset if already set or traverse Pod and then set plus reutrn. * * @since 0.1.0 * * @param mixed $offset Offset to get * * @return mixed */ public function offsetGet($offset) { if ($this->offsetExists($offset)) { return parent::offsetGet($offset); } else { if ('id' == $offset || 'ID' == $offset) { $_value = $this->pod->id(); } else { $_value = $this->pod->field($offset); } if ($_value) { parent::offsetSet($offset, $_value); return $_value; } } }
/** * @param $code * @param bool|array $row * * @return mixed */ public function do_template($code, $row = false) { if (is_object($this->pod) && 1 == 0 && 0 < $this->pod->id()) { return $this->pod->do_magic_tags($code); } else { if (false !== $row) { $this->temp_row = $this->row; $this->row = $row; } $code = preg_replace_callback("/({@(.*?)})/m", array($this, "do_magic_tags"), $code); if (false !== $row) { $this->row = $this->temp_row; unset($this->temp_row); } } return $code; }
/** * Export a pod item by depth level * * @param Pods $pod Pods object * @param array $fields Fields to export * @param int $depth Depth limit * @param boolean $flatten Whether to flatten arrays for display * @param int $current_depth Current depth level * * @return array Data array * * @since 2.3 */ private function export_pod_item_level($pod, $fields, $depth, $flatten = false, $current_depth = 1) { $tableless_field_types = PodsForm::tableless_field_types(); $simple_tableless_objects = PodsForm::simple_tableless_objects(); $object_fields = (array) pods_var_raw('object_fields', $pod->pod_data, array(), null, true); $export_fields = array(); foreach ($fields as $k => $field) { if (!is_array($field)) { $field = array('id' => 0, 'name' => $field); } if (isset($pod->fields[$field['name']])) { $field = $pod->fields[$field['name']]; $field['lookup_name'] = $field['name']; if (in_array($field['type'], $tableless_field_types) && !in_array(pods_var('pick_object', $field), $simple_tableless_objects)) { if ('pick' == $field['type']) { if (empty($field['table_info'])) { $field['table_info'] = $this->get_table_info(pods_var_raw('pick_object', $field), pods_var_raw('pick_val', $field), null, null, $field); } if (!empty($field['table_info'])) { $field['lookup_name'] .= '.' . $field['table_info']['field_id']; } } elseif (in_array($field['type'], PodsForm::file_field_types())) { $field['lookup_name'] .= '.guid'; } } $export_fields[$field['name']] = $field; } elseif (isset($object_fields[$field['name']])) { $field = $object_fields[$field['name']]; $field['lookup_name'] = $field['name']; $export_fields[$field['name']] = $field; } elseif ($field['name'] == $pod->pod_data['field_id']) { $field['type'] = 'number'; $field['lookup_name'] = $field['name']; $export_fields[$field['name']] = $field; } } $data = array(); foreach ($export_fields as $field) { // Return IDs (or guid for files) if only one level deep if (1 == $depth) { $data[$field['name']] = $pod->field(array('name' => $field['lookup_name'], 'output' => 'arrays')); } elseif ((-1 == $depth || $current_depth < $depth) && 'pick' == $field['type'] && !in_array(pods_var('pick_object', $field), $simple_tableless_objects)) { $related_data = array(); $related_ids = $pod->field(array('name' => $field['name'], 'output' => 'ids')); if (!empty($related_ids)) { $related_ids = (array) $related_ids; $pick_object = pods_var_raw('pick_object', $field); $related_pod = pods(pods_var_raw('pick_val', $field), null, false); // If this isn't a Pod, return data exactly as Pods does normally if (empty($related_pod) || 'pod' != $pick_object && $pick_object != $related_pod->pod_data['type'] || $related_pod->pod == $pod->pod) { $related_data = $pod->field(array('name' => $field['name'], 'output' => 'arrays')); } else { $related_object_fields = (array) pods_var_raw('object_fields', $related_pod->pod_data, array(), null, true); $related_fields = array_merge($related_pod->fields, $related_object_fields); foreach ($related_ids as $related_id) { if ($related_pod->fetch($related_id)) { $related_item = $this->export_pod_item_level($related_pod, $related_fields, $depth, $flatten, $current_depth + 1); $related_data[$related_id] = $this->do_hook('export_pod_item_level', $related_item, $related_pod->pod, $related_pod->id(), $related_pod, $related_fields, $depth, $flatten, $current_depth + 1); } } if ($flatten && !empty($related_data)) { $related_data = pods_serial_comma(array_values($related_data), array('and' => '', 'field_index' => $related_pod->pod_data['field_index'])); } } } $data[$field['name']] = $related_data; } else { $data[$field['name']] = $pod->field(array('name' => $field['name'], 'output' => 'arrays')); } if ($flatten && is_array($data[$field['name']])) { $data[$field['name']] = pods_serial_comma($data[$field['name']], array('field' => $field['name'], 'fields' => $export_fields, 'and' => '')); } } $data['id'] = (int) $pod->id(); return $data; }