public static function _construct() { global $pagenow; self::$themes = piklist::get_directory_list(piklist::$paths['piklist'] . '/themes'); add_action($pagenow == 'customize.php' ? 'customize_controls_init' : 'init', array('piklist_theme', 'init')); add_action('setup_theme', array('piklist_theme', 'setup_theme')); add_action('wp_head', array('piklist_theme', 'register_assets_head'), -1); add_action('wp_footer', array('piklist_theme', 'register_assets_footer'), -1); add_action('admin_head', array('piklist_theme', 'register_assets_head'), -1); add_action('admin_footer', array('piklist_theme', 'register_assets_footer'), -1); if (version_compare($GLOBALS['wp_version'], '4.2', '<')) { add_action('wp_head', array('piklist_theme', 'conditional_scripts_start'), -1); add_action('wp_footer', array('piklist_theme', 'conditional_scripts_start'), -1); add_action('admin_head', array('piklist_theme', 'conditional_scripts_start'), -1); add_action('admin_footer', array('piklist_theme', 'conditional_scripts_start'), -1); add_action('customize_controls_print_styles', array('piklist_theme', 'conditional_scripts_start'), -1); add_action('customize_controls_print_scripts', array('piklist_theme', 'conditional_scripts_start'), -1); add_action('customize_controls_print_footer_scripts', array('piklist_theme', 'conditional_scripts_start'), -1); add_action('wp_head', array('piklist_theme', 'conditional_scripts_end'), 101); add_action('wp_footer', array('piklist_theme', 'conditional_scripts_end'), 101); add_action('admin_head', array('piklist_theme', 'conditional_scripts_end'), 101); add_action('admin_footer', array('piklist_theme', 'conditional_scripts_end'), 101); add_action('customize_controls_print_styles', array('piklist_theme', 'conditional_scripts_end'), 101); add_action('customize_controls_print_scripts', array('piklist_theme', 'conditional_scripts_end'), 101); add_action('customize_controls_print_footer_scripts', array('piklist_theme', 'conditional_scripts_end'), 101); } add_filter('body_class', array('piklist_theme', 'body_class')); add_filter('post_class', array('piklist_theme', 'post_class')); add_filter('piklist_assets', array('piklist_theme', 'assets')); }
/** * include_add_ons * Inlcude add-ons registered with piklist. * * @access public * @static * @since 1.0 */ public static function include_add_ons() { require_once ABSPATH . 'wp-admin/includes/plugin.php'; $site_wide_plugins = get_site_option('active_sitewide_plugins'); if (!empty($site_wide_plugins)) { $plugins = array_merge(get_option('active_plugins'), array_keys($site_wide_plugins)); } else { $plugins = get_option('active_plugins'); } foreach ($plugins as $plugin) { $path = WP_PLUGIN_DIR . '/' . $plugin; if (file_exists($path)) { $data = piklist::get_file_data($path, array('type' => 'Plugin Type', 'version' => 'Version')); if ($data['type'] && strtolower($data['type']) == 'piklist') { piklist::add_plugin(basename(dirname($plugin)), dirname($path)); add_action('load-plugins.php', array('piklist_admin', 'deactivation_link')); piklist_admin::$piklist_dependent = true; if ($data['version']) { $file = $plugin; $version = $data['version']; piklist_admin::check_update($file, $version); } } } } $addon_paths = piklist::paths(); $paths = array(); foreach ($addon_paths as $from => $path) { if ($from != 'theme') { array_push($paths, $path . '/add-ons'); if ($from != 'piklist') { array_push($paths, $path); } } } foreach ($paths as $path) { if (is_dir($path)) { if (strstr($path, 'add-ons')) { $add_ons = piklist::get_directory_list($path); foreach ($add_ons as $add_on) { $file = file_exists($path . '/' . $add_on . '/' . $add_on . '.php') ? $path . '/' . $add_on . '/' . $add_on . '.php' : $path . '/' . $add_on . '/plugin.php'; self::register_add_on($add_on, $file, $path); } } else { $add_on = basename($path); $file = file_exists($path . '/' . $add_on . '.php') ? $path . '/' . $add_on . '.php' : $path . '/plugin.php'; self::register_add_on($add_on, $file, $path, true); } } } do_action('piklist_activate_add_on'); }
public static function get_update($file, $version, $current_version) { $updates_url = WP_PLUGIN_DIR . '/' . dirname($file) . '/parts/updates/'; $updates = piklist::get_directory_list($updates_url); if ($updates) { array_multisort($updates); } else { return; } $operator = $current_version ? '=' : '>='; // Upgrade : Install $valid_updates = array(); foreach ($updates as $update) { $update_version_number = rtrim($update, '.php'); if (version_compare($version, $update_version_number, $operator)) { $update_code = file_get_contents($updates_url . $update); $stripped_update_code = str_ireplace(array('<?php', '<?', '?>'), '', $update_code); $update_function = create_function('', $stripped_update_code); $valid_updates[$update] = $update_function; } } if ($valid_updates) { piklist::check_network_propagate(array('piklist_admin', 'run_update'), $valid_updates); } }
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); }
/** * get_update * Get the update for a piklist plugin. * * @param string $file The plugin filename. * @param string $version The plugin version. * @param string $current_version The current plugin version. * * @access public * @static * @since 1.0 */ public static function get_update($file, $version, $current_version) { $updates_url = WP_PLUGIN_DIR . '/' . dirname($file) . '/parts/updates/'; $updates = piklist::get_directory_list($updates_url); if ($updates) { array_multisort($updates); } else { return; } $valid_updates = array(); foreach ($updates as $update) { $update_version_number = rtrim($update, '.php'); if (version_compare($current_version, $update_version_number, '<')) { $valid_updates[$update_version_number] = $updates_url . $update; } } if ($valid_updates) { piklist::check_network_propagate(array('piklist_admin', 'run_update'), $valid_updates); } }
public static function render_form($attributes, $content = '') { extract(shortcode_atts(array('form' => false, 'add_on' => false), $attributes)); if ($form) { if ($add_on && isset(piklist::$paths[$add_on])) { $paths[$add_on] = piklist::$paths[$add_on]; } else { $paths = piklist::$paths[$add_on]; } if (empty($paths)) { return false; } foreach ($paths as $display => $path) { if (in_array($form . '.php', piklist::get_directory_list($path . '/parts/forms'))) { $data = get_file_data($path . '/parts/forms/' . $form . '.php', apply_filters('piklist_get_file_data', array('class' => 'Class', 'title' => 'Title', 'method' => 'Method', 'action' => 'Action', 'filter' => 'Filter', 'id' => 'ID', 'capability' => 'Capability', 'logged_in' => 'Logged In'))); $data = apply_filters('piklist_add_part', $data, 'form'); if (!$data['logged_in'] || isset($data['logged_in']) && $data['logged_in'] == 'true' && is_user_logged_in()) { if (!$data['capability'] || $data['capability'] && current_user_can($data['capability'])) { $data['nonce'] = wp_create_nonce(plugin_basename(piklist::$paths['piklist'] . '/piklist.php')); $data['form'] = $path . '/parts/forms/' . $form; $data['ids'] = self::$save_ids; $data['form_id'] = $data['id'] ? $data['id'] : $form; self::$form_rendered = true; return piklist::render('fields/form', $data, true); } } } } } return null; }