/** * 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; } } }
/** * 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); }