: <?php echo $total; ?> </p> <p><?php _e('Average', 'formidable'); ?> : <?php echo FrmProFieldsHelper::get_field_stats($field->id, 'average'); ?> </p> <p><?php _e('Median', 'formidable'); ?> : <?php echo FrmProFieldsHelper::get_field_stats($field->id, 'median'); ?> </p> <?php } else { if ($field->type == 'user_id') { $user_ids = $wpdb->get_col("SELECT ID FROM {$wpdb->users} ORDER BY display_name ASC"); $submitted_user_ids = $frm_entry_meta->get_entry_metas_for_field($field->id, '', '', array('unique' => true)); $not_submitted = array_diff($user_ids, $submitted_user_ids); ?> <p><?php _e('Percent of users submitted', 'formidable'); ?> : <?php echo round(count($submitted_user_ids) / count($user_ids) * 100, 2); ?>
/** * Returns stats requested through the [frm-stats] shortcode * * @param array $atts */ public static function stats_shortcode($atts) { $defaults = array('id' => false, 'type' => 'total', 'user_id' => false, 'value' => false, 'round' => 100, 'limit' => '', 'drafts' => false); $sc_atts = shortcode_atts($defaults, $atts); // Combine arrays - DO NOT use array_merge here because numeric keys are renumbered $atts = (array) $atts + (array) $sc_atts; if (!$atts['id']) { return; } $atts['user_id'] = FrmAppHelper::get_user_id_param($atts['user_id']); $new_atts = $atts; foreach ($defaults as $unset => $val) { unset($new_atts[$unset]); } return FrmProFieldsHelper::get_field_stats($atts['id'], $atts['type'], $atts['user_id'], $atts['value'], $atts['round'], $atts['limit'], $new_atts, $atts['drafts']); }
function widget($args, $instance) { global $wpdb; $display = FrmProDisplay::getOne($instance['display_id'], false, true); $title = apply_filters('widget_title', empty($instance['title']) && $display ? $display->post_title : $instance['title']); $limit = empty($instance['limit']) ? ' LIMIT 100' : " LIMIT {$instance['limit']}"; $post_id = !$display || empty($display->frm_post_id) ? $instance['post_id'] : $display->frm_post_id; $page_url = get_permalink($post_id); $order_by = ''; $cat_field = false; if ($display && is_numeric($display->frm_form_id) && !empty($display->frm_form_id)) { //Set up order for Entries List Widget if (isset($display->frm_order_by) && !empty($display->frm_order_by)) { //Get only the first order field and order $order_field = reset($display->frm_order_by); $order = reset($display->frm_order); FrmAppHelper::esc_order_by($order); if ($order_field == 'rand') { //If random is set, set the order to random $order_by = ' RAND()'; } else { if (is_numeric($order_field)) { //If ordering by a field //Get all post IDs for this form $posts = FrmDb::get_results($wpdb->prefix . 'frm_items', array('form_id' => $display->frm_form_id, 'post_id >' => 1, 'is_draft' => 0), 'id, post_id'); $linked_posts = array(); foreach ($posts as $post_meta) { $linked_posts[$post_meta->post_id] = $post_meta->id; } //Get all field information $o_field = FrmField::getOne($order_field); $query = 'SELECT m.id FROM ' . $wpdb->prefix . 'frm_items m INNER JOIN '; $where = array(); //create query with ordered values //if field is some type of post field if (isset($o_field->field_options['post_field']) && $o_field->field_options['post_field']) { if ($o_field->field_options['post_field'] == 'post_custom' && !empty($linked_posts)) { //if field is custom field $where['pm.post_id'] = array_keys($linked_posts); FrmDb::get_where_clause_and_values($where); array_unshift($where['values'], $o_field->field_options['custom_field']); $query .= $wpdb->postmeta . ' pm ON pm.post_id=m.post_id AND pm.meta_key=%s ' . $where['where'] . ' ORDER BY CASE when pm.meta_value IS NULL THEN 1 ELSE 0 END, pm.meta_value ' . $order; } else { if ($o_field->field_options['post_field'] != 'post_category' && !empty($linked_posts)) { //if field is a non-category post field $where['p.ID'] = array_keys($linked_posts); FrmDb::get_where_clause_and_values($where); $query .= $wpdb->posts . ' p ON p.ID=m.post_id ' . $where['where'] . ' ORDER BY CASE p.' . sanitize_title($o_field->field_options['post_field']) . ' WHEN "" THEN 1 ELSE 0 END, p.' . sanitize_title($o_field->field_options['post_field']) . ' ' . $order; } } } else { //if field is a normal, non-post field $where['em.field_id'] = $o_field->id; FrmDb::get_where_clause_and_values($where); $query .= $wpdb->prefix . 'frm_item_metas em ON em.item_id=m.id ' . $where['where'] . ' ORDER BY CASE when em.meta_value IS NULL THEN 1 ELSE 0 END, em.meta_value' . ($o_field->type == 'number' ? ' +0 ' : '') . ' ' . $order; } //Get ordered values if (!empty($where)) { $metas = $wpdb->get_results($wpdb->prepare($query, $where['values'])); } else { $metas = false; } unset($query, $where); if (!empty($metas)) { $order_by_array = array(); foreach ($metas as $meta) { $order_by_array[] = $wpdb->prepare('it.id=%d DESC', $meta->id); } $order_by = implode(', ', $order_by_array); unset($order_by_array); } else { $order_by .= 'it.created_at ' . $order; } unset($metas); } else { if (!empty($order_field)) { //If ordering by created_at or updated_at $order_by = 'it.' . sanitize_title($order_field) . ' ' . $order; } } } if (!empty($order_by)) { $order_by = ' ORDER BY ' . $order_by; } } if (isset($instance['cat_list']) && (int) $instance['cat_list'] == 1 && is_numeric($instance['cat_id'])) { if ($cat_field = FrmField::getOne($instance['cat_id'])) { $categories = maybe_unserialize($cat_field->options); } } } echo $args['before_widget']; if ($title) { echo $args['before_title'] . $title . $args['after_title']; } echo '<ul id="frm_entry_list' . ($display ? $display->frm_form_id : '') . '">' . "\n"; //if Listing entries by category if (isset($instance['cat_list']) && (int) $instance['cat_list'] == 1 && isset($categories) && is_array($categories)) { foreach ($categories as $cat_order => $cat) { if ($cat == '') { continue; } echo '<li>'; if (isset($instance['cat_name']) && (int) $instance['cat_name'] == 1 && $cat_field) { echo '<a href="' . esc_url(add_query_arg(array('frm_cat' => $cat_field->field_key, 'frm_cat_id' => $cat_order), $page_url)) . '">'; } echo $cat; if (isset($instance['cat_count']) && (int) $instance['cat_count'] == 1) { echo ' (' . FrmProFieldsHelper::get_field_stats($instance['cat_id'], 'count', false, $cat) . ')'; } if (isset($instance['cat_name']) && (int) $instance['cat_name'] == 1) { echo '</a>'; } else { $entry_ids = FrmEntryMeta::getEntryIds(array('meta_value like' => $cat, 'fi.id' => $instance['cat_id'])); $items = false; if ($entry_ids) { $items = FrmEntry::getAll(array('it.id' => $entry_ids, 'it.form_id' => (int) $display->frm_form_id), $order_by, $limit); } if ($items) { echo '<ul>'; foreach ($items as $item) { $url_id = $display->frm_type == 'id' ? $item->id : $item->item_key; $current = FrmAppHelper::simple_get($display->frm_param) == $url_id ? ' class="current_page"' : ''; if ($item->post_id) { $entry_link = get_permalink($item->post_id); } else { $entry_link = add_query_arg(array($display->frm_param => $url_id), $page_url); } echo '<li' . $current . '><a href="' . esc_url($entry_link) . '">' . FrmAppHelper::kses($item->name) . '</a></li>' . "\n"; } echo '</ul>'; } } echo '</li>'; } } else { // if not listing entries by category if ($display) { $items = FrmEntry::getAll(array('it.form_id' => $display->frm_form_id, 'is_draft' => '0'), $order_by, $limit); } else { $items = array(); } foreach ($items as $item) { $url_id = $display->frm_type == 'id' ? $item->id : $item->item_key; $current = FrmAppHelper::simple_get($display->frm_param) == $url_id ? ' class="current_page"' : ''; echo '<li' . $current . '><a href="' . esc_url(add_query_arg(array($display->frm_param => $url_id), $page_url)) . '">' . FrmAppHelper::kses($item->name) . '</a></li>' . "\n"; } } echo "</ul>\n"; echo $args['after_widget']; }
/** * Returns stats requested through the [frm-stats] shortcode * * @param array $atts */ function stats_shortcode($atts) { $defaults = array('id' => false, 'type' => 'total', 'user_id' => false, 'value' => false, 'round' => 100, 'limit' => ''); extract(shortcode_atts($defaults, $atts)); if (!$id) { return; } $user_id = FrmProAppHelper::get_user_id_param($user_id); foreach ($defaults as $unset => $val) { unset($atts[$unset]); } return FrmProFieldsHelper::get_field_stats($id, $type, $user_id, $value, $round, $limit, $atts); }
function widget($args, $instance) { global $frmdb, $wpdb, $frm_entry, $frmpro_display, $frm_entry_meta; extract($args); $display = $frmpro_display->getOne($instance['display_id'], false, true); $title = apply_filters('widget_title', (empty($instance['title']) and $display) ? $display->post_title : $instance['title']); $limit = empty($instance['limit']) ? ' LIMIT 100' : " LIMIT {$instance['limit']}"; $post_id = (!$display or empty($display->frm_post_id)) ? $instance['post_id'] : $display->frm_post_id; $page_url = get_permalink($post_id); $order_by = ''; if ($display && is_numeric($display->frm_form_id) && !empty($display->frm_form_id)) { //Set up order for Entries List Widget if (isset($display->frm_order_by) && !empty($display->frm_order_by)) { //Get only the first order field and order $order_field = reset($display->frm_order_by); $order = reset($display->frm_order); if ($order_field == 'rand') { //If random is set, set the order to random $order_by = ' RAND()'; } else { if (is_numeric($order_field)) { //If ordering by a field //Get all post IDs for this form $posts = $wpdb->get_results($wpdb->prepare("SELECT id, post_id FROM {$wpdb->prefix}frm_items WHERE form_id=%d and post_id>%d AND is_draft=%d", $display->frm_form_id, 1, 0)); $linked_posts = array(); foreach ($posts as $post_meta) { $linked_posts[$post_meta->post_id] = $post_meta->id; } //Get all field information $frm_field = new FrmField(); $o_field = $frm_field->getOne($order_field); //create query with ordered values if (isset($o_field->field_options['post_field']) and $o_field->field_options['post_field']) { //if field is some type of post field if ($o_field->field_options['post_field'] == 'post_custom' && !empty($linked_posts)) { //if field is custom field $query = "SELECT m.id FROM {$wpdb->prefix}frm_items m INNER JOIN {$wpdb->postmeta} pm ON pm.post_id=m.post_id AND pm.meta_key='" . $o_field->field_options['custom_field'] . "' WHERE pm.post_id in (" . implode(',', array_keys($linked_posts)) . ") ORDER BY CASE when pm.meta_value IS NULL THEN 1 ELSE 0 END, pm.meta_value {$order}"; } else { if ($o_field->field_options['post_field'] != 'post_category' && !empty($linked_posts)) { //if field is a non-category post field $query = "SELECT m.id FROM {$wpdb->prefix}frm_items m INNER JOIN {$wpdb->posts} p ON p.ID=m.post_id WHERE p.ID in (" . implode(',', array_keys($linked_posts)) . ") ORDER BY CASE p." . $o_field->field_options['post_field'] . " WHEN '' THEN 1 ELSE 0 END, p." . $o_field->field_options['post_field'] . " {$order}"; } } } else { //if field is a normal, non-post field $query = "SELECT m.id FROM {$wpdb->prefix}frm_items m INNER JOIN {$wpdb->prefix}frm_item_metas em ON em.item_id=m.id WHERE em.field_id={$o_field->id} ORDER BY CASE when em.meta_value IS NULL THEN 1 ELSE 0 END, em.meta_value" . ($o_field->type == 'number' ? ' +0 ' : '') . " {$order}"; } //Get ordered values $metas = $wpdb->get_results($query); unset($query); if (is_array($metas) and !empty($metas)) { $desc_order = ' DESC'; foreach ($metas as $meta) { $order_by .= $wpdb->prepare('it.id=%d' . $desc_order . ', ', $meta->id); } $order_by = rtrim($order_by, ', '); } else { $order_by .= 'it.created_at ' . $order; } } else { if (!empty($order_field)) { //If ordering by created_at or updated_at $order_by = 'it.' . $order_field . ' ' . $order; } } } if (!empty($order_by)) { $order_by = ' ORDER BY ' . $order_by; } } if (isset($instance['cat_list']) and (int) $instance['cat_list'] == 1 and is_numeric($instance['cat_id'])) { global $frm_field; if ($cat_field = $frm_field->getOne($instance['cat_id'])) { $categories = maybe_unserialize($cat_field->options); } } } echo $before_widget; if ($title) { echo $before_title . $title . $after_title; } echo "<ul id='frm_entry_list" . ($display ? $display->frm_form_id : '') . "'>\n"; //if Listing entries by category if (isset($instance['cat_list']) and (int) $instance['cat_list'] == 1 and isset($categories) and is_array($categories)) { foreach ($categories as $cat_order => $cat) { if ($cat == '') { continue; } echo '<li>'; if (isset($instance['cat_name']) and (int) $instance['cat_name'] == 1) { echo '<a href="' . add_query_arg(array('frm_cat' => $cat_field->field_key, 'frm_cat_id' => $cat_order), $page_url) . '">'; } echo $cat; if (isset($instance['cat_count']) and (int) $instance['cat_count'] == 1) { echo ' (' . FrmProFieldsHelper::get_field_stats($instance['cat_id'], 'count', false, $cat) . ')'; } if (isset($instance['cat_name']) and (int) $instance['cat_name'] == 1) { echo '</a>'; } else { $entry_ids = $frm_entry_meta->getEntryIds("meta_value LIKE '%{$cat}%' and fi.id=" . $instance['cat_id']); $items = false; if ($entry_ids) { $items = $frm_entry->getAll("it.id in (" . implode(',', $entry_ids) . ") and it.form_id =" . (int) $display->frm_form_id, $order_by, $limit); } if ($items) { echo '<ul>'; foreach ($items as $item) { $url_id = $display->frm_type == 'id' ? $item->id : $item->item_key; $current = (isset($_GET[$display->frm_param]) and $_GET[$display->frm_param] == $url_id) ? ' class="current_page"' : ''; if ($item->post_id) { $entry_link = get_permalink($item->post_id); } else { $entry_link = add_query_arg(array($display->frm_param => $url_id), $page_url); } echo '<li' . $current . '><a href="' . $entry_link . '">' . $item->name . '</a></li>' . "\n"; } echo '</ul>'; } } echo '</li>'; } } else { // if not listing entries by category if ($display) { $items = $frm_entry->getAll(array('it.form_id' => $display->frm_form_id, 'is_draft' => '0'), $order_by, $limit); } else { $items = array(); } foreach ($items as $item) { $url_id = $display->frm_type == 'id' ? $item->id : $item->item_key; $current = (isset($_GET[$display->frm_param]) and $_GET[$display->frm_param] == $url_id) ? ' class="current_page"' : ''; echo "<li" . $current . "><a href='" . add_query_arg(array($display->frm_param => $url_id), $page_url) . "'>" . $item->name . "</a></li>\n"; } } echo "</ul>\n"; echo $after_widget; }