/**
 *	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;
    }
}
 /**
  *	set class propreties "id", "number"
  *	load instance and entries for this field
  *	@param  string  $id  field id (cosist of id_base + number)
  */
 function set_id($id)
 {
     $this->id = $id;
     // this is add request. so number is 0
     if ($this->id == $this->id_base) {
         $this->number = 0;
         $this->is_new = true;
     } else {
         $this->number = str_replace($this->id_base . '-', '', $this->id);
         // load instance data
         $this->instance = jcf_field_settings_get($this->id);
         if (!empty($this->instance)) {
             $this->slug = $this->instance['slug'];
         }
     }
 }
/**
 *	callback function for hook "add_meta_boxes"
 *	call add_meta_box for each fieldset
 */
function jcf_post_load_custom_fields($post_type = '')
{
    // set global post type
    jcf_set_post_type($post_type);
    // get read settings
    $jcf_read_settings = jcf_get_read_settings();
    // get fieldsets
    if ($jcf_read_settings == JCF_CONF_SOURCE_DB) {
        $fieldsets = jcf_fieldsets_get();
        $field_settings = jcf_field_settings_get();
    } else {
        $jcf_settings = jcf_get_all_settings_from_file();
        $fieldsets = $jcf_settings['fieldsets'][$post_type];
        $field_settings = $jcf_settings['field_settings'][$post_type];
    }
    if (!empty($fieldsets)) {
        // remove fieldsets without fields
        foreach ($fieldsets as $f_id => $fieldset) {
            // check $enabled; add custom js/css for components
            foreach ($fieldset['fields'] as $field_id => $enabled) {
                if (!$enabled) {
                    unset($fieldset['fields'][$field_id]);
                    continue;
                }
                $field_obj = jcf_init_field_object($field_id, $fieldset['id']);
                $field_obj->do_add_js();
                $field_obj->do_add_css();
            }
            // if all fields disabled -> remove fieldset
            if (empty($fieldset['fields'])) {
                unset($fieldsets[$f_id]);
            }
        }
        if (!empty($field_obj)) {
            unset($field_obj);
        }
        if (empty($fieldsets)) {
            return false;
        }
        // add custom styles and scripts
        add_action('admin_print_styles', 'jcf_edit_post_styles');
        add_action('admin_print_scripts', 'jcf_edit_post_scripts');
        foreach ($fieldsets as $f_id => $fieldset) {
            add_meta_box('jcf_fieldset-' . $f_id, $fieldset['title'], 'jcf_post_show_custom_fields', $post_type, 'advanced', 'default', array($fieldset));
        }
    }
}
/**
 *	Save fields from import to file config or db
 *	@param array $data Array with fieldsets and fields settings from import file
 *	@return boolean|int Return save status
 */
function jcf_admin_save_settings($data)
{
    foreach ($data as $key => $post_type) {
        jcf_set_post_type($key);
        if (is_array($post_type) && !empty($post_type['fieldsets'])) {
            foreach ($post_type['fieldsets'] as $fieldset_id => $fieldset) {
                $status_fieldset = jcf_import_add_fieldset($fieldset['title'], $fieldset_id);
                if (empty($status_fieldset)) {
                    $notice = array('error' => 'Error! Please check <strong>import file</strong>');
                    do_action('admin_notices', $notice);
                    return false;
                } else {
                    $fieldset_id = $status_fieldset;
                    if (!empty($fieldset['fields'])) {
                        $old_fields = jcf_field_settings_get();
                        if (!empty($old_fields)) {
                            foreach ($old_fields as $old_field_id => $old_field) {
                                $old_slugs[] = $old_field['slug'];
                                $old_field_ids[$old_field['slug']] = $old_field_id;
                            }
                        }
                        foreach ($fieldset['fields'] as $field_id => $field) {
                            $slug_checking = !empty($old_slugs) ? in_array($field['slug'], $old_slugs) : false;
                            if ($slug_checking) {
                                $status_field = jcf_import_add_field($old_field_ids[$field['slug']], $fieldset_id, $field);
                            } else {
                                $status_field = jcf_import_add_field($field_id, $fieldset_id, $field);
                            }
                        }
                    }
                }
            }
            if (!empty($status_fieldset)) {
                if ($_POST['file_name']) {
                    unlink($_POST['file_name']);
                }
            }
        }
    }
    return $status_fieldset;
}
/**
 *	Fields UI page
 */
function jcf_admin_fields_page($post_type)
{
    jcf_set_post_type($post_type->name);
    $fieldsets = jcf_fieldsets_get();
    $field_settings = jcf_field_settings_get();
    //pa($fieldsets);
    //pa($field_settings,1);
    // load template
    include JCF_ROOT . '/templates/fields_ui.tpl.php';
}
/**
 *	Fields UI page
 */
function jcf_admin_fields_page($post_type)
{
    jcf_set_post_type($post_type->name);
    $jcf_read_settings = jcf_get_read_settings();
    if ($jcf_read_settings == JCF_CONF_SOURCE_DB) {
        $fieldsets = jcf_fieldsets_get();
        $field_settings = jcf_field_settings_get();
    } else {
        $jcf_settings = jcf_get_all_settings_from_file();
        $fieldsets = $jcf_settings['fieldsets'][$post_type->name];
        $field_settings = $jcf_settings['field_settings'][$post_type->name];
    }
    // load template
    include JCF_ROOT . '/templates/fields_ui.tpl.php';
}
 /**
  * create custom table on jcf settings fields
  */
 public static function settings_row($collection_id, $fieldset_id)
 {
     $jcf_read_settings = jcf_get_read_settings();
     if ($jcf_read_settings == JCF_CONF_SOURCE_DB) {
         $collection = jcf_field_settings_get($collection_id);
     } else {
         $post_type = jcf_get_post_type();
         $jcf_settings = jcf_get_all_settings_from_file();
         $collection = $jcf_settings['field_settings'][$post_type][$collection_id];
     }
     $registered_fields = self::register_fields();
     include JCF_ROOT . '/components/collection/templates/fields_ui.tpl.php';
 }