Ejemplo n.º 1
0
/**
 * piklist
 * The core helper function for the Piklist framework.
 *
 * @since 1.0
 */
function piklist($option, $arguments = array())
{
    if (!is_array($arguments) && strstr($arguments, '=')) {
        parse_str($arguments, $arguments);
    }
    if (is_array($option) || is_object($option)) {
        return empty($arguments) ? piklist::object_format($option) : piklist::pluck($option, $arguments);
    } else {
        switch ($option) {
            case 'field':
                if (piklist_setting::get('active_section')) {
                    piklist_setting::register_setting($arguments);
                } else {
                    return piklist_form::render_field($arguments, isset($arguments['return']) ? $arguments['return'] : false);
                }
                break;
            case 'form':
                return piklist_form::render_form($arguments['form'], isset($arguments['add_on']) ? $arguments['add_on'] : null);
                break;
            case 'list_table':
                piklist_list_table::render($arguments);
                break;
            case 'post_type_labels':
                return piklist::post_type_labels($arguments);
                break;
            case 'taxonomy_labels':
                return piklist::taxonomy_labels($arguments);
                break;
            case 'option':
            case 'post_custom':
            case 'post_meta':
            case 'get_post_custom':
            case 'user_custom':
            case 'user_meta':
            case 'get_user_custom':
            case 'term_custom':
            case 'term_meta':
            case 'get_term_custom':
                switch ($option) {
                    case 'user_custom':
                    case 'user_meta':
                    case 'get_user_custom':
                        $type = 'user';
                        break;
                    case 'term_custom':
                    case 'term_meta':
                    case 'get_term_custom':
                        $type = 'term';
                        break;
                    case 'post_custom':
                    case 'post_meta':
                    case 'get_post_custom':
                        $type = 'post';
                        break;
                    default:
                        $type = 'option';
                        break;
                }
                return piklist::object($type, $arguments);
                break;
            case 'dashes':
                return piklist::dashes($arguments);
                break;
            case 'slug':
                return piklist::slug($arguments);
                break;
            case 'humanize':
                return piklist::humanize($arguments);
                break;
            case 'performance':
                piklist::performance();
                break;
            case 'comments_template':
                $file = isset($arguments[0]) ? $arguments[0] : '/comments.php';
                $seperate_comments = isset($arguments[1]) ? $arguments[1] : false;
                piklist_comments::comments_template($file, $seperate_comments);
                break;
            case 'include_meta_boxes':
                piklist::render('shared/notice', array('content' => sprintf(__('This page is using the old Piklist WorkFlow system. Please update your code to the %snew WorkFlow system%s.', 'piklist'), '<a href="https://piklist.com/user-guide/docs/building-workflows-piklist-v0-9-9/" target="_blank">', '</a>'), 'notice_type' => 'error'));
                break;
            case 'prefix':
                return piklist::$prefix;
                break;
            case 'url':
                return isset(piklist::$add_ons[$arguments]) ? piklist::$add_ons[$arguments]['url'] : null;
                break;
            case 'path':
                return isset(piklist::$add_ons[$arguments]) ? piklist::$add_ons[$arguments]['path'] : null;
                break;
            default:
                $return = isset($arguments['return']) ? $arguments['return'] : false;
                $loop = isset($arguments['loop']) ? $arguments['loop'] : null;
                unset($arguments['return']);
                unset($arguments['loop']);
                return piklist::render($option, $arguments, $return, $loop);
                break;
        }
    }
}
Ejemplo n.º 2
0
 public function ajax()
 {
     if (!isset($_REQUEST['method']) || !isset($_REQUEST['nonce']) || !wp_verify_nonce((string) $_REQUEST['nonce'], $this->slug)) {
         wp_send_json_error();
     }
     global $wpdb;
     $output = array();
     $method = esc_attr($_REQUEST['method']);
     switch ($method) {
         case 'complete-update':
             piklist_admin::$network_wide = is_plugin_active_for_network('piklist/piklist.php');
             $updates = piklist_admin::$network_wide ? get_site_option('piklist_updates') : get_option('piklist_updates');
             foreach ($updates['piklist'] as $index => $version) {
                 if ($version == '0.9.9') {
                     unset($updates['piklist'][$index]);
                 }
             }
             $updates['piklist'] = array_values($updates['piklist']);
             piklist_admin::$network_wide ? update_site_option('piklist_updates', $updates) : update_option('piklist_updates', $updates);
             $output['message'] = 'Piklist Update 0.9.9 Completed!';
             break;
         case 'options-update':
             /**
              * Fix arrays created by piklist_admin::check_update()
              * Remove null values and zero values
              */
             $piklist_active_plugin_versions = piklist_admin::$network_wide ? get_site_option('piklist_active_plugin_versions') : get_option('piklist_active_plugin_versions');
             foreach ($piklist_active_plugin_versions as $plugins => $versions) {
                 foreach ($versions as $key => $value) {
                     if (is_null($value) || $value == 0) {
                         unset($piklist_active_plugin_versions[$plugins][$key]);
                     }
                 }
             }
             piklist_admin::$network_wide ? update_site_option('piklist_active_plugin_versions', $piklist_active_plugin_versions) : update_option('piklist_active_plugin_versions', $piklist_active_plugin_versions);
             $output['message'] = 'Active Plugin Versions Updated...';
             break;
         case 'relate-update':
             $related = $wpdb->get_results("SELECT post_id, has_post_id FROM {$wpdb->prefix}post_relationships", ARRAY_A);
             $meta_key = '_' . piklist::$prefix . 'relate_post';
             foreach ($related as $relate) {
                 $current_related = get_metadata('post', $relate['post_id'], $meta_key);
                 if (!$current_related || $current_related && !in_array($relate['has_post_id'], $current_related)) {
                     add_metadata('post', $relate['post_id'], $meta_key, $relate['has_post_id']);
                     add_metadata('post', $relate['has_post_id'], $meta_key, $relate['post_id']);
                 }
             }
             $output['message'] = 'Post Relationships Updated...';
             $relate_table = $wpdb->prefix . 'post_relationships';
             $wpdb->query("DROP TABLE IF EXISTS {$relate_table}");
             $output['message'] = 'Legacy post_relationships Table Deleted...';
             break;
         case 'widgets':
         case 'settings':
         case 'meta-boxes':
         case 'users':
         case 'terms':
         case 'media':
             $folder = $method;
             $buffer = null;
             $this->widget = false;
             $this->setting = false;
             $this->fields = array();
             // Read all fields for folder
             foreach (piklist::paths() as $add_on => $path) {
                 $files = piklist::get_directory_list($path . '/parts/' . $folder);
                 if (empty($files) && in_array($add_on, array('theme', 'parent-theme'))) {
                     $files = piklist::get_directory_list($path . '/' . $folder);
                 }
                 ob_start();
                 foreach ($files as $part) {
                     if ($folder == 'widgets' && stristr($part, '-form') || $folder != 'widgets') {
                         if ($folder == 'settings') {
                             $data = piklist::get_file_data($path . '/parts/' . $folder . '/' . $part, array('setting' => 'Setting'));
                             $this->setting = $data['setting'];
                         } elseif ($folder == 'widgets') {
                             $data = piklist::get_file_data($path . '/parts/' . $folder . '/' . $part, array('title' => 'Title'));
                             if (empty($data['title'])) {
                                 $data = piklist::get_file_data($path . '/parts/' . $folder . '/' . str_replace('-form', '', $part), array('title' => 'Title'));
                             }
                             $this->widget = $add_on . ':' . strtolower($data['title']);
                         }
                         ob_start();
                         @(include $path . '/parts/' . $folder . '/' . $part);
                         ob_end_clean();
                     }
                 }
                 ob_end_clean();
             }
             // Setup our defaults
             switch ($folder) {
                 case 'meta-boxes':
                 case 'media':
                     $table = $wpdb->postmeta;
                     $object_key = 'post_id';
                     $meta_id = 'meta_id';
                     $output['message'] = $folder == 'meta-boxes' ? __('Post Meta Updated...') : __('Media Meta Updated...');
                     break;
                 case 'users':
                     $table = $wpdb->usermeta;
                     $object_key = 'user_id';
                     $meta_id = 'umeta_id';
                     $output['message'] = __('User Meta Updated...');
                     break;
                 case 'terms':
                     $table = $wpdb->termmeta;
                     $object_key = 'term_id';
                     $meta_id = 'meta_id';
                     $output['message'] = __('Term Meta Updated...');
                     break;
             }
             // Run through fields and update the ones we need to update
             foreach ($this->fields as $index => $field) {
                 switch ($folder) {
                     case 'media':
                     case 'meta-boxes':
                     case 'users':
                     case 'terms':
                         $keys = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$table} WHERE meta_key = %s", $field['field']), ARRAY_A);
                         foreach ($keys as $key) {
                             if (!empty($key['meta_value'])) {
                                 $old = maybe_unserialize($key['meta_value']);
                                 if ($this->needs_update($old)) {
                                     $new = piklist::object_format($old);
                                     $new = isset($field['add_more']) && $field['add_more'] == true ? $new : current($new);
                                     if ($old != $new) {
                                         $result = $wpdb->update($table, array('meta_value' => maybe_serialize($new)), array($meta_id => $key[$meta_id], $object_key => $key[$object_key], 'meta_key' => $key['meta_key']));
                                     }
                                 }
                             }
                         }
                         break;
                     case 'settings':
                         remove_filter('pre_update_option_' . $field['context'], array('piklist_setting', 'pre_update_option'), 10, 2);
                         $option = get_option($field['context']);
                         if (isset($option[$field['field']['field']]) && $this->needs_update($option[$field['field']['field']])) {
                             $option[$field['field']['field']] = piklist::object_format($option[$field['field']['field']]);
                             // Helpers Dashboard Widgets field
                             $option[$field['field']['field']] = isset($field['field']['add_more']) && $field['field']['add_more'] == true ? $option[$field['field']['field']] : current($option[$field['field']['field']]);
                             update_option($field['context'], $option);
                         }
                         $output['message'] = __('Settings Updated...');
                         break;
                     case 'widgets':
                         $data = explode(':', $field['context']);
                         $widgets = get_option('widget_piklist-universal-widget-' . $data[0]);
                         if (!empty($widgets)) {
                             foreach ($widgets as $widget_number => &$widget) {
                                 if (is_numeric($widget_number)) {
                                     foreach ($widget as $_field => &$_value) {
                                         if ($field['field']['field'] == $_field) {
                                             $old = maybe_unserialize($_value);
                                             if ($this->needs_update($old)) {
                                                 $_value = maybe_serialize(piklist::object_format($old));
                                             }
                                         } elseif ($_field == 'widget') {
                                             $old = maybe_unserialize($_value);
                                             $add_on = piklist::slug($data[0]);
                                             if (is_array($old) && substr($old[0], 0, strlen($add_on)) != $add_on) {
                                                 $_value = piklist::slug($data[0] . '_' . $old[0]);
                                             }
                                         }
                                     }
                                 }
                             }
                             update_option('widget_piklist-universal-widget-' . $data[0], $widgets);
                             $output['message'] = __('Widgets Updated...');
                         }
                         break;
                 }
             }
             $output['fields'] = array();
             foreach ($this->fields as $index => $field) {
                 if (is_array($field)) {
                     array_push($output['fields'], (isset($field['context']) ? $field['context'] . ' - ' : null) . (is_array($field['field']) ? $field['field']['field'] : $field['field']));
                 } else {
                     array_push($output['fields'], $field);
                 }
             }
             break;
     }
     wp_send_json($output);
 }