/**
 *	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;
    }
}
Ejemplo n.º 2
0
/**
 *	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;
}
Ejemplo n.º 3
0
 /**
  *	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;
 }
Ejemplo n.º 4
0
/**
 * 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');
}
Ejemplo n.º 5
0
/**
 *	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;
}
Ejemplo n.º 6
0
 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');
 }