示例#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;
        }
    }
}
示例#2
0
 /**
  * check
  * Run all validation and sanitization checks against the rendered fields.
  *
  * @param array $stored_data The data to parse if the REQUEST object is not used by default.
  * @param string $fields_id The fields id.
  *
  * @return array Results of the check.
  *
  * @access public
  * @static
  * @since 1.0
  */
 public static function check($stored_data = null, $fields_id = null)
 {
     self::$valid = true;
     self::$checked = false;
     if (!$fields_id) {
         $fields_id = isset($_REQUEST[piklist::$prefix]['fields']) ? esc_attr($_REQUEST[piklist::$prefix]['fields']) : null;
     }
     if (!$fields_id || !($fields_data = get_transient(piklist::$prefix . $fields_id))) {
         return false;
     }
     $clones = array();
     foreach ($fields_data as $type => &$fields) {
         foreach ($fields as &$field) {
             if (!is_null($stored_data)) {
                 if ($field['prefix'] && isset($stored_data[piklist::$prefix . $field['scope']])) {
                     $request_data = $stored_data[piklist::$prefix . $field['scope']];
                 } elseif (!$field['prefix'] && isset($stored_data[$field['scope']])) {
                     $request_data = $stored_data[$field['scope']];
                 } else {
                     $request_data = $stored_data;
                 }
             } else {
                 if ($field['scope'] && isset($_REQUEST[piklist::$prefix . $field['scope']])) {
                     $request_data = $_REQUEST[piklist::$prefix . $field['scope']];
                 } elseif ($field['scope'] && $field['scope'] == piklist::$prefix && isset($_REQUEST[piklist::$prefix])) {
                     $request_data = $_REQUEST[piklist::$prefix];
                 } else {
                     $request_data = $_REQUEST;
                 }
             }
             if ($request_data && $field['field'] && $field['type'] != 'html') {
                 $field['errors'] = false;
                 if (!in_array($field['field'], $clones)) {
                     if (isset($request_data[$field['field']])) {
                         $field['request_value'] = $request_data[$field['field']];
                     } elseif (strstr($field['field'], ':')) {
                         $pluck = explode(':', $field['field']);
                         $pluck_field = array_pop($pluck);
                         if (is_numeric($pluck[count($pluck) - 1])) {
                             array_pop($pluck);
                         }
                         $pluck = implode(':', $pluck);
                         if (isset($request_data[$pluck][$pluck_field])) {
                             $field['request_value'] = $request_data[$pluck][$pluck_field];
                         } else {
                             $request_data = piklist::array_path_get($request_data, explode(':', $pluck));
                             if (isset($request_data[$pluck_field])) {
                                 $field['request_value'] = $request_data[$pluck_field];
                             } else {
                                 $field['request_value'] = $request_data ? piklist::pluck($request_data, $pluck_field) : null;
                             }
                         }
                     }
                 }
                 if ($field['type'] == 'group' && $field['field'] && !strstr($field['field'], ':')) {
                     $paths = piklist::array_paths($field['request_value']);
                     foreach ($paths as $path) {
                         $path = explode(':', $path);
                         if (is_numeric($path[count($path) - 1])) {
                             unset($path[count($path) - 1]);
                         }
                         $path = implode(':', $path);
                         $field_name = $field['field'] . ':' . $path;
                         if (!isset($fields[$path]) && !in_array($field_name, $clones)) {
                             $original = preg_replace('/\\:\\d+\\:/', ':0:', $field_name);
                             $original = explode(':', $original);
                             if (is_numeric($original[count($original) - 1])) {
                                 unset($original[count($original) - 1]);
                             }
                             $original = implode(':', $original);
                             if (isset($fields[$original])) {
                                 $clone = $fields[$original];
                                 $path = array_reverse(explode(':', $path));
                                 for ($i = 0; $i < count($path); $i++) {
                                     if (is_numeric($path[$i])) {
                                         $clone['index'] = (int) $path[$i];
                                         break;
                                     }
                                 }
                                 $path = array_reverse($path);
                                 $clone['field'] = $field_name;
                                 $clone['id'] = piklist_form::get_field_id($clone);
                                 $clone['name'] = piklist_form::get_field_name($clone);
                                 $clone['request_value'] = piklist::array_path_get($field['request_value'], $path);
                                 $original_path = explode(':', $original);
                                 $group = array_shift($original_path);
                                 $fields[$original]['request_value'] = piklist::array_path_get($field['request_value'], $original_path);
                                 $position = array_search($original, array_keys($fields)) + 1;
                                 $fields = array_slice($fields, 0, $position, true) + array($field_name => $clone) + array_slice($fields, $position, count($fields) - 1, true);
                                 array_push($clones, $field_name);
                             }
                         }
                     }
                 }
                 // Strip Slashes
                 $field['request_value'] = stripslashes_deep($field['request_value']);
                 // Required
                 if ($field['required']) {
                     $field = self::required_value($field);
                 }
                 // Sanitization
                 foreach ($field['sanitize'] as $sanitize) {
                     if (isset(self::$sanitization_rules[$sanitize['type']])) {
                         $sanitization = array_merge(self::$sanitization_rules[$sanitize['type']], $sanitize);
                         if (isset($sanitization['callback'])) {
                             $field = self::sanitize_value_callback($field, $sanitization);
                             if (strstr($field['field'], ':')) {
                                 $path = explode(':', $field['field']);
                                 $group = array_shift($path);
                                 piklist::array_path_set($fields[$group]['request_value'], $path, $field['request_value']);
                             }
                         }
                     } else {
                         $trigger_error = sprintf(__('Sanitization type "%s" is not valid.', 'piklist'), $sanitize['type']);
                         trigger_error($trigger_error, E_USER_NOTICE);
                     }
                 }
                 // Validation
                 foreach ($field['validate'] as $validate) {
                     if (isset(self::$validation_rules[$validate['type']])) {
                         $validation = array_merge(self::$validation_rules[$validate['type']], $validate);
                         if (isset($validation['rule'])) {
                             $field = self::validate_value_rule($field, $validation);
                         }
                         if (isset($validation['callback'])) {
                             $field = self::validate_value_callback($field, $validation, $fields_data);
                         }
                     } else {
                         $trigger_error = sprintf(__('Validation type "%s" is not valid.', 'piklist'), $validate['type']);
                         trigger_error($trigger_error, E_USER_NOTICE);
                     }
                 }
             }
         }
     }
     self::$checked = true;
     self::set_data($fields_id, $fields_data);
     return array('valid' => self::$valid, 'type' => $_SERVER['REQUEST_METHOD'], 'fields_data' => $fields_data);
 }