Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/wpforms-.../src/Lite/Reports
File: EntriesCount.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace WPForms\Lite\Reports;
[2] Fix | Delete
[3] Fix | Delete
/**
[4] Fix | Delete
* Generate form submissions reports.
[5] Fix | Delete
*
[6] Fix | Delete
* @since 1.5.4
[7] Fix | Delete
*/
[8] Fix | Delete
class EntriesCount {
[9] Fix | Delete
[10] Fix | Delete
/**
[11] Fix | Delete
* Constructor.
[12] Fix | Delete
*
[13] Fix | Delete
* @since 1.5.4
[14] Fix | Delete
*/
[15] Fix | Delete
public function __construct() {}
[16] Fix | Delete
[17] Fix | Delete
/**
[18] Fix | Delete
* Get entries count grouped by form.
[19] Fix | Delete
* Main point of entry to fetch form entry count data from DB.
[20] Fix | Delete
* Cache the result.
[21] Fix | Delete
*
[22] Fix | Delete
* @since 1.5.4
[23] Fix | Delete
*
[24] Fix | Delete
* @return array
[25] Fix | Delete
*/
[26] Fix | Delete
public function get_by_form() {
[27] Fix | Delete
[28] Fix | Delete
// Get form IDs.
[29] Fix | Delete
$forms = wpforms()->obj( 'form' )->get( '', [ 'fields' => 'ids' ] );
[30] Fix | Delete
[31] Fix | Delete
// Return early if no forms found.
[32] Fix | Delete
if ( empty( $forms ) || ! is_array( $forms ) ) {
[33] Fix | Delete
return [];
[34] Fix | Delete
}
[35] Fix | Delete
[36] Fix | Delete
$results = [];
[37] Fix | Delete
[38] Fix | Delete
// Iterate through form IDs.
[39] Fix | Delete
foreach ( $forms as $form_id ) {
[40] Fix | Delete
// Get entries count for the form.
[41] Fix | Delete
$count = absint( get_post_meta( $form_id, 'wpforms_entries_count', true ) );
[42] Fix | Delete
[43] Fix | Delete
// Skip if the count is empty.
[44] Fix | Delete
if ( empty( $count ) ) {
[45] Fix | Delete
continue;
[46] Fix | Delete
}
[47] Fix | Delete
[48] Fix | Delete
// Add form details to the result.
[49] Fix | Delete
$results[ $form_id ] = [
[50] Fix | Delete
'form_id' => $form_id,
[51] Fix | Delete
'count' => $count,
[52] Fix | Delete
'title' => get_the_title( $form_id ),
[53] Fix | Delete
];
[54] Fix | Delete
}
[55] Fix | Delete
[56] Fix | Delete
// Sort forms by entries count (desc).
[57] Fix | Delete
if ( ! empty( $results ) ) {
[58] Fix | Delete
uasort(
[59] Fix | Delete
$results,
[60] Fix | Delete
function ( $a, $b ) {
[61] Fix | Delete
return ( $a['count'] > $b['count'] ) ? -1 : 1;
[62] Fix | Delete
}
[63] Fix | Delete
);
[64] Fix | Delete
}
[65] Fix | Delete
[66] Fix | Delete
return $results;
[67] Fix | Delete
}
[68] Fix | Delete
[69] Fix | Delete
/**
[70] Fix | Delete
* Retrieve and calculate form trends data for Lite users.
[71] Fix | Delete
*
[72] Fix | Delete
* This function calculates and returns trends data for Lite users based on the total number
[73] Fix | Delete
* of entries submitted per week compared to the previous week's total entries. Optionally
[74] Fix | Delete
* updates the database with the calculated data.
[75] Fix | Delete
*
[76] Fix | Delete
* @since 1.8.8
[77] Fix | Delete
*
[78] Fix | Delete
* @return array
[79] Fix | Delete
*/
[80] Fix | Delete
public function get_form_trends() {
[81] Fix | Delete
[82] Fix | Delete
// Get form IDs.
[83] Fix | Delete
$results = $this->get_by_form();
[84] Fix | Delete
[85] Fix | Delete
// Collection of form IDs that don't have valid previous week's count data.
[86] Fix | Delete
$maybe_unset_form_ids = [];
[87] Fix | Delete
[88] Fix | Delete
foreach ( $results as $form_id => &$form ) {
[89] Fix | Delete
// Retrieve the previous week's count data from post meta.
[90] Fix | Delete
$previous_week_count = get_post_meta( $form_id, 'wpforms_entries_count_previous_week', true );
[91] Fix | Delete
[92] Fix | Delete
// Continue to the next form if the count data is not valid.
[93] Fix | Delete
if ( ! is_array( $previous_week_count ) || count( $previous_week_count ) !== 3 ) {
[94] Fix | Delete
$maybe_unset_form_ids[] = $form_id;
[95] Fix | Delete
[96] Fix | Delete
continue;
[97] Fix | Delete
}
[98] Fix | Delete
[99] Fix | Delete
// Continue to the next form if the previous week's count data is not valid.
[100] Fix | Delete
if ( count( array_unique( $previous_week_count ) ) === 1 ) {
[101] Fix | Delete
continue;
[102] Fix | Delete
}
[103] Fix | Delete
[104] Fix | Delete
list( $total_previous_week, $count_previous_week, $prev_count_previous_week ) = $previous_week_count;
[105] Fix | Delete
[106] Fix | Delete
// Calculate the form's trends data.
[107] Fix | Delete
$form['total'] = $total_previous_week + $count_previous_week;
[108] Fix | Delete
$form['count'] = $form['total'] - $total_previous_week;
[109] Fix | Delete
$form['count_previous_week'] = $prev_count_previous_week;
[110] Fix | Delete
[111] Fix | Delete
// If both the current week's count and the previous week's count are zero, set trends to zero.
[112] Fix | Delete
if ( $form['count_previous_week'] === 0 && $form['count'] === 0 ) {
[113] Fix | Delete
$form['trends'] = 0;
[114] Fix | Delete
[115] Fix | Delete
continue;
[116] Fix | Delete
}
[117] Fix | Delete
[118] Fix | Delete
// If trends are set to be skipped, set trends to zero, and set the previous week's count to zero.
[119] Fix | Delete
// Thies's been needed since at this stage we don't know the number of entries submitted in the previous week.
[120] Fix | Delete
if ( (bool) get_post_meta( $form_id, 'wpforms_entries_count_previous_week_skip_trends', true ) ) {
[121] Fix | Delete
$form['trends'] = 0;
[122] Fix | Delete
$form['count_previous_week'] = 0;
[123] Fix | Delete
[124] Fix | Delete
continue;
[125] Fix | Delete
}
[126] Fix | Delete
[127] Fix | Delete
$form['trends'] = $this->get_calculated_trends( $form['count'], $form['count_previous_week'] );
[128] Fix | Delete
}
[129] Fix | Delete
[130] Fix | Delete
// Unset forms that don't have valid previous week's count data.
[131] Fix | Delete
return $this->maybe_unset_form_ids( $results, $maybe_unset_form_ids );
[132] Fix | Delete
}
[133] Fix | Delete
[134] Fix | Delete
/**
[135] Fix | Delete
* Unsets forms from the results array that lack valid previous week's count data.
[136] Fix | Delete
*
[137] Fix | Delete
* This function checks for the presence of valid previous week's count data for each form in the
[138] Fix | Delete
* provided results array. If all forms in the array lack valid data, the original results array is
[139] Fix | Delete
* returned without any changes. Otherwise, forms without valid data are unset from the array.
[140] Fix | Delete
*
[141] Fix | Delete
* @since 1.8.8
[142] Fix | Delete
*
[143] Fix | Delete
* @param array $results The original array of form results.
[144] Fix | Delete
* @param array $maybe_unset_form_ids The form IDs that may need to be unset.
[145] Fix | Delete
*
[146] Fix | Delete
* @return array
[147] Fix | Delete
*/
[148] Fix | Delete
private function maybe_unset_form_ids( $results, $maybe_unset_form_ids ) {
[149] Fix | Delete
[150] Fix | Delete
if ( empty( $maybe_unset_form_ids ) ) {
[151] Fix | Delete
return $results;
[152] Fix | Delete
}
[153] Fix | Delete
[154] Fix | Delete
// If all forms don't have valid previous week's count data, return early.
[155] Fix | Delete
if ( count( $maybe_unset_form_ids ) === count( $results ) ) {
[156] Fix | Delete
return $results;
[157] Fix | Delete
}
[158] Fix | Delete
[159] Fix | Delete
// Unset forms that don't have valid previous week's count data.
[160] Fix | Delete
foreach ( $maybe_unset_form_ids as $form_id ) {
[161] Fix | Delete
unset( $results[ $form_id ] );
[162] Fix | Delete
}
[163] Fix | Delete
[164] Fix | Delete
return $results;
[165] Fix | Delete
}
[166] Fix | Delete
[167] Fix | Delete
/**
[168] Fix | Delete
* Get the calculated trends based on the count and count from the previous week.
[169] Fix | Delete
*
[170] Fix | Delete
* This function calculates and returns the trends based on the current count
[171] Fix | Delete
* and the count from the previous week.
[172] Fix | Delete
*
[173] Fix | Delete
* @since 1.8.8
[174] Fix | Delete
*
[175] Fix | Delete
* @param int $count The current count.
[176] Fix | Delete
* @param int $count_previous_week The count from the previous week.
[177] Fix | Delete
*
[178] Fix | Delete
* @return int
[179] Fix | Delete
*/
[180] Fix | Delete
private function get_calculated_trends( $count, $count_previous_week ) {
[181] Fix | Delete
[182] Fix | Delete
// If count from the previous week is zero, set trends to 100 to avoid division by zero.
[183] Fix | Delete
return ( $count_previous_week === 0 ) ? 100 : round( ( $count - $count_previous_week ) / $count_previous_week * 100 );
[184] Fix | Delete
}
[185] Fix | Delete
}
[186] Fix | Delete
[187] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function