示例#1
0
 function __construct($arguments)
 {
     global $wpdb;
     extract($arguments);
     // TODO: Require fields
     $this->key = $key;
     $this->name = $name;
     $this->table_id = piklist::slug($this->name);
     $this->column = $column;
     $this->columns = $columns;
     $this->classes = isset($classes) ? $classes : array('widefat', 'fixed');
     $this->sortable_columns = isset($sortable_columns) ? $sortable_columns : false;
     $this->actions = isset($actions) ? $actions : $this->actions;
     $this->per_page = isset($per_page) ? $per_page : 10;
     $this->ajax = isset($ajax) ? $ajax : false;
     $this->export = isset($export) ? $export : false;
     if (isset($data)) {
         $this->data = is_object($data) || is_array($data) ? piklist::object_to_array($data) : $wpdb->get_results($data, ARRAY_A);
         usort($this->data, array($this, 'data_sort'));
         $this->current_page = $this->get_pagenum();
         $this->total_items = count($this->data);
         // TODO: If sql use orderby
         // TODO: Implement offset in sql with current_page
     } else {
         $this->data = array();
         $this->current_page = 1;
         $this->total_items = 0;
     }
     parent::__construct(array('singular' => piklist::singularize($this->name), 'plural' => piklist::pluralize($this->name), 'ajax' => $this->ajax));
 }
 public static function widgets_init()
 {
     global $wp_widget_factory, $wp_version;
     $widget_class = 'piklist_universal_widget';
     foreach (piklist::$paths as $from => $path) {
         if (!piklist::directory_empty($path . '/parts/widgets')) {
             $widget_class_name = $widget_class . '_' . piklist::slug($from);
             $suffix = '';
             if (isset(piklist_add_on::$available_add_ons[$from])) {
                 if (stripos(piklist_add_on::$available_add_ons[$from]['Name'], 'widget') === false) {
                     $suffix = ' ' . __('Widgets', 'piklist');
                 }
                 $title = piklist_add_on::$available_add_ons[$from]['Name'] . $suffix;
                 $description = strip_tags(piklist_add_on::$available_add_ons[$from]['Description']);
             } elseif ($from == 'piklist') {
                 $title = __('Piklist Widgets', 'piklist');
                 $description = __('Core Widgets for Piklist.', 'piklist');
             } elseif ($from == 'theme') {
                 $current_theme = wp_get_theme();
                 $title = $current_theme . ' ' . __('Widgets', 'piklist');
                 $description = sprintf(__('Widgets for the %s Theme', 'piklist'), $current_theme);
             }
             $wp_widget_factory->widgets[$widget_class_name] = new $widget_class($widget_class_name, $title, $description, array($from => $path));
         }
     }
 }
 public static function register_meta_boxes_callback($arguments)
 {
     extract($arguments);
     $current_user = wp_get_current_user();
     $data = get_file_data($path . '/parts/' . $folder . '/' . $part, apply_filters('piklist_get_file_data', array('name' => 'Title', 'description' => 'Description', 'capability' => 'Capability', 'order' => 'Order', 'role' => 'Role', 'new' => 'New'), 'users'));
     $data = apply_filters('piklist_add_part', $data, 'users');
     $data = array_filter($data);
     $meta_box = array('id' => piklist::slug($data['name']), 'config' => $data, 'part' => $path . '/parts/' . $folder . '/' . $part);
     if ((!isset($data['capability']) || $data['capability'] && current_user_can(strtolower($data['capability']))) && (!isset($data['role']) || piklist_user::current_user_role($data['role'])) && (!isset($data['new']) || $data['new'] && (isset($pagenow) && $pagenow != 'user-new.php'))) {
         if (isset($order)) {
             self::$meta_boxes[$order] = $meta_box;
         } else {
             array_push(self::$meta_boxes, $meta_box);
         }
     }
 }
 private static function register_add_on($add_on, $file, $path, $plugin = false)
 {
     if (file_exists($file)) {
         $active_add_ons = piklist::get_settings('piklist_core_addons', 'add-ons');
         $data = get_plugin_data($file);
         $data['plugin'] = $plugin;
         self::$available_add_ons[$add_on] = $data;
         if (in_array($add_on, is_array($active_add_ons) ? $active_add_ons : array($active_add_ons))) {
             include_once $file;
             $class_name = str_replace(piklist::$prefix, 'piklist_', piklist::slug($add_on));
             if (class_exists($class_name) && method_exists($class_name, '_construct') && !is_subclass_of($class_name, 'WP_Widget')) {
                 call_user_func(array($class_name, '_construct'));
             }
             piklist::$paths[$add_on] = $path . (!$plugin ? '/' . $add_on : '');
         }
     }
 }
function piklist($option, $arguments = array())
{
    if (!is_array($arguments) && strstr($arguments, '=')) {
        parse_str($arguments, $arguments);
    }
    if (is_array($option) || is_object($option)) {
        $list = array();
        $arguments = is_array($arguments) ? $arguments : array($arguments);
        foreach ($option as $key => $value) {
            if (count($arguments) > 1) {
                if (in_array('_key', $arguments)) {
                    $_value = $arguments[1];
                    $list[$key] = is_object($value) ? $value->{$_value} : $value[$_value];
                } else {
                    $__key = $arguments[0];
                    $_key = is_object($value) ? $value->{$__key} : (isset($value[$__key]) ? $value[$__key] : null);
                    $_value = $arguments[1];
                    $list[$_key] = is_object($value) ? $value->{$_value} : (isset($value[$_value]) ? $value[$_value] : null);
                }
            } else {
                $_value = $arguments[0];
                array_push($list, is_object($value) && isset($value->{$_value}) ? $value->{$_value} : (isset($value[$_value]) ? $value[$_value] : null));
            }
        }
        return $list;
    } else {
        switch ($option) {
            case 'field':
                if (piklist_setting::get('active_section')) {
                    piklist_setting::register_setting($arguments);
                } else {
                    piklist_form::render_field($arguments, isset($arguments['return']) ? $arguments['return'] : false);
                }
                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 'performance':
                piklist::performance();
                break;
            case 'include_meta_boxes':
                // TODO: Improve
                if (isset($arguments['post_type'])) {
                    $post_type = $arguments['post_type'];
                    unset($arguments['post_type']);
                } else {
                    $post_type = null;
                }
                piklist::include_meta_boxes($arguments, $post_type);
                break;
            case 'include_actions':
                // TODO: Improve
                if (isset($arguments['action'])) {
                    $post_type = $arguments['action'];
                    unset($arguments['action']);
                }
                piklist::include_actions($action, $arguments);
                break;
            case 'include_user_profile_fields':
                piklist_user::include_user_profile_fields($arguments);
                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;
            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;
        }
    }
}
示例#6
0
 /**
  * process_parts
  * Scan and process all views in a specified folder.
  *
  * @param string $folder Folder name inside the parts folder to inspect.
  * @param array $data Comment block data at the top of the view to filter.
  * @param string|array $callback Function to call when processing the view.
  * @param string $path Path(s) to scan for parts and folder combinations.
  * @param string $prefix Prefix to require of the views.
  * @param string $suffix Suffix to require of the views.
  *
  * @access public
  * @static
  * @since 1.0
  */
 public static function process_parts($folder, $data = array(), $callback = null, $path = null, $prefix = '', $suffix = '.php')
 {
     if (!isset(self::$processed_parts[$folder])) {
         self::$processed_parts[$folder] = array('callback' => $callback, 'parts' => array());
     }
     $parts = array();
     $paths = $path ? $path : self::paths();
     $paths = is_array($paths) ? $paths : array($paths);
     /**
      * piklist_part_data
      * Add additional parameters to read from file comment blocks.
      *
      * @param  array $data comment block parameters
      * @param  var $folder the parts folder where the file is located.
      *
      * @since 1.0
      */
     $data = array_merge(apply_filters('piklist_part_data', $data, $folder), $data);
     foreach ($paths as $add_on => $path) {
         $files = self::get_directory_list($path . '/parts/' . $folder);
         if (empty($files) && in_array($add_on, array('theme', 'parent-theme'))) {
             $files = self::get_directory_list($path . '/' . $folder);
         }
         foreach ($files as $part) {
             if (strtolower($part) != 'index.php' && substr($part, 0, strlen($prefix)) == $prefix && substr($part, strlen($part) - strlen($suffix)) == $suffix) {
                 $render = $path . '/parts/' . $folder . '/' . $part;
                 $part_data = self::get_file_data($render, $data);
                 $_part = array('id' => !empty($part_data['extend']) ? $part_data['extend'] : apply_filters("piklist_part_id-{$folder}", piklist::slug($add_on . ' ' . $part), $add_on, $part, $part_data), 'folder' => $folder, 'part' => $part, 'data' => $part_data, 'prefix' => $prefix, 'add_on' => $add_on, 'path' => $path, 'render' => array($render));
                 /**
                  * piklist_part_process
                  * Post-process for a part.
                  *
                  * @param  array $part being validated
                  * @param  var $folder the parts folder where the file is located.
                  *
                  * @since 1.0
                  */
                 $_part = apply_filters('piklist_part_process', $_part, $folder);
                 /**
                  * piklist_part_process-FOLDER
                  * Post-process for a part by folder.
                  *
                  * @param  array $part being validated
                  *
                  * @since 1.0
                  */
                 $_part = apply_filters("piklist_part_process-{$folder}", $_part);
                 if ($_part) {
                     array_push(self::$processed_parts[$folder]['parts'], $_part);
                 }
             }
         }
     }
     $extensions = array();
     // Move extensions to the end of the list
     uasort(self::$processed_parts[$folder]['parts'], array('piklist', 'sort_by_data_extend'));
     self::$processed_parts[$folder]['parts'] = array_values(self::$processed_parts[$folder]['parts']);
     foreach (self::$processed_parts[$folder]['parts'] as $current_index => &$part) {
         if (isset(self::$processed_parts[$folder]['parts'][$current_index + 1])) {
             for ($index = $current_index + 1; $index < count(self::$processed_parts[$folder]['parts']); $index++) {
                 $extend = self::$processed_parts[$folder]['parts'][$index];
                 if ($part['id'] == $extend['id']) {
                     foreach ($part['data'] as $attribute => &$data) {
                         if (!in_array($attribute, array('extend', 'extend_method')) && (!empty($extend['data'][$attribute]) || is_bool($extend['data'][$attribute]))) {
                             $data = is_array($extend['data'][$attribute]) && is_array($data) ? array_unique(array_merge($extend['data'][$attribute], $data), SORT_REGULAR) : $extend['data'][$attribute];
                         }
                     }
                     array_push($extensions, $index);
                     foreach ($extend['render'] as $render) {
                         if (!in_array($render, $part['render'])) {
                             switch ($extend['data']['extend_method']) {
                                 case 'before':
                                     array_unshift($part['render'], $render);
                                     break;
                                 case 'replace':
                                     $part['render'] = array($render);
                                     break;
                                 case 'after':
                                 default:
                                     array_push($part['render'], $render);
                                     break;
                             }
                         }
                     }
                 }
             }
         }
     }
     foreach ($extensions as $index) {
         unset(self::$processed_parts[$folder]['parts'][$index]);
     }
     self::$processed_parts[$folder]['parts'] = array_values(self::$processed_parts[$folder]['parts']);
     /**
      * piklist_part_add
      * Add additional parts to processed list.
      *
      * @param  array $processed parts so far.
      * @param  var $folder the parts folder where the file is located.
      *
      * @since 1.0
      */
     self::$processed_parts[$folder]['parts'] = array_merge(apply_filters('piklist_part_add', array(), $folder), self::$processed_parts[$folder]['parts']);
     /**
      * piklist_part_add-FOLDER
      * Add additional parts to processed list.
      *
      * @param  array $processed parts so far.
      *
      * @since 1.0
      */
     self::$processed_parts[$folder]['parts'] = array_merge(apply_filters("piklist_part_add-{$folder}", array()), self::$processed_parts[$folder]['parts']);
     // Move extensions to the end of the list
     uasort(self::$processed_parts[$folder]['parts'], array('piklist', 'sort_by_data_extend'));
     self::$processed_parts[$folder]['parts'] = array_values(self::$processed_parts[$folder]['parts']);
     /**
      * piklist_parts_process
      * Signals that parts are in process.
      *
      * @param  array $processed parts so far.
      * @param  var $folder the parts folder where the file is located.
      *
      * @since 1.0
      */
     do_action('piklist_parts_process', $folder);
     /**
      * piklist_parts_process-FOLDER
      * Signals that parts are in process.
      *
      * @param  array $processed parts so far.
      * @param  var $folder the parts folder where the file is located.
      *
      * @since 1.0
      */
     do_action("piklist_parts_process-{$folder}");
     if (is_null($callback)) {
         $parts = array();
         foreach (self::$processed_parts[$folder]['parts'] as $_part) {
             if (self::validate_part($_part)) {
                 array_push($parts, $_part);
             }
         }
         return $parts;
     }
 }
示例#7
0
 /**
  * is_allowed
  * Determines if a workflow tab is allowed to be shown.
  *
  * @param array $data The tab configuration object.
  *
  * @return array The statuse of whether its allowed.
  *
  * @access public
  * @static
  * @since 1.0
  */
 public static function is_allowed($data, $strict = true)
 {
     global $pagenow;
     $allowed = !$strict;
     // Check to see if there is an active flow
     if (isset($_REQUEST['flow']) && piklist::slug($flow, 'UTF-8') == $_REQUEST['flow']) {
         $allowed = true;
     }
     // Check Pages
     $pages = $data['data']['page'];
     if (!empty($pages)) {
         $allowed = in_array($pagenow, $pages);
         if (isset($_REQUEST['page'])) {
             $allowed = in_array($_REQUEST['page'], $pages);
         }
     }
     // Check Post Types
     if ($allowed && piklist_admin::is_post()) {
         $post_types = $data['data']['post_type'];
         $current_post_type = piklist_cpt::detect_post_type();
         if (!empty($post_types)) {
             $allowed = in_array($current_post_type, $post_types);
         }
     }
     // Check which mode we are on for the term pages
     if (piklist_admin::is_term()) {
         $taxonomies = $data['data']['taxonomy'];
         $current_taxonomy = isset($_REQUEST['taxonomy']) ? $_REQUEST['taxonomy'] : false;
         if (!empty($taxonomies) && $current_taxonomy) {
             $allowed = in_array($current_taxonomy, $taxonomies);
         }
         if (piklist_admin::is_term() === 'new') {
             $allowed = false;
         }
     }
     return $allowed;
 }
 /**
  * part_id
  * Specify the part id.
  *
  * @param string $part_id The current id for the part.
  * @param string $add_on The add-on for the part.
  * @param string $part The current id for the part
  * @param array $part_data The part object.
  *
  * @return string The update part id.
  *
  * @access public
  * @static
  * @since 1.0
  */
 public function part_id($part_id, $add_on, $part, $part_data)
 {
     return piklist::slug($add_on . ' ' . str_replace('-form.php', '.php', strtolower($part)));
 }
示例#9
0
文件: 0.9.9.php 项目: a42/piklist
 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);
 }
 public static function workflows()
 {
     if (empty(self::$workflows)) {
         return false;
     }
     global $pagenow, $typenow, $post;
     reset(self::$after_positions);
     $current_position = key(self::$after_positions);
     foreach (self::$workflows as $workflow => $path) {
         uasort($path, array('piklist', 'sort_by_config_order'));
         $path = array_values($path);
         $first = current($path);
         $position = isset($first['config']['position']) ? $first['config']['position'] : false;
         if ($position) {
             $pages = $first['config']['page'];
             $post_type = isset($first['config']['post_type']) ? $first['config']['post_type'] : false;
             if ((in_array($pagenow, $pages) || in_array($pagenow, array('admin.php', 'edit.php', 'users.php', 'plugins.php', 'options-general.php')) && (isset($_REQUEST['page']) && in_array($_REQUEST['page'], $pages))) && (!$post_type || $post_type && ($post && $typenow == $post_type || !$post && isset($_REQUEST['post_type']) == $post_type)) || isset($_REQUEST['flow']) && piklist::slug($workflow) == $_REQUEST['flow']) {
                 $default = null;
                 $has_active = false;
                 foreach ($path as &$tab) {
                     if (isset($tab['config']['default']) && $tab['config']['default'] == true) {
                         $default =& $tab;
                     }
                     if (isset($tab['config']['active'])) {
                         $has_active = true;
                     }
                 }
                 if (!$has_active && $default) {
                     $default['config']['active'] = true;
                 }
                 if ($position == $current_position) {
                     piklist::render('shared/admin-workflow', array('workflow' => $workflow, 'path' => $path, 'pages' => $pages, 'position' => $position));
                 }
             }
         }
     }
     array_shift(self::$after_positions);
 }
示例#11
0
 /**
  * render_form
  * Render the form
  *
  * @param string $form The form id.
  * @param string $add_on The add-on where the form resides.
  * @param bool $return Whether to return the output or display.
  *
  * @return string The output of the rendered form.
  *
  * @access public
  * @static
  * @since 1.0
  */
 public static function render_form($form, $add_on = null, $return = false)
 {
     if (strstr(strtolower($form), '.php')) {
         $form = str_replace('.php', '', strtolower($form));
     }
     if (!isset(self::$forms[$form])) {
         $_form = null;
         if (!is_null($add_on)) {
             $_form = piklist::slug($add_on . ' ' . $form);
         }
         if (!isset(self::$forms[$_form])) {
             $_form = piklist::slug(piklist_add_on::current() . ' ' . $form);
         }
         if (!isset(self::$forms[$_form])) {
             return false;
         }
         $form = $_form;
     }
     $form = self::$forms[$form];
     if (!$form['data']['logged_in'] || $form['data']['logged_in'] && is_user_logged_in()) {
         $output = piklist::render('fields/form', $form, true);
         if ($return) {
             return $output;
         } else {
             echo $output;
         }
     } else {
         _e('You must be logged in to view this form.', 'piklist');
     }
 }
示例#12
0
 /**
  * register_add_on
  * Activate any add-ons that are activated.
  *
  * @param string $add_on Add-on slug.
  * @param string $file File name of the add-on plugin file.
  * @param string $path Path to the filename.
  * @param bool $plugin Whether or not its a plugin or included as an add-on in a plugin.
  *
  * @access private
  * @static
  * @since 1.0
  */
 private static function register_add_on($add_on, $file, $path, $plugin = false)
 {
     if (file_exists($file)) {
         $data = get_plugin_data($file);
         $data['plugin'] = $plugin;
         self::$available_add_ons[$add_on] = $data;
         if (self::is_active($add_on)) {
             include_once $file;
             $class_name = str_replace(piklist::$prefix, 'piklist_', piklist::slug($add_on));
             if (class_exists($class_name) && method_exists($class_name, '_construct') && !is_subclass_of($class_name, 'WP_Widget')) {
                 call_user_func(array($class_name, '_construct'));
             }
             piklist::$add_ons[$add_on]['path'] = $path . (!$plugin ? '/' . $add_on : '');
             $path = str_replace(chr(92), '/', str_replace('/add-ons', '', $path));
             piklist::$add_ons[$add_on]['url'] = plugins_url() . substr($path, strrpos($path, '/')) . '/add-ons/' . $add_on;
         }
     }
 }
示例#13
0
 /**
  * part_process
  * Convert old tabs to Workflow tabs.
  *
  * @param array $part The part object.
  *
  * @access public
  * @static
  * @since 1.0
  */
 public static function part_process($part)
 {
     $page = isset($_REQUEST['page']) ? esc_attr($_REQUEST['page']) : false;
     if ($page && empty($part['data']['flow'])) {
         $part['data']['flow'] = array($part['data']['setting']);
         if (!$part['data']['tab']) {
             $admin_pages = piklist_admin::get('admin_pages');
             foreach ($admin_pages as $admin_page) {
                 if ($_REQUEST['page'] == $admin_page['menu_slug']) {
                     break;
                 }
             }
             $part['data']['tab'] = array(isset($admin_page['default_tab']) ? piklist::slug($admin_page['default_tab']) : 'general');
         }
     }
     return $part;
 }
 public static function register_meta_boxes_callback($arguments)
 {
     global $post, $pagenow;
     extract($arguments);
     $current_user = wp_get_current_user();
     $data = get_file_data($path . '/parts/' . $folder . '/' . $part, apply_filters('piklist_get_file_data', array('name' => 'Title', 'context' => 'Context', 'description' => 'Description', 'capability' => 'Capability', 'role' => 'Role', 'priority' => 'Priority', 'order' => 'Order', 'type' => 'Post Type', 'lock' => 'Lock', 'collapse' => 'Collapse', 'status' => 'Status', 'new' => 'New', 'id' => 'ID', 'div' => 'DIV', 'template' => 'Template', 'box' => 'Meta Box'), 'meta-boxes'));
     $data = apply_filters('piklist_add_part', $data, 'meta-boxes');
     $types = empty($data['type']) ? get_post_types() : explode(',', $data['type']);
     foreach ($types as $type) {
         $type = trim($type);
         $statuses = !empty($data['status']) ? explode(',', $data['status']) : false;
         $ids = !empty($data['id']) ? explode(',', $data['id']) : false;
         $name = !empty($data['name']) ? $data['name'] : 'piklist_meta_' . piklist::slug($part);
         if (post_type_exists($type) && (!$data['capability'] || $data['capability'] && current_user_can(strtolower($data['capability']))) && (!$data['role'] || $data['role'] && piklist_user::current_user_role($data['role'])) && (!$data['status'] || $data['status'] && in_array($post->post_status, $statuses)) && (!$data['new'] || $data['new'] && $pagenow != 'post-new.php') && (!$data['id'] || $data['id'] && in_array($post->ID, $ids)) && (!$data['template'] || $data['template'] && $data['template'] == pathinfo(get_page_template_slug($post->ID), PATHINFO_FILENAME))) {
             $id = !empty($data['div']) ? $data['div'] : 'piklist_meta_' . piklist::slug($part);
             $textdomain = isset(piklist_add_on::$available_add_ons[$add_on]) && isset(piklist_add_on::$available_add_ons[$add_on]['TextDomain']) ? piklist_add_on::$available_add_ons[$add_on]['TextDomain'] : null;
             add_meta_box($id, !empty($textdomain) ? __($name, $textdomain) : $name, array('piklist_cpt', 'meta_box'), $type, !empty($data['context']) ? $data['context'] : 'normal', !empty($data['priority']) ? $data['priority'] : 'low', array('part' => $part, 'add_on' => $add_on, 'order' => $data['order'] ? $data['order'] : null, 'config' => $data));
             if (isset($data['box']) && strtolower($data['box']) == 'false') {
                 add_filter("postbox_classes_{$type}_{$id}", array('piklist_cpt', 'lock_meta_boxes'));
                 add_filter("postbox_classes_{$type}_{$id}", array('piklist_cpt', 'no_meta_boxes'));
                 if ($name == 'piklist_meta_' . piklist::slug($part)) {
                     add_filter("postbox_classes_{$type}_{$id}", array('piklist_cpt', 'no_title_meta_boxes'));
                 }
             } else {
                 if (isset($data['lock']) && strtolower($data['lock']) == 'true') {
                     add_filter("postbox_classes_{$type}_{$id}", array('piklist_cpt', 'lock_meta_boxes'));
                 }
                 if (isset($data['collapse']) && strtolower($data['collapse']) == 'true') {
                     add_filter("postbox_classes_{$type}_{$id}", array('piklist_cpt', 'collapse_meta_boxes'));
                 }
             }
             add_filter("postbox_classes_{$type}_{$id}", array('piklist_cpt', 'default_classes'));
         }
     }
 }