/** * Returns parameters values from the example, or posted or the default values * * @param string $algorithm * @param string $source_code * @param array $posted_params * @param array $examples * @param string $filename * @return array */ function get_param_values($algorithm, $source_code, $posted_params, $examples, $filename) { $params = get_params($algorithm, $source_code); if (empty($params)) { $values = array(); } else { if (isset($posted_params['example']) and isset($examples[$posted_params['example']])) { $values = combine_params_and_values($params, $examples[$posted_params['example']]['values']); } else { if (!($values = filter_params($params, $posted_params))) { $values = get_defaults($params, $filename); } } } return fill_missing_params($params, $values); }
/** * Update the additional meta for a post ID. * * @since 1.1 * @param int $post_id Post ID * @param [type] $new_meta New additional meta to update * @return void */ function update_additional_meta($post_id, $new_meta) { $old_meta = get_post_meta($post_id, '_ac_additional_content', true); if (!(!empty($new_meta) && is_array($new_meta))) { if ($old_meta) { // Delete old meta if new meta is empty. delete_post_meta($post_id, '_ac_additional_content'); } return; } $defaults = get_defaults(); // Validate the new settings foreach ($new_meta as $key => $setting) { if (!is_array($setting)) { unset($new_meta[$key]); continue; } $setting = array_merge($defaults, $setting); // Filter content for users without the unfiltered_html capability. $filter_content = current_user_can('unfiltered_html') ? false : true; /** * Filter html in additional content before it is saved to the database. * * @since 1.0 * @param bool $filter_content Filter content. True for users without the unfiltered_html capability. */ $filter_content = apply_filters('ac_additional_content_filter_html', $filter_content, $setting, $post_id); if ($filter_content) { $setting['additional_content'] = wp_filter_post_kses($setting['additional_content']); } if (is_empty_string($setting['additional_content'])) { unset($new_meta[$key]); continue; } foreach (array('prepend', 'append') as $addition) { if ('on' !== $setting[$addition]) { $setting[$addition] = $defaults[$addition]; } } $setting['priority'] = absint($setting['priority']) ? absint($setting['priority']) : 10; $new_meta[$key] = $setting; } $new_meta = array_values($new_meta); if (!empty($new_meta)) { $_new_meta = array(); $priorities = sort_by_priority($new_meta); foreach ($priorities as $priority) { foreach ($priority as $option) { $_new_meta[] = $option; } } if ($_new_meta != $old_meta) { update_post_meta($post_id, '_ac_additional_content', $_new_meta); } } elseif (empty($new_meta) && $old_meta) { delete_post_meta($post_id, '_ac_additional_content'); } }
/** * Display the additional content metabox. * * @since 1.0 * @return void */ function meta_box() { global $post; $additional = get_post_meta($post->ID, '_ac_additional_content', true); $defaults = get_defaults(); $metabox_defaults = metabox_defaults(); $text = metabox_text(); $class = metabox_classes(); $visible = ' js-visually-hidden'; $i = 0; // Start the output of the metabox echo "<style type='text/css'>\n\t\t\t#additional-content-container > div {\n\t\t\t\tbackground-color: #F9F9F9;\n\t\t\t\tborder: 1px solid #DFDFDF;\n\t\t\t\tpadding: 8px;\n\t\t\t\tmargin: 1em 0;\n\t\t\t}\n\t\t\t#additional-content-container > .sortable-placeholder {\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tborder: 1px dashed #b4b9be;\n\t\t }\n\t\t\t.ac-option {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t\t.ac-option-content {\n\t\t\t\tmargin-top: 0;\n\t\t\t\tmargin-bottom: .5em;\n\t\t\t}\n\t\t\t.ac-option-hide {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.js .js-visually-hidden {\n\t\t\t\tborder: 0;\n\t\t\t\tclip: rect(0 0 0 0);\n\t\t\t\theight: 1px;\n\t\t\t\tmargin: -1px;\n\t\t\t\toverflow: hidden;\n\t\t\t\tpadding: 0;\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 1px;\n\t\t\t}\n\t\t\t</style>"; $header = !empty($text['header_info']) ? "<p id='ac_info'>" . $text['header_info'] . '</p>' : ''; $describedby = !empty($header) ? ' aria-describedby="ac_info"' : ''; echo $header; wp_nonce_field('ac_additional_content_nonce', 'ac_additional_content_nonce'); echo '<div id="additional-content-container" role="region" aria-live="polite" aria-relevant="additions removals">'; if (!empty($additional)) { // Saved meta boxes. foreach ($additional as $fields) { $fields = array_merge($defaults, $fields); $label = label_text($fields); include 'partials/repeatable-fields.php'; $i++; } } else { // New meta box. $fields = $metabox_defaults; $visible = ' js-no-toggle'; $label = label_text($fields); include 'partials/repeatable-fields.php'; } $add_row = get_transient('additional_content_add_empty_row'); if ($add_row) { // Javascript is disabled. Let's add an empty metabox delete_transient('additional_content_add_empty_row'); $i++; $fields = $metabox_defaults; $visible = ''; $label = label_text($fields); include 'partials/repeatable-fields.php'; } echo '</div>'; echo '<p><input id="ac-add-row" class="button" type="submit" value="' . $text['add_more_row'] . '" name="ac-add_more"></p>'; }
/** * Returns validated additional content options. * * @since 1.0 * @param array $options Additional content options. * @return array Sanitized options. */ private function validate_options($options = array()) { $sanitized_options = array(); $defaults = get_defaults(); // Sanitize and validate the options. foreach ($options as $option) { if (!is_array($option)) { continue; } $option = array_merge($defaults, $option); // Continue if both prepend and append are empty. if (empty($option['prepend']) && empty($option['append'])) { continue; } // Continue if additional_content is empty. if (is_empty_string($option['additional_content'])) { continue; } // Use the same filters as the filters applied to the_content. // This prevents filter recursion. $option['additional_content'] = apply_filters('the_additional_content', $option['additional_content']); // Add the option after validation. $sanitized_options[] = $option; } return $sanitized_options; }