/** * Do shortcode * @param array $args Attributes from shortcode * @return string Field content */ function jcf_do_shortcode($args) { extract(shortcode_atts(array('field' => '', 'post_id' => ''), $args)); //init registered fields jcf_shortcode_init_fields(); //get post id $post_id = !empty($args['post_id']) ? $args['post_id'] : get_the_ID(); //get post type $post_type = get_post_type($post_id); //set post type for fields jcf_set_post_type($post_type); //get field settings $field_settings = jcf_field_settings_get(); //get field id foreach ($field_settings as $key_field => $field) { if (strcmp($args['field'], $field['slug']) === 0) { $field_id = $key_field; break; } } // init field object and do shortcode if ($field_id) { $field_obj = jcf_init_field_object($field_id); $field_obj->set_post_ID($post_id); unset($args['field']); return $field_obj->do_shortcode($args); } else { return false; } }
/** * Add field from import * @param string $field_id Field id * @param string $fieldset_id Fieldset id * @param array $params Attributes of field * @return array Attributes of field */ function jcf_import_add_field($field_id, $fieldset_id, $params) { $field_obj = jcf_init_field_object($field_id, $fieldset_id); if ($field_obj->slug == $params['slug']) { $resp = $field_obj->do_update($params); } else { $field_id = preg_replace('/\\-([0-9]+)/', '', $field_id); $field_obj = jcf_init_field_object($field_id, $fieldset_id); $resp = $field_obj->do_update($params); } return $resp; }
/** * function to save field instance to the database * call $this->update inside * @param array $params for update field */ public function do_update($params = array()) { $input = !empty($params) ? $params : $_POST['field-' . $this->id_base][$this->number]; // remove all slashed from values foreach ($input as $var => $value) { if (is_string($value)) { $input[$var] = stripslashes($value); } } // validate: title should be always there if (empty($input['title'])) { return array('status' => '0', 'error' => __('Title field is required.', JCF_TEXTDOMAIN)); } // get values from real class: $instance = $this->update($input, $this->instance); $instance['title'] = strip_tags($instance['title']); $instance['slug'] = strip_tags($input['slug']); $instance['enabled'] = (int) @$input['enabled']; // starting from vers. 1.4 all new fields should be marked with version of the plugin if ($this->is_new) { $instance['_version'] = JCF_VERSION; } // for old records: set 1.34 - last version without versioning the fields if (empty($instance['_version'])) { $instance['_version'] = 1.34; } // new from version 1.4: validation/normalization $this->validate_instance($instance); // check for errors // IMPORTANT: experimental function if (!empty($this->field_errors)) { $errors = implode('\\n', $this->field_errors); return array('status' => '0', 'error' => $errors); } if ($this->is_new) { $this->number = jcf_get_fields_index($this->id_base); $this->id = $this->id_base . '-' . $this->number; } if (!$this->is_collection_field()) { // update fieldset $fieldset = jcf_fieldsets_get($this->fieldset_id); $fieldset['fields'][$this->id] = $instance['enabled']; jcf_fieldsets_update($this->fieldset_id, $fieldset); // check slug field if (empty($instance['slug'])) { $instance['slug'] = '_field_' . $this->id_base . '__' . $this->number; } // save jcf_field_settings_update($this->id, $instance, $this->fieldset_id); // return status $res = array('status' => '1', 'id' => $this->id, 'id_base' => $this->id_base, 'fieldset_id' => $this->fieldset_id, 'is_new' => $this->is_new, 'instance' => $instance); } else { $collection = jcf_init_field_object($this->collection_id, $this->fieldset_id); // check slug field if (empty($instance['slug'])) { $instance['slug'] = '_field_' . $this->id_base . '__' . $this->number; } $instance['field_width'] = $input['field_width']; if (isset($input['group_title'])) { $instance['group_title'] = true; } $collection->instance['fields'][$this->id] = $instance; // save jcf_field_settings_update($this->collection_id, $collection->instance, $this->fieldset_id); // return status $res = array('status' => '1', 'id' => $this->id, 'id_base' => $this->id_base, 'fieldset_id' => $this->fieldset_id, 'collection_id' => $this->collection_id, 'is_new' => $this->is_new, 'instance' => $instance); } return $res; }
/** * edit field show form callback */ function jcf_ajax_edit_field() { $field_id = $_POST['field_id']; $fieldset_id = $_POST['fieldset_id']; $field_obj = jcf_init_field_object($field_id, $fieldset_id); $html = $field_obj->do_form(); jcf_ajax_reposnse($html, 'html'); }
/** * callback function for "save_post" action */ function jcf_post_save_custom_fields($post_ID = 0, $post = null) { // do not save anything on autosave if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } // verify this came from the our screen and with proper authorization, // because save_post can be triggered at other times if (!wp_verify_nonce($_POST['justcustomfields_noncename'], plugin_basename(__FILE__))) { return; } // check permissions $permission = 'page' == $_POST['post_type'] ? 'edit_page' : 'edit_post'; if (!current_user_can($permission, $post_ID)) { return; } // OK, we're authenticated: we need to find and save the data // set global post type jcf_set_post_type($_POST['post_type']); // get fieldsets $fieldsets = jcf_fieldsets_get(); // create field class objects and call save function foreach ($fieldsets as $f_id => $fieldset) { foreach ($fieldset['fields'] as $field_id => $tmp) { $field_obj = jcf_init_field_object($field_id, $fieldset['id']); $field_obj->set_post_ID($post->ID); $field_obj->do_save(); } } //pa('stop',1); return false; }
public static function ajax_collection_fields_order() { $fieldset_id = $_POST['fieldset_id']; $collection_id = $_POST['collection_id']; $collection = jcf_init_field_object($collection_id, $fieldset_id); $order = trim($_POST['fields_order'], ','); $new_fields = explode(',', $order); $new_order = array(); if (!empty($new_fields) && !empty($collection->instance['fields'])) { foreach ($new_fields as $field_id) { if (isset($collection->instance['fields'][$field_id])) { $new_order[$field_id] = $collection->instance['fields'][$field_id]; } } } $collection->instance['fields'] = $new_order; jcf_field_settings_update($collection_id, $collection->instance, $fieldset_id); $resp = array('status' => '1'); jcf_ajax_reposnse($resp, 'json'); }