Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/woocomme.../src/Internal/Admin/Notes
File: NewSalesRecord.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* WooCommerce Admin (Dashboard) New Sales Record Note Provider.
[2] Fix | Delete
*
[3] Fix | Delete
* Adds a note to the merchant's inbox when the previous day's sales are a new record.
[4] Fix | Delete
*/
[5] Fix | Delete
[6] Fix | Delete
namespace Automattic\WooCommerce\Internal\Admin\Notes;
[7] Fix | Delete
[8] Fix | Delete
defined( 'ABSPATH' ) || exit;
[9] Fix | Delete
[10] Fix | Delete
use Automattic\WooCommerce\Admin\Notes\Note;
[11] Fix | Delete
use Automattic\WooCommerce\Admin\Notes\Notes;
[12] Fix | Delete
use Automattic\WooCommerce\Admin\Notes\NoteTraits;
[13] Fix | Delete
[14] Fix | Delete
/**
[15] Fix | Delete
* New_Sales_Record
[16] Fix | Delete
*/
[17] Fix | Delete
class NewSalesRecord {
[18] Fix | Delete
/**
[19] Fix | Delete
* Note traits.
[20] Fix | Delete
*/
[21] Fix | Delete
use NoteTraits;
[22] Fix | Delete
[23] Fix | Delete
/**
[24] Fix | Delete
* Name of the note for use in the database.
[25] Fix | Delete
*/
[26] Fix | Delete
const NOTE_NAME = 'wc-admin-new-sales-record';
[27] Fix | Delete
[28] Fix | Delete
/**
[29] Fix | Delete
* Option name for the sales record date in ISO 8601 (YYYY-MM-DD) date.
[30] Fix | Delete
*/
[31] Fix | Delete
const RECORD_DATE_OPTION_KEY = 'woocommerce_sales_record_date';
[32] Fix | Delete
[33] Fix | Delete
/**
[34] Fix | Delete
* Option name for the sales record amount.
[35] Fix | Delete
*/
[36] Fix | Delete
const RECORD_AMOUNT_OPTION_KEY = 'woocommerce_sales_record_amount';
[37] Fix | Delete
[38] Fix | Delete
/**
[39] Fix | Delete
* Returns the total of yesterday's sales.
[40] Fix | Delete
*
[41] Fix | Delete
* @param string $date Date for sales to sum (i.e. YYYY-MM-DD).
[42] Fix | Delete
* @return floatval
[43] Fix | Delete
*/
[44] Fix | Delete
public static function sum_sales_for_date( $date ) {
[45] Fix | Delete
$order_query = new \WC_Order_Query( array( 'date_created' => $date ) );
[46] Fix | Delete
$orders = $order_query->get_orders();
[47] Fix | Delete
$total = 0;
[48] Fix | Delete
[49] Fix | Delete
foreach ( (array) $orders as $order ) {
[50] Fix | Delete
$total += $order->get_total();
[51] Fix | Delete
}
[52] Fix | Delete
[53] Fix | Delete
return $total;
[54] Fix | Delete
}
[55] Fix | Delete
[56] Fix | Delete
/**
[57] Fix | Delete
* Possibly add a sales record note.
[58] Fix | Delete
*/
[59] Fix | Delete
public static function possibly_add_note() {
[60] Fix | Delete
/**
[61] Fix | Delete
* Filter to allow for disabling sales record milestones.
[62] Fix | Delete
*
[63] Fix | Delete
* @since 3.7.0
[64] Fix | Delete
*
[65] Fix | Delete
* @param boolean default true
[66] Fix | Delete
*/
[67] Fix | Delete
$sales_record_notes_enabled = apply_filters( 'woocommerce_admin_sales_record_milestone_enabled', true );
[68] Fix | Delete
[69] Fix | Delete
if ( ! $sales_record_notes_enabled ) {
[70] Fix | Delete
return;
[71] Fix | Delete
}
[72] Fix | Delete
[73] Fix | Delete
$yesterday = gmdate( 'Y-m-d', current_time( 'timestamp', 0 ) - DAY_IN_SECONDS );
[74] Fix | Delete
$total = self::sum_sales_for_date( $yesterday );
[75] Fix | Delete
[76] Fix | Delete
// No sales yesterday? Bail.
[77] Fix | Delete
if ( 0 >= $total ) {
[78] Fix | Delete
return;
[79] Fix | Delete
}
[80] Fix | Delete
[81] Fix | Delete
$record_date = get_option( self::RECORD_DATE_OPTION_KEY, '' );
[82] Fix | Delete
$record_amt = floatval( get_option( self::RECORD_AMOUNT_OPTION_KEY, 0 ) );
[83] Fix | Delete
[84] Fix | Delete
// No previous entry? Just enter what we have and return without generating a note.
[85] Fix | Delete
if ( empty( $record_date ) ) {
[86] Fix | Delete
update_option( self::RECORD_DATE_OPTION_KEY, $yesterday );
[87] Fix | Delete
update_option( self::RECORD_AMOUNT_OPTION_KEY, $total );
[88] Fix | Delete
return;
[89] Fix | Delete
}
[90] Fix | Delete
[91] Fix | Delete
// Otherwise, if yesterdays total bested the record, update AND generate a note.
[92] Fix | Delete
if ( $total > $record_amt ) {
[93] Fix | Delete
update_option( self::RECORD_DATE_OPTION_KEY, $yesterday );
[94] Fix | Delete
update_option( self::RECORD_AMOUNT_OPTION_KEY, $total );
[95] Fix | Delete
[96] Fix | Delete
// We only want one sales record note at any time in the inbox, so we delete any other first.
[97] Fix | Delete
Notes::delete_notes_with_name( self::NOTE_NAME );
[98] Fix | Delete
[99] Fix | Delete
$note = self::get_note_with_record_data( $record_date, $record_amt, $yesterday, $total );
[100] Fix | Delete
$note->save();
[101] Fix | Delete
}
[102] Fix | Delete
}
[103] Fix | Delete
[104] Fix | Delete
/**
[105] Fix | Delete
* Get the note with record data.
[106] Fix | Delete
*
[107] Fix | Delete
* @param string $record_date record date Y-m-d.
[108] Fix | Delete
* @param float $record_amt record amount.
[109] Fix | Delete
* @param string $yesterday yesterday's date Y-m-d.
[110] Fix | Delete
* @param string $total total sales for yesterday.
[111] Fix | Delete
*
[112] Fix | Delete
* @return Note
[113] Fix | Delete
*/
[114] Fix | Delete
public static function get_note_with_record_data( $record_date, $record_amt, $yesterday, $total ) {
[115] Fix | Delete
// Use F jS (March 7th) format for English speaking countries.
[116] Fix | Delete
if ( substr( get_user_locale(), 0, 2 ) === 'en' ) {
[117] Fix | Delete
$date_format = 'F jS';
[118] Fix | Delete
} else {
[119] Fix | Delete
// otherwise, fallback to the system date format.
[120] Fix | Delete
$date_format = get_option( 'date_format' );
[121] Fix | Delete
}
[122] Fix | Delete
[123] Fix | Delete
$formatted_yesterday = date_i18n( $date_format, strtotime( $yesterday ) );
[124] Fix | Delete
$formatted_total = html_entity_decode( wp_strip_all_tags( wc_price( $total ) ) );
[125] Fix | Delete
$formatted_record_date = date_i18n( $date_format, strtotime( $record_date ) );
[126] Fix | Delete
$formatted_record_amt = html_entity_decode( wp_strip_all_tags( wc_price( $record_amt ) ) );
[127] Fix | Delete
[128] Fix | Delete
$content = sprintf(
[129] Fix | Delete
/* translators: 1 and 4: Date (e.g. October 16th), 2 and 3: Amount (e.g. $160.00) */
[130] Fix | Delete
__( 'Woohoo, %1$s was your record day for sales! Net sales was %2$s beating the previous record of %3$s set on %4$s.', 'woocommerce' ),
[131] Fix | Delete
$formatted_yesterday,
[132] Fix | Delete
$formatted_total,
[133] Fix | Delete
$formatted_record_amt,
[134] Fix | Delete
$formatted_record_date
[135] Fix | Delete
);
[136] Fix | Delete
[137] Fix | Delete
$content_data = (object) array(
[138] Fix | Delete
'old_record_date' => $record_date,
[139] Fix | Delete
'old_record_amt' => $record_amt,
[140] Fix | Delete
'new_record_date' => $yesterday,
[141] Fix | Delete
'new_record_amt' => $total,
[142] Fix | Delete
);
[143] Fix | Delete
[144] Fix | Delete
$report_url = '?page=wc-admin&path=/analytics/revenue&period=custom&compare=previous_year&after=' . $yesterday . '&before=' . $yesterday;
[145] Fix | Delete
[146] Fix | Delete
// And now, create our new note.
[147] Fix | Delete
$note = new Note();
[148] Fix | Delete
$note->set_title( __( 'New sales record!', 'woocommerce' ) );
[149] Fix | Delete
$note->set_content( $content );
[150] Fix | Delete
$note->set_content_data( $content_data );
[151] Fix | Delete
$note->set_type( Note::E_WC_ADMIN_NOTE_INFORMATIONAL );
[152] Fix | Delete
$note->set_name( self::NOTE_NAME );
[153] Fix | Delete
$note->set_source( 'woocommerce-admin' );
[154] Fix | Delete
$note->add_action( 'view-report', __( 'View report', 'woocommerce' ), $report_url );
[155] Fix | Delete
[156] Fix | Delete
return $note;
[157] Fix | Delete
}
[158] Fix | Delete
[159] Fix | Delete
/**
[160] Fix | Delete
* Get the note. This is used for localizing the note.
[161] Fix | Delete
*
[162] Fix | Delete
* @return Note
[163] Fix | Delete
*/
[164] Fix | Delete
public static function get_note() {
[165] Fix | Delete
$note = Notes::get_note_by_name( self::NOTE_NAME );
[166] Fix | Delete
if ( ! $note ) {
[167] Fix | Delete
return false;
[168] Fix | Delete
}
[169] Fix | Delete
$content_data = $note->get_content_data();
[170] Fix | Delete
return self::get_note_with_record_data(
[171] Fix | Delete
$content_data->old_record_date,
[172] Fix | Delete
$content_data->old_record_amt,
[173] Fix | Delete
$content_data->new_record_date,
[174] Fix | Delete
$content_data->new_record_amt
[175] Fix | Delete
);
[176] Fix | Delete
}
[177] Fix | Delete
}
[178] Fix | Delete
[179] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function