![]() Server : Apache/2.4.52 (Ubuntu) System : Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64 User : www-data ( 33) PHP Version : 8.1.2-1ubuntu2.21 Disable Function : NONE Directory : /var/www/theprintave/wp-content/plugins/dokan-lite/includes/Admin/ |
<?php use WeDevs\Dokan\Utilities\OrderUtil; /** * Get help documents for admin * * @since 2.8 * * @return Object */ function dokan_admin_get_help() { $help_docs = get_transient( 'dokan_help_docs', '[]' ); if ( false === $help_docs ) { $help_url = 'https://dokan.co/wp-json/org/help'; $response = wp_remote_get( $help_url, [ 'timeout' => 15 ] ); $help_docs = wp_remote_retrieve_body( $response ); if ( is_wp_error( $response ) || (int) $response['response']['code'] !== 200 ) { $help_docs = '[]'; } set_transient( 'dokan_help_docs', $help_docs, 12 * HOUR_IN_SECONDS ); } $help_docs = json_decode( $help_docs ); return $help_docs; } /** * Dokan Get Admin report data * * @since 2.8.0 * * @param string $group_by * @param string $year * @param string $start * @param string $end * @param int $seller_id * * @return array */ function dokan_admin_report_data( $group_by = 'day', $year = '', $start = '', $end = '', $seller_id = 0 ) { global $wpdb; $now = dokan_current_datetime(); $group_by = apply_filters( 'dokan_report_group_by', $group_by ); $start_date = ! empty( $start ) ? sanitize_text_field( $start ) : ''; $end_date = ! empty( $end ) ? sanitize_text_field( $end ) : ''; $current_year = $now->format( 'Y' ); if ( empty( $start_date ) ) { $start_date = $now->modify( 'first day of this month' )->format( 'Y-m-d' ); if ( $group_by === 'year' ) { $start_date = $year . '-01-01'; } } if ( empty( $end_date ) ) { $end_date = $now->format( 'Y-m-d' ); if ( $group_by === 'year' && ( $year < $current_year ) ) { $end_date = $year . '-12-31'; } } $date_where = ''; $order_table_name = $wpdb->posts; $id_field = 'ID'; $date_field = 'post_date'; $status_field = 'post_status'; if ( OrderUtil::is_hpos_enabled() ) { $start_date = $now->modify( $start_date )->setTimezone( new DateTimeZone( 'UTC' ) )->format( 'Y-m-d' ); $end_date = $now->modify( $end_date )->setTimezone( new DateTimeZone( 'UTC' ) )->format( 'Y-m-d' ); $order_table_name = OrderUtil::get_order_table_name(); $id_field = 'id'; $date_field = 'date_created_gmt'; $status_field = 'status'; } if ( 'day' === $group_by ) { $group_by_query = "YEAR(p.{$date_field}), MONTH(p.{$date_field}), DAY(p.{$date_field})"; $date_where = " AND DATE(p.{$date_field}) >= '{$start_date}' AND DATE(p.{$date_field}) <= '{$end_date}'"; } else { $group_by_query = "YEAR(p.{$date_field}), MONTH(p.{$date_field})"; $date_where = " AND DATE(p.{$date_field}) >= '{$start_date}' AND DATE(p.{$date_field}) <= '{$end_date}'"; } $left_join = apply_filters( 'dokan_report_left_join', '' ); $date_where = apply_filters( 'dokan_report_where', $date_where ); $seller_where = $seller_id ? "seller_id = {$seller_id}" : 'seller_id != ' . 0; $sql = "SELECT SUM((do.order_total - do.net_amount)) AS earning, SUM(do.order_total) AS order_total, COUNT(DISTINCT p.{$id_field}) AS total_orders, p.{$date_field} AS order_date FROM {$wpdb->prefix}dokan_orders AS do LEFT JOIN {$order_table_name} p ON do.order_id = p.{$id_field} {$left_join} WHERE {$seller_where} AND p.{$status_field} != 'trash' AND do.order_status IN ('wc-on-hold', 'wc-completed', 'wc-processing') {$date_where} GROUP BY {$group_by_query}"; $data = $wpdb->get_results( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching return apply_filters( 'dokan_get_admin_report_data', $data, $group_by, $year, $start, $end, $seller_id ); } /** * Generate report in admin area * * @param string $group_by * @param string $year * @param string $start * @param string $end * * @deprecated 3.8.0 since we are getting the report data from REST API (dokan/v1/report), we don't need this function anymore. * * @return array */ function dokan_admin_report( $group_by = 'day', $year = '', $start = '', $end = '' ) { wc_deprecated_function( 'dokan_admin_report', '3.8.0' ); global $wp_locale; $data = dokan_admin_report_data( $group_by, $year, $start, $end ); $now = current_datetime(); $start_date = ! empty( $start ) ? sanitize_text_field( $start ) : ''; $end_date = ! empty( $start ) ? sanitize_text_field( $end ) : ''; $current_year = $year ? $year : $now->format( 'Y' ); if ( ! $start_date ) { $start_date = $now->modify( 'first day of this month' )->format( 'Y-m-d' ); if ( $group_by === 'year' ) { $start_date = $year . '-01-01'; } } if ( ! $end_date ) { $end_date = $now->format( 'Y-m-d' ); if ( $group_by === 'year' && ( $year < $current_year ) ) { $end_date = $year . '-12-31'; } } $start_date_to_time = $now->modify( $start_date ); $end_date_to_time = $now->modify( $end_date ); $chart_interval = dokan_get_interval_between_dates( $start_date_to_time, $end_date_to_time, $group_by ); if ( $group_by === 'day' ) { $barwidth = 60 * 60 * 24 * 1000; } else { $barwidth = 60 * 60 * 24 * 7 * 4 * 1000; } // Prepare data for report $order_counts = dokan_prepare_chart_data( $data, 'order_date', 'total_orders', $chart_interval, $start_date_to_time->getTimestamp(), $group_by ); $order_amounts = dokan_prepare_chart_data( $data, 'order_date', 'order_total', $chart_interval, $start_date_to_time->getTimestamp(), $group_by ); $order_commision = dokan_prepare_chart_data( $data, 'order_date', 'earning', $chart_interval, $start_date_to_time->getTimestamp(), $group_by ); // Encode in json format $chart_data = [ 'order_counts' => array_values( $order_counts ), 'order_amounts' => array_values( $order_amounts ), 'order_commision' => array_values( $order_commision ), ]; $chart_colours = [ 'order_counts' => '#3498db', 'order_amounts' => '#1abc9c', 'order_commision' => '#73a724', ]; ?> <style type="text/css"> .chart-tooltip { position: absolute; display: none; line-height: 1; background: #333; color: #fff; padding: 3px 5px; font-size: 11px; border-radius: 3px; } </style> <script type="text/javascript"> jQuery(function ($) { $(document).ready(function () { var order_data = JSON.parse('<?php echo wp_json_encode( $chart_data ); ?>'); var isRtl = '<?php echo is_rtl() ? '1' : '0'; ?>'; var series = [ { label: "<?php echo esc_js( __( 'Total Sales', 'dokan-lite' ) ); ?>", data: order_data.order_amounts, shadowSize: 0, hoverable: true, points: {show: true, radius: 5, lineWidth: 3, fillColor: '#fff', fill: true}, lines: {show: true, lineWidth: 4, fill: false}, shadowSize: 0, prepend_tooltip: "<?php echo esc_attr__( 'Total: ', 'dokan-lite' ) . esc_attr( get_woocommerce_currency_symbol() ); ?>" }, { label: "<?php echo esc_js( __( 'Number of orders', 'dokan-lite' ) ); ?>", data: order_data.order_counts, shadowSize: 0, hoverable: true, points: {show: true, radius: 5, lineWidth: 3, fillColor: '#fff', fill: true}, lines: {show: true, lineWidth: 4, fill: false}, shadowSize: 0, append_tooltip: " <?php echo esc_attr__( 'sales', 'dokan-lite' ); ?>" }, { label: "<?php echo esc_js( __( 'Commision', 'dokan-lite' ) ); ?>", data: order_data.order_commision, shadowSize: 0, hoverable: true, points: {show: true, radius: 5, lineWidth: 3, fillColor: '#fff', fill: true}, lines: {show: true, lineWidth: 4, fill: false}, shadowSize: 0, prepend_tooltip: "<?php echo esc_attr__( 'Commision: ', 'dokan-lite' ) . esc_attr( get_woocommerce_currency_symbol() ); ?>" }, ]; var main_chart = jQuery.plot( jQuery('.chart-placeholder.main'), series, { legend: { show: true, position: 'nw' }, series: { lines: {show: true, lineWidth: 4, fill: false}, points: {show: true} }, grid: { borderColor: '#eee', color: '#aaa', backgroundColor: '#fff', borderWidth: 1, hoverable: true, show: true, aboveData: false, }, xaxis: { color: '#aaa', position: "bottom", tickColor: 'transparent', mode: "time", timeformat: "<?php echo ( $group_by === 'day' ) ? '%d %b' : '%b'; ?>", monthNames: <?php echo wp_json_encode( array_values( $wp_locale->month_abbrev ) ); ?>, tickLength: 1, minTickSize: [1, "<?php echo ( esc_attr( $group_by ) === 'year' ) ? 'month' : esc_attr( $group_by ); ?>"], font: { color: "#aaa" }, transform: function (v) { return (isRtl === '1') ? -v : v; }, inverseTransform: function (v) { return (isRtl === '1') ? -v : v; } }, yaxes: [ { position: (isRtl === '1') ? "right" : "left", min: 0, minTickSize: 1, tickDecimals: 0, color: '#d4d9dc', font: {color: "#aaa"} }, { position: (isRtl === '1') ? "right" : "left", min: 0, tickDecimals: 2, alignTicksWithAxis: 1, color: 'transparent', font: {color: "#aaa"} } ], colors: ["<?php echo esc_attr( $chart_colours['order_counts'] ); ?>", "<?php echo esc_attr( $chart_colours['order_amounts'] ); ?>", "<?php echo esc_attr( $chart_colours['order_commision'] ); ?>"] } ); jQuery('.chart-placeholder').resize(); function showTooltip(x, y, contents) { jQuery('<div class="chart-tooltip">' + contents + '</div>').css({ top: y - 16, left: x + 20 }).appendTo("body").fadeIn(200); } var prev_data_index = null; var prev_series_index = null; jQuery(".chart-placeholder").bind("plothover", function (event, pos, item) { if (item) { if (prev_data_index != item.dataIndex || prev_series_index != item.seriesIndex) { prev_data_index = item.dataIndex; prev_series_index = item.seriesIndex; jQuery(".chart-tooltip").remove(); if (item.series.points.show || item.series.enable_tooltip) { var y = item.series.data[item.dataIndex][1]; tooltip_content = ''; if (item.series.prepend_label) tooltip_content = tooltip_content + item.series.label + ": "; if (item.series.prepend_tooltip) tooltip_content = tooltip_content + item.series.prepend_tooltip; tooltip_content = tooltip_content + y; if (item.series.append_tooltip) tooltip_content = tooltip_content + item.series.append_tooltip; if (item.series.pie.show) { showTooltip(pos.pageX, pos.pageY, tooltip_content); } else { showTooltip(item.pageX, item.pageY, tooltip_content); } } } } else { jQuery(".chart-tooltip").remove(); prev_data_index = null; } }); }); }); </script> <?php return $data; } /** * Generate Earning report By seller in admin area * * @param int $chosen_seller_id * * @global object $wp_locale * * @global WPDB $wpdb * @deprecated 3.8.0 since we are getting the report data from REST API (dokan/v1/report), we don't need this function anymore. * * @return array */ function dokan_admin_report_by_seller( $chosen_seller_id = 0 ) { wc_deprecated_function( 'dokan_admin_report_by_seller', '3.8.0' ); global $wpdb, $wp_locale; $group_by = 'day'; $group_by = apply_filters( 'dokan_report_group_by', $group_by ); $now = dokan_current_datetime(); $year = $now->format( 'Y' ); $start_date = $now->modify( 'first day of this month' )->format( 'Y-m-d' ); $end_date = $now->format( 'Y-m-d' ); $current_year = $now->format( 'Y' ); if ( empty( $chosen_seller_id ) ) { return []; } if ( $group_by === 'month' ) { $start_date = $year . '-01-01'; } if ( $group_by === 'month' && ( $year < $current_year ) ) { $end_date = $year . '-12-31'; } $date_where = ''; $start_date_to_time = $now->modify( $start_date )->getTimestamp(); $end_date_to_time = $now->modify( $end_date )->getTimestamp(); $chart_interval = dokan_get_interval_between_dates( $start_date_to_time, $end_date_to_time, $group_by ); if ( $group_by === 'day' ) { $group_by_query = 'YEAR(p.post_date), MONTH(p.post_date), DAY(p.post_date)'; $date_where = " AND DATE(p.post_date) >= '$start_date' AND DATE(p.post_date) <= '$end_date'"; $barwidth = 60 * 60 * 24 * 1000; } else { $group_by_query = 'YEAR(p.post_date), MONTH(p.post_date)'; $barwidth = 60 * 60 * 24 * 7 * 4 * 1000; } $left_join = apply_filters( 'dokan_report_left_join', $date_where ); $date_where = apply_filters( 'dokan_report_where', $date_where ); $sql = "SELECT SUM((do.order_total - do.net_amount)) as earning, SUM(do.order_total) as order_total, COUNT(DISTINCT p.ID) as total_orders, p.post_date as order_date FROM {$wpdb->prefix}dokan_orders do LEFT JOIN $wpdb->posts p ON do.order_id = p.ID $left_join WHERE seller_id = $chosen_seller_id AND p.post_status != 'trash' AND do.order_status IN ('wc-on-hold', 'wc-completed', 'wc-processing') $date_where GROUP BY $group_by_query"; $data = $wpdb->get_results( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching // Prepare data for report $order_counts = dokan_prepare_chart_data( $data, 'order_date', 'total_orders', $chart_interval, $start_date_to_time, $group_by ); $order_amounts = dokan_prepare_chart_data( $data, 'order_date', 'order_total', $chart_interval, $start_date_to_time, $group_by ); $order_commision = dokan_prepare_chart_data( $data, 'order_date', 'earning', $chart_interval, $start_date_to_time, $group_by ); // Encode in json format $chart_data = [ 'order_counts' => array_values( $order_counts ), 'order_amounts' => array_values( $order_amounts ), 'order_commision' => array_values( $order_commision ), ]; $chart_colours = [ 'order_counts' => '#3498db', 'order_amounts' => '#1abc9c', 'order_commision' => '#73a724', ]; ?> <style type="text/css"> .chart-tooltip { position: absolute; display: none; line-height: 1; background: #333; color: #fff; padding: 3px 5px; font-size: 11px; border-radius: 3px; } </style> <script type="text/javascript"> jQuery(function ($) { var order_data = JSON.parse('<?php echo wp_json_encode( $chart_data ); ?>'); var series = [ { label: "<?php echo esc_js( __( 'Total Sales', 'dokan-lite' ) ); ?>", data: order_data.order_amounts, shadowSize: 0, hoverable: true, points: {show: true, radius: 5, lineWidth: 3, fillColor: '#fff', fill: true}, lines: {show: true, lineWidth: 4, fill: false}, shadowSize: 0, prepend_tooltip: "<?php echo esc_attr__( 'Total: ', 'dokan-lite' ) . esc_attr( get_woocommerce_currency_symbol() ); ?>" }, { label: "<?php echo esc_js( __( 'Number of orders', 'dokan-lite' ) ); ?>", data: order_data.order_counts, shadowSize: 0, hoverable: true, points: {show: true, radius: 5, lineWidth: 3, fillColor: '#fff', fill: true}, lines: {show: true, lineWidth: 4, fill: false}, shadowSize: 0, append_tooltip: "<?php echo esc_attr__( 'sales', 'dokan-lite' ); ?>" }, { label: "<?php echo esc_js( __( 'Commision', 'dokan-lite' ) ); ?>", data: order_data.order_commision, shadowSize: 0, hoverable: true, points: {show: true, radius: 5, lineWidth: 3, fillColor: '#fff', fill: true}, lines: {show: true, lineWidth: 4, fill: false}, shadowSize: 0, prepend_tooltip: "<?php echo esc_attr__( 'Commision: ', 'dokan-lite' ) . esc_attr( get_woocommerce_currency_symbol() ); ?>" }, ]; var main_chart = jQuery.plot( jQuery('.chart-placeholder.main'), series, { legend: { show: true, position: 'nw' }, series: { lines: {show: true, lineWidth: 4, fill: false}, points: {show: true} }, grid: { borderColor: '#eee', color: '#aaa', backgroundColor: '#fff', borderWidth: 1, hoverable: true, show: true, aboveData: false, }, xaxis: { color: '#aaa', position: "bottom", tickColor: 'transparent', mode: "time", timeformat: "<?php echo ( $group_by === 'day' ) ? '%d %b' : '%b'; ?>", monthNames: <?php echo wp_json_encode( array_values( $wp_locale->month_abbrev ) ); ?>, tickLength: 1, minTickSize: [1, "<?php echo esc_attr( $group_by ); ?>"], font: { color: "#aaa" } }, yaxes: [ { min: 0, minTickSize: 1, tickDecimals: 0, color: '#d4d9dc', font: {color: "#aaa"} }, { position: "right", min: 0, tickDecimals: 2, alignTicksWithAxis: 1, color: 'transparent', font: {color: "#aaa"} } ], colors: ["<?php echo esc_attr( $chart_colours['order_counts'] ); ?>", "<?php echo esc_attr( $chart_colours['order_amounts'] ); ?>", "<?php echo esc_attr( $chart_colours['order_commision'] ); ?>"] } ); jQuery('.chart-placeholder').resize(); function showTooltip(x, y, contents) { jQuery('<div class="chart-tooltip">' + contents + '</div>').css({ top: y - 16, left: x + 20 }).appendTo("body").fadeIn(200); } var prev_data_index = null; var prev_series_index = null; jQuery(".chart-placeholder").bind("plothover", function (event, pos, item) { if (item) { if (prev_data_index != item.dataIndex || prev_series_index != item.seriesIndex) { prev_data_index = item.dataIndex; prev_series_index = item.seriesIndex; jQuery(".chart-tooltip").remove(); if (item.series.points.show || item.series.enable_tooltip) { var y = item.series.data[item.dataIndex][1]; tooltip_content = ''; if (item.series.prepend_label) tooltip_content = tooltip_content + item.series.label + ": "; if (item.series.prepend_tooltip) tooltip_content = tooltip_content + item.series.prepend_tooltip; tooltip_content = tooltip_content + y; if (item.series.append_tooltip) tooltip_content = tooltip_content + item.series.append_tooltip; if (item.series.pie.show) { showTooltip(pos.pageX, pos.pageY, tooltip_content); } else { showTooltip(item.pageX, item.pageY, tooltip_content); } } } } else { jQuery(".chart-tooltip").remove(); prev_data_index = null; } }); }); </script> <?php return $data; }