Пример #1
0
/**
 * Calculate the score of a post
 *
 * @access public
 * @param object $post  A WP_Post obejct.
 * @param array  $data  The relevant audit data.
 * @return array $array The score and audit data.
 */
function msa_calculate_score($post, $data)
{
    $score_data = array();
    $score = 0;
    $weight = 0;
    $conditions = msa_get_conditions();
    foreach ($conditions as $key => $condition) {
        // Greater Than.
        if (1 === $condition['comparison'] && isset($condition['min'])) {
            if (0 !== $condition['min']) {
                $value = min($data[$key] / $condition['min'], 1);
            } else {
                $value = 1;
            }
        }
        // Less Than.
        if (2 === $condition['comparison'] && isset($condition['max'])) {
            if (0 !== $condition['max']) {
                $value = 1 - min($data[$key] / $condition['max'], 1);
            } else {
                $value = 0;
            }
        }
        // Range.
        if (3 === $condition['comparison'] && isset($condition['max']) && isset($condition['min'])) {
            $range = $condition['max'] - $condition['min'] + 2;
            $mean = ($condition['max'] + $condition['min']) / 2;
            $value = 1 - min(floor(abs($data[$key] - $mean)) / floor($range / 2), 1);
        }
        // Convert to bool if needed.
        $value = 1 === $condition['value'] && 0 !== $value ? 1 : $value;
        $score_data[$key] = $value;
        $score += $value * $condition['weight'];
        $weight += $condition['weight'];
    }
    // Get the score data for condition categories.
    $condition_categories = msa_get_condition_categories();
    foreach ($condition_categories as $key => $condition_category) {
        $score_data[$key] = msa_get_condition_catergory_score($key, $score_data);
    }
    $score = 0 !== $weight ? round($score / $weight, 2) : 0;
    return array('score' => $score, 'data' => $score_data);
}
        /**
         * Extra controls to be displayed between bulk actions and pagination
         *
         * @access protected
         *
         * @param mixed $which Which tablenav the top or bottom.
         */
        protected function extra_tablenav($which)
        {
            $conditions = msa_get_conditions();
            $attributes = msa_get_attributes();
            if ('top' === $which) {
                ?>
<div class="alignleft actions bulkactions"><?php 
                foreach ($conditions as $key => $condition) {
                    if (isset($condition['filter'])) {
                        $value = '';
                        if (isset($_GET[$condition['filter']['name']])) {
                            // Input var okay.
                            $value = sanitize_text_field(wp_unslash($_GET[$condition['filter']['name']]));
                            // Input var okay.
                        }
                        $options = '';
                        $condition = apply_filters('msa_audit_posts_filter_' . $key, $condition);
                        if (1 === $condition['comparison']) {
                            $options .= '<option value="less-' . $condition['min'] . '" ' . selected('less-' . $condition['min'], $value, false) . '>' . __('Less than ', 'msa') . ' ' . $condition['min'] . ' ' . $condition['units'] . '</option>';
                            $options .= '<option value="more-' . $condition['min'] . '" ' . selected('more-' . $condition['min'], $value, false) . '>' . __('More than ', 'msa') . ' ' . $condition['min'] . ' ' . $condition['units'] . '</option>';
                        } else {
                            if (2 === $condition['comparison']) {
                                $options .= '<option value="less-' . $condition['max'] . '" ' . selected('less-' . $condition['max'], $value, false) . '>' . __('Less than ', 'msa') . ' ' . $condition['max'] . ' ' . $condition['units'] . '</option>';
                                $options .= '<option value="more-' . $condition['max'] . '" ' . selected('more-' . $condition['max'], $value, false) . '>' . __('More than ', 'msa') . ' ' . $condition['max'] . ' ' . $condition['units'] . '</option>';
                            } else {
                                if (3 === $condition['comparison']) {
                                    $options .= '<option value="less-' . $condition['max'] . '" ' . selected('less-' . $condition['max'], $value, false) . '>' . __('Less than ', 'msa') . ' ' . $condition['max'] . ' ' . $condition['units'] . '</option>';
                                    $options .= '<option value="more-' . $condition['max'] . '" ' . selected('more-' . $condition['max'], $value, false) . '>' . __('More than ', 'msa') . ' ' . $condition['max'] . ' ' . $condition['units'] . '</option>';
                                }
                            }
                        }
                        ?>
<div class="msa-filter-container msa-filter-conditions-container filter-<?php 
                        esc_attr_e($key);
                        ?>
">
			<!-- <label class="msa-filter-label"><?php 
                        esc_attr_e($condition['filter']['label']);
                        ?>
</label> -->
			<select class="msa-filter" name="<?php 
                        esc_attr_e($condition['filter']['name']);
                        ?>
">
				<option value="" <?php 
                        selected('', $value, true);
                        ?>
><?php 
                        esc_attr_e('All ' . $condition['filter']['label'], 'msa');
                        ?>
</option>
				<?php 
                        echo $options;
                        // WPCS: XSS ok.
                        ?>
			</select>
		</div> <?php 
                    }
                }
                foreach ($attributes as $key => $attribute) {
                    if (isset($attribute['filter'])) {
                        $value = '';
                        if (isset($_GET[$attribute['filter']['name']])) {
                            // Input var okay.
                            $value = sanitize_text_field(wp_unslash($_GET[$attribute['filter']['name']]));
                            // Input var okay.
                        }
                        $attribute['filter']['options'] = apply_filters('msa_filter_attribute_' . $key, $attribute['filter']['options'], $key);
                        ?>

		<div class="msa-filter-container msa-filter-attributes-container filter-<?php 
                        esc_attr_e($key);
                        ?>
">
			<!-- <label class="msa-filter-label"><?php 
                        esc_attr_e($attribute['filter']['label']);
                        ?>
</label> -->
			<select class="msa-filter" name="<?php 
                        esc_attr_e($attribute['filter']['name']);
                        ?>
">
				<option value="" <?php 
                        selected('', $value, true);
                        ?>
><?php 
                        esc_attr_e('All ' . $attribute['filter']['label'], 'msa');
                        ?>
</option>
				<?php 
                        foreach ($attribute['filter']['options'] as $option) {
                            ?>
					<option value="<?php 
                            esc_attr_e($option['value']);
                            ?>
" <?php 
                            selected($option['value'], $value, true);
                            ?>
><?php 
                            esc_attr_e($option['name']);
                            ?>
</option>
				<?php 
                        }
                        ?>
			</select>
		</div>

	<?php 
                    }
                }
                ?>
<button class="msa-filter-button button"><?php 
                esc_attr_e('Filter', 'msa');
                ?>
</button>
				<button class="msa-clear-filters-button button"><?php 
                esc_attr_e('Clear Filters', 'msa');
                ?>
</button>
				</div><?php 
            }
            // Output stlying for the condition categories.
            $condition_categories = msa_get_condition_categories();
            ?>
<style>
			<?php 
            foreach ($condition_categories as $key => $condition_category) {
                ?>
th#<?php 
                esc_attr_e($key);
                ?>
.manage-column.column-<?php 
                esc_attr_e($key);
                ?>
,
				.<?php 
                esc_attr_e($key);
                ?>
.column-<?php 
                esc_attr_e($key);
                ?>
 {
					font-weight: bold;
					border-left: 1px solid #dfdfdf;
					background: linear-gradient(rgba(0, 0, 0, 0.02), rgba(0, 0, 0, 0.02));
				}
			<?php 
            }
            ?>
			</style><?php 
        }
Пример #3
0
				<?php 
    do_action('msa_single_post_sidebar');
    ?>

			</div>

		</div>

	</div>

	<div class="msa-column msa-left-column metabox-holder">

		<div class="msa-column-container">

			<?php 
    $condition_categories = msa_get_condition_categories();
    foreach ($condition_categories as $key => $condition_category) {
        ?>

				<div class="postbox" id="<?php 
        esc_attr_e($key);
        ?>
">
					<?php 
        echo apply_filters('msa_condition_category_content', $key, $post, $data, $score);
        // WPCS: XSS ok.
        ?>
				</div>

			<?php 
    }
Пример #4
0
/**
 * Prints the box content.
 *
 * @access public
 * @param object $post A WP_Post obejct.
 * @return void
 */
function msa_meta_box_callback($post)
{
    // Get the latest audit.
    $audit_model = new MSA_Audits_Model();
    $audit = $audit_model->get_latest();
    // Check to see if we have an audit.
    if (isset($audit)) {
        $post_id = -1;
        if (isset($_GET['post'])) {
            // Input var okay.
            $post_id = sanitize_text_field(wp_unslash($_GET['post']));
            // Input var okay.
        }
        $audit = $audit_model->get_data_from_id($audit['id']);
        $audit_posts_model = new MSA_Audit_Posts_Model();
        $audit_post = $audit_posts_model->get_data_from_id($audit['id'], $post_id);
        if ($audit_post) {
            $post = (object) $audit_post['post'];
            $data = $audit_post['data']['values'];
            $score = $audit_post['data']['score'];
            $condition_categories = msa_get_condition_categories();
            $user = get_userdata($audit['user']);
            do_action('msa_before_post_meta_box', $audit['id'], $post_id);
            ?>
<div class="msa-post-meta-container msa-post-meta-audit-meta-attributes">
				<p class="msa-post-meta-attribute"><?php 
            esc_attr_e('Score: ', 'msa');
            ?>
</p>
				<p class="msa-post-meta-attribute"><?php 
            esc_attr_e('From Audit: ', 'msa');
            ?>
</p>
				<p class="msa-post-meta-attribute"><?php 
            esc_attr_e('Created On: ', 'msa');
            ?>
</p>
				<p class="msa-post-meta-attribute"><?php 
            esc_attr_e('Created By: ', 'msa');
            ?>
</p>
			</div>

			<div class="msa-post-meta-container msa-post-meta-audit-meta-values">
				<p class="msa-post-meta-value msa-post-status-bg msa-post-status-bg-<?php 
            esc_attr_e(msa_get_score_status($score['score']));
            ?>
"><?php 
            esc_attr_e(round($score['score'] * 100, 2));
            ?>
%</p>
				<p class="msa-post-meta-value"><a href="<?php 
            esc_attr_e(msa_get_single_audit_link($audit['id']));
            ?>
" target="_blank"><?php 
            esc_attr_e($audit['name']);
            ?>
</a></p>
				<p class="msa-post-meta-value"><?php 
            esc_attr_e(date('M j, Y', strtotime($audit['date'])));
            ?>
</p>
				<p class="msa-post-meta-value"><?php 
            esc_attr_e($user->display_name);
            ?>
</p>
			</div><?php 
            foreach ($condition_categories as $key => $condition_category) {
                ?>
<div class="postbox" id="<?php 
                esc_attr_e($key);
                ?>
" style="pointer-events: none;">
					<?php 
                echo apply_filters('msa_condition_category_content', $key, $post, $data, $score);
                // WPCS: XSS ok.
                ?>
				</div><?php 
            }
            do_action('msa_after_post_meta_box', $audit['id'], $post_id);
        }
    }
    wp_enqueue_style('msa-all-audits-css', MY_SITE_AUDIT_PLUGIN_URL . '/css/all-audits.css');
    wp_enqueue_style('msa-post-meta-css', MY_SITE_AUDIT_PLUGIN_URL . '/css/post-meta.css');
    wp_enqueue_style('msa-common-css', MY_SITE_AUDIT_PLUGIN_URL . '/css/common.css');
}
Пример #5
0
/**
 * Add all the screen option columns
 *
 * @access public
 * @param mixed $columns  The original columns.
 * @return array $columns The modified columns.
 */
function msa_all_audits_add_column($columns)
{
    /**
     * Conditions
     */
    $condition_categories = msa_get_condition_categories();
    foreach ($condition_categories as $key => $condition_category) {
        $conditions = msa_get_conditions_from_category($key);
        foreach ($conditions as $key => $condition) {
            $columns[$key] = $condition['name'];
        }
    }
    /**
     * Attributes
     */
    $attributes = msa_get_attributes();
    foreach ($attributes as $slug => $attribute) {
        if (isset($attribute['name'])) {
            $columns[$slug] = $attribute['name'];
        }
    }
    return $columns;
}
Пример #6
0
/**
 * Register a new condition
 *
 * @access public
 * @param mixed $condition  The slug for the new condition.
 * @param array $args       The args for the new condition.
 * @return array $args      The args for the new condition.
 */
function msa_register_condition($condition, $args = array())
{
    // Make sure this is not already a condition category.
    $condition_categories = msa_get_condition_categories();
    if (isset($condition_categories[$condition])) {
        return false;
    }
    global $msa_conditions;
    if (!is_array($msa_conditions)) {
        $msa_conditions = array();
    }
    // Default condition.
    $default = array('name' => __('Condition', 'msa'), 'weight' => 1, 'comparison' => 0, 'value' => 0, 'max' => 0, 'min' => 0);
    $args = array_merge($default, $args);
    // Add the condition to the global conditions array.
    $msa_conditions[$condition] = apply_filters('msa_register_condition_args', $args);
    /**
     * Fires after a condition is registered.
     *
     * @param string $condition Condition.
     * @param array $args      Arguments used to register the condition.
     */
    do_action('msa_registed_condition', $condition, $args);
    return $args;
}
Пример #7
0
/**
 * Display the conditions within a category
 *
 * @access public
 * @param mixed  $category The condition category.
 * @param object $post     The WP_Post object.
 * @param mixed  $data     The audit data.
 * @param mixed  $score    The post score.
 * @return string $output The HTML output of the specifc condition category.
 */
function msa_display_condition_category_data($category, $post, $data, $score)
{
    $total_weight = msa_get_total_conditions_weight();
    $conditions = msa_get_conditions_from_category($category);
    $condition_categories = msa_get_condition_categories();
    $conditions_weight = msa_get_total_weight_for_conditions($conditions);
    $post_score = $score['data'];
    $overall_score = 0;
    $output = '<table class="wp-list-table widefat striped posts msa-audit-table">
			<thead>
				<th class="msa-condition-score-col">' . __('Score', 'msa') . '</th>
				<th class="msa-condition-weight-col">' . __('Weight', 'msa') . '</th>
				<th class="msa-condition-attribute-col">' . __('Attribute', 'msa') . '</th>
				<th class="msa-condition-goal-col">' . __('Goal', 'msa') . '</th>
				<th class="msa-condition-value-col">' . __('Value', 'msa') . '</th>
			</thead>

			<tbody>';
    foreach ($conditions as $key => $condition) {
        // Goal.
        if (1 === $condition['comparison']) {
            $goal = __('Greater Than ' . $condition['min'], 'msa');
        } else {
            if (2 === $condition['comparison']) {
                $goal = __('Less Than ' . $condition['max'], 'msa');
            } else {
                if (3 === $condition['comparison']) {
                    $goal = __('In Between ' . $condition['min'] . ' - ' . $condition['max'], 'msa');
                }
            }
        }
        $score = apply_filters('msa_condition_category_content_score', round($post_score[$key] * 100) . '%', $data, $post, $key);
        $weight = apply_filters('msa_condition_category_content_weight', round($condition['weight'] / $total_weight * 100) . '%', $data, $post, $key);
        $name = apply_filters('msa_condition_category_content_name', $condition['name'], $data, $post, $key);
        $goal = apply_filters('msa_condition_category_content_goal', $goal, $data, $post, $key, $condition);
        $value = apply_filters('msa_condition_category_content_value', $data[$key], $data, $post, $key);
        $more_info = '';
        if (isset($condition['description'])) {
            $learn_more = '';
            if (isset($condition['learn_more_link'])) {
                $learn_more = '<div class="msa-modal-learn-more-link">
					<a href="' . $condition['learn_more_link'] . '" target="_blank">' . __('Learn More', 'msa') . '</a>
				</div>';
            }
            $more_info = '<span class="msa-condition-more-info" data-condition="' . $key . '">
				<i class="fa fa-info-circle"></i>
				<div class="msa-modal" data-condition="' . $key . '">
					<div class="msa-modal-container">
						<div class="msa-modal-title">
							<h3>' . $condition['name'] . '</h3>
							<a class="msa-modal-close">' . __('Close', 'msa') . '</a>
						</div>
						<div class="msa-modal-content">' . $condition['description'] . '</div>' . $learn_more . '</div>
				</div>
			</span>';
        }
        $output .= '<tr class="msa-post-status msa-post-status-' . msa_get_score_status($post_score[$key]) . '">
			<td class="msa-condition-score">' . $score . '</td>
			<td class="msa-condition-weight">' . $weight . '</td>
			<td class="msa-condition-name">' . $name . '</td>
			<td class="msa-condition-goal">' . $goal . '</td>
			<td class="msa-condition-value">' . $value . $more_info . '</td>
		</tr>';
        $overall_score += $post_score[$key] * $condition['weight'];
    }
    $output .= '</tbody>

		</table>
	</div>';
    $output = '<h3 class="msa-condition-category-heading hndle ui-sortable-handle"><span class="msa-condition-category-score msa-post-status-bg msa-post-status-bg-' . msa_get_score_status($overall_score / $conditions_weight) . '">' . round($overall_score / $conditions_weight * 100, 2) . '%</span> <span>' . $condition_categories[$category]['name'] . '</span><span style="float:right;">' . __('Weight: ', 'msa') . ' ' . round($conditions_weight / $total_weight * 100, 2) . '%</span></h3><div class="inside">' . $output;
    return $output;
}