コード例 #1
0
/**
 * 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);
}
コード例 #2
0
/**
 * 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');
    }
}
コード例 #3
0
/**
 * 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>';
}
コード例 #4
0
 /**
  * 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;
 }