/** * get fields from wp-options */ function jcf_field_settings_get($id = '', $select_from_db = false) { $option_name = jcf_fields_get_option_name(); $jcf_read_settings = jcf_get_read_settings(); if (empty($select_from_db) && $jcf_read_settings != JCF_CONF_SOURCE_DB) { $jcf_settings = jcf_get_all_settings_from_file(); $post_type = str_replace('jcf_fields-', '', $option_name); $field_settings = $jcf_settings['field_settings'][$post_type]; } else { $field_settings = jcf_get_options($option_name); } if (!empty($id)) { return @$field_settings[$id]; } return $field_settings; }
/** * 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)); } } }
/** * update order fieldsets * @param array $keys Fieldsets keys */ function jcf_fieldsets_order($keys = array()) { $option_name = jcf_fieldsets_get_option_name(); $new_fieldsets = array(); $jcf_read_settings = jcf_get_read_settings(); if ($jcf_read_settings != JCF_CONF_SOURCE_DB) { $jcf_settings = jcf_get_all_settings_from_file(); $post_type = jcf_get_post_type(); foreach ($keys as $key) { $new_fieldsets[$key] = $jcf_settings['fieldsets'][$post_type][$key]; unset($jcf_settings['fieldsets'][$post_type][$key]); } $jcf_settings['fieldsets'][$post_type] = $new_fieldsets; jcf_save_all_settings_in_file($jcf_settings); } else { $fieldsets = jcf_get_options($option_name); foreach ($keys as $key) { $new_fieldsets[$key] = $fieldsets[$key]; unset($fieldsets[$key]); } jcf_update_options($option_name, $new_fieldsets); } }
/** * export fields from form callback */ function jcf_ajax_export_fields_form() { $jcf_read_settings = jcf_get_read_settings(); if ($jcf_read_settings != JCF_CONF_SOURCE_DB) { $jcf_settings = jcf_get_all_settings_from_file(); } else { $jcf_settings = jcf_get_all_settings_from_db(); } $post_types = !empty($jcf_settings['post_types']) ? $jcf_settings['post_types'] : jcf_get_post_types(); $fieldsets = $jcf_settings['fieldsets']; $field_settings = $jcf_settings['field_settings']; $registered_fields = jcf_get_registered_fields(); // load template header('Content-Type: text/html; charset=utf-8'); include JCF_ROOT . '/templates/export.tpl.php'; exit; }
/** * Function for update saving method * @return string Return read method from file or database */ function jcf_update_read_settings() { $current_value = jcf_get_read_settings(); $new_value = $_POST['jcf_read_settings']; if (MULTISITE && ($_POST['jcf_multisite_setting'] != JCF_CONF_MS_NETWORK && $new_value == JCF_CONF_SOURCE_FS_GLOBAL)) { jcf_add_admin_notice('error', __('<strong>Settings storage update FAILED!</strong>. Your MultiSite Settings do not allow to set global storage in FileSystem', JCF_TEXTDOMAIN)); return $current_value; } else { if (!empty($current_value)) { // if need to copy settings from db to FS if (!empty($_POST['jcf_keep_settings'])) { if (in_array($new_value, array(JCF_CONF_SOURCE_FS_GLOBAL, JCF_CONF_SOURCE_FS_THEME))) { $file = jcf_get_settings_file_path($new_value); if (jcf_clone_db_settings_to_fs($file, $new_value)) { jcf_add_admin_notice('notice', __('<strong>Database settings has been imported</strong> to file system.', JCF_TEXTDOMAIN)); $saved = update_site_option('jcf_read_settings', $new_value); } else { jcf_add_admin_notice('error', __('<strong>Database settings import to file system FAILED!</strong>. Revert settings storage to Database.', JCF_TEXTDOMAIN)); } } } else { $saved = update_site_option('jcf_read_settings', $new_value); } } else { $saved = add_site_option('jcf_read_settings', $new_value); } if ($saved) { jcf_add_admin_notice('notice', __('<strong>Settings storage</strong> configurations has been updated.', JCF_TEXTDOMAIN)); } return $saved ? $new_value : $current_value; } }
/** * 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'; }
/** * delete field from collection */ public function delete_field($field_id) { $option_name = jcf_fields_get_option_name(); $jcf_read_settings = jcf_get_read_settings(); if ($jcf_read_settings != JCF_CONF_SOURCE_DB) { $jcf_settings = jcf_get_all_settings_from_file(); $post_type = jcf_get_post_type(); $fieldset = $jcf_settings['fieldsets'][$post_type][$this->fieldset_id]; $field_settings = $jcf_settings['field_settings'][$post_type]; if (isset($field_settings[$this->id]['fields'][$field_id])) { unset($field_settings[$this->id]['fields'][$field_id]); } $jcf_settings['fieldsets'][$post_type][$this->fieldset_id] = $fieldset; $jcf_settings['field_settings'][$post_type] = $field_settings; jcf_save_all_settings_in_file($jcf_settings); } else { $field_settings = jcf_get_options($option_name); if (isset($field_settings[$this->id]['fields'][$field_id])) { unset($field_settings[$this->id]['fields'][$field_id]); } jcf_update_options($option_name, $field_settings); } }