Plugin Directory

Changeset 2794299


Ignore:
Timestamp:
10/04/2022 11:42:43 PM (3 years ago)
Author:
pau1andrews
Message:

improved product query

Location:
profitori/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • profitori/trunk/profitori.php

    r2791631 r2794299  
    77Plugin URI: https://profitori.com/
    88Description: Profitori: WooCommerce ERP Plugin - Purchase Orders, Stock Management and Profit Margin Tracking
    9 Version: 2.1.0.2
     9Version: 2.1.0.3
    1010Author: Unity Business Technology Pty Ltd
    1111Text Domain: profitori
     
    622622    </style>
    623623  <?php
     624  wp_deregister_script('heartbeat');
    624625  echo "<div id='stocktend-root' data-defaultcaption='$caption'><div class=\"lds-ring\"><div></div><div></div><div></div><div></div></div></div>";
    625626}
     
    55605561  function field_names_to_product_meta_joins($aNames) {
    55615562    global $wpdb;
     5563    global $prfi_subselects;
    55625564    $res = '';
     5565    if ( $prfi_subselects )
     5566      return $res;
    55635567    $idx = 0;
    55645568    foreach ( $aNames as $name ) {
     
    55915595  function get_polylang_clauses($options) {
    55925596    global $wpdb;
     5597    global $prfi_subselects;
    55935598    $res = array("cols" => "", "joins" => "");
    55945599    $ignore_polylang = $options && isset($options["ignore_polylang"]) ? true : false;
     
    55995604      return $res;
    56005605    $db = $wpdb->prefix;
    5601     $res["cols"] = ", tt.description polylang_language ";
    5602     $res["joins"] = "
    5603       INNER JOIN {$db}term_relationships tr ON p.ID = tr.object_id
    5604       INNER JOIN {$db}term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id and tt.taxonomy = 'language'
    5605     ";
     5606/*
     5607    if ( $prfi_subselects ) {
     5608      $res["cols"] = ",
     5609        (
     5610          SELECT tt.description
     5611          FROM {$db}term_relationships tr
     5612          INNER JOIN {$db}term_taxonomy tt
     5613            ON tr.term_taxonomy_id = tt.term_taxonomy_id and tt.taxonomy = 'language'
     5614          WHERE
     5615            p.ID = tr.object_id
     5616          LIMIT 1
     5617        ) polylang_language ";
     5618      $res["joins"] = "";
     5619    } else {
     5620*/
     5621      $res["cols"] = ", tt.description polylang_language ";
     5622      $res["joins"] = "
     5623        INNER JOIN {$db}term_relationships tr ON p.ID = tr.object_id
     5624        INNER JOIN {$db}term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id and tt.taxonomy = 'language'
     5625      ";
     5626/*
     5627    }
     5628*/
    56065629    return $res;
    56075630  }
     
    56095632  function get_prod_rows($options) {
    56105633    global $wpdb;
     5634    global $prfi_subselects;
     5635    $prfi_subselects = prfi_conf_val('subselects') === 'Yes';
    56115636    $polylang_clauses = $this->get_polylang_clauses($options);
    56125637    $polylang_cols = $polylang_clauses["cols"];
    56135638    $polylang_joins = $polylang_clauses["joins"];
    56145639    $fieldNames = $this->get_product_metakey_fields();
    5615     $cols = $this->field_names_to_cols($fieldNames); // Note: secured within field_names_to_cols
     5640    $cols = $this->field_names_to_cols($fieldNames, true); // Note: secured within field_names_to_cols
    56165641    $joins = $this->field_names_to_product_meta_joins($fieldNames); // Note: secured within field_names_to_product_meta_joins
    56175642    $db = $wpdb->prefix;
     
    56225647    else
    56235648      $modifiedAfter = '1970-01-01 00:00:01';
    5624     $sql = $wpdb->prepare("
    5625         SELECT  p.ID,
    5626                 p.post_title,
    5627                 p.post_parent,
    5628                 p.post_modified,
    5629                 CONVERT(pm.meta_value, SIGNED INTEGER) _stock,
    5630                 sku.meta_value _sku,
    5631                 COALESCE(low_stock_amount.meta_value, parent_low_stock_amount.meta_value) _low_stock_amount,
    5632                 regular_price.meta_value _regular_price,
    5633                 IF(tax_class.meta_value <> 'parent', tax_class.meta_value, parent_tax_class.meta_value) _tax_class,
    5634                 tax_status.meta_value _tax_status,
    5635                 pa.meta_value _product_attributes,
    5636                 IF ( p.post_status IN ('publish', 'private'), '', 'DELETE' ) __incrementalDelete
    5637                 $cols
    5638                 $polylang_cols
    5639         FROM    {$db}posts p
    5640                 LEFT JOIN {$db}postmeta pm ON (p.ID = pm.post_id AND pm.meta_key = '_stock')
    5641                 LEFT JOIN {$db}postmeta sku ON (p.ID = sku.post_id AND sku.meta_key = '_sku')
    5642                 LEFT JOIN {$db}postmeta tax_status ON
    5643                   (p.ID = tax_status.post_id AND tax_status.meta_key = '_tax_status')
    5644                 LEFT JOIN {$db}postmeta tax_class ON
    5645                   (p.ID = tax_class.post_id AND tax_class.meta_key = '_tax_class')
    5646                 LEFT JOIN {$db}postmeta low_stock_amount ON
    5647                   (p.ID = low_stock_amount.post_id AND low_stock_amount.meta_key = '_low_stock_amount')
    5648                 LEFT JOIN {$db}postmeta regular_price ON
    5649                   (p.ID = regular_price.post_id AND regular_price.meta_key = '_regular_price')
    5650                 LEFT JOIN {$db}postmeta parent_low_stock_amount ON
    5651                   (p.post_parent = parent_low_stock_amount.post_id AND parent_low_stock_amount.meta_key = '_low_stock_amount')
    5652                 LEFT JOIN {$db}postmeta parent_tax_class ON
    5653                   (p.post_parent = parent_tax_class.post_id AND parent_tax_class.meta_key = '_tax_class')
    5654                 INNER JOIN {$db}postmeta manageStock ON (p.ID = manageStock.post_id AND manageStock.meta_key = '_manage_stock')
    5655                 LEFT JOIN {$db}postmeta pa ON (p.ID = pa.post_id AND pa.meta_key = '_product_attributes')
    5656                 $joins
    5657                 $polylang_joins
    5658         WHERE   p.post_type IN ('product', 'product_variation')
    5659                 AND p.post_modified >= %s
    5660                 AND ((%s = 'includeDeleted') OR (p.post_status IN ('publish', 'private')))
    5661                 AND manageStock.meta_value <> 'no'
    5662         " . $this->get_subset_condition() . "
    5663         GROUP BY p.ID
    5664         ORDER BY p.ID ASC;
    5665         ",
    5666       $modifiedAfter,
    5667       $includeDeleted
    5668     );
     5649    if ( $prfi_subselects ) {
     5650      $sql = $wpdb->prepare("
     5651          SELECT  p.ID,
     5652                  p.post_title,
     5653                  p.post_parent,
     5654                  p.post_modified,
     5655                  CONVERT(
     5656                    (SELECT pm.meta_value FROM {$db}postmeta pm WHERE (p.ID = pm.post_id AND pm.meta_key = '_stock') LIMIT 1),
     5657                    SIGNED INTEGER) _stock,
     5658                  (SELECT sku.meta_value FROM {$db}postmeta sku WHERE (p.ID = sku.post_id AND sku.meta_key = '_sku') LIMIT 1) _sku,
     5659                  COALESCE(
     5660                    (SELECT low_stock_amount.meta_value FROM {$db}postmeta low_stock_amount
     5661                      WHERE (p.ID = low_stock_amount.post_id AND low_stock_amount.meta_key = '_low_stock_amount')
     5662                      LIMIT 1),
     5663                    (SELECT parent_low_stock_amount.meta_value FROM {$db}postmeta parent_low_stock_amount
     5664                      WHERE (p.post_parent = parent_low_stock_amount.post_id AND parent_low_stock_amount.meta_key = '_low_stock_amount')
     5665                      LIMIT 1)
     5666                  )
     5667                    _low_stock_amount,
     5668                  (SELECT regular_price.meta_value FROM {$db}postmeta regular_price
     5669                    WHERE (p.ID = regular_price.post_id AND regular_price.meta_key = '_regular_price') LIMIT 1) _regular_price,
     5670                  IF(
     5671                    (SELECT tax_class.meta_value FROM {$db}postmeta tax_class
     5672                      WHERE (p.ID = tax_class.post_id AND tax_class.meta_key = '_tax_class') LIMIT 1)
     5673                    <> 'parent',
     5674                    (SELECT tax_class.meta_value FROM {$db}postmeta tax_class
     5675                      WHERE (p.ID = tax_class.post_id AND tax_class.meta_key = '_tax_class') LIMIT 1),
     5676                    (SELECT parent_tax_class.meta_value FROM {$db}postmeta parent_tax_class
     5677                      WHERE (p.post_parent = parent_tax_class.post_id AND parent_tax_class.meta_key = '_tax_class') LIMIT 1)
     5678                  )
     5679                    _tax_class,
     5680                  (SELECT tax_status.meta_value FROM {$db}postmeta tax_status
     5681                    WHERE (p.ID = tax_status.post_id AND tax_status.meta_key = '_tax_status') LIMIT 1) _tax_status,
     5682                  (SELECT pa.meta_value FROM {$db}postmeta pa
     5683                    WHERE (p.ID = pa.post_id AND pa.meta_key = '_product_attributes') LIMIT 1) _product_attributes,
     5684                  IF ( p.post_status IN ('publish', 'private'), '', 'DELETE' ) __incrementalDelete
     5685                  $cols
     5686                  $polylang_cols
     5687          FROM    {$db}posts p
     5688                  $polylang_joins
     5689          WHERE   p.post_type IN ('product', 'product_variation')
     5690                  AND p.post_modified >= %s
     5691                  AND ((%s = 'includeDeleted') OR (p.post_status IN ('publish', 'private')))
     5692                  AND
     5693                    (SELECT manageStock.meta_value FROM {$db}postmeta manageStock
     5694                      WHERE (p.ID = manageStock.post_id AND manageStock.meta_key = '_manage_stock') LIMIT 1)
     5695                    <> 'no'
     5696          " . $this->get_subset_condition() . "
     5697          GROUP BY p.ID
     5698          ORDER BY p.ID ASC;
     5699          ",
     5700        $modifiedAfter,
     5701        $includeDeleted
     5702      );
     5703    } else {
     5704      $sql = $wpdb->prepare("
     5705          SELECT  p.ID,
     5706                  p.post_title,
     5707                  p.post_parent,
     5708                  p.post_modified,
     5709                  CONVERT(pm.meta_value, SIGNED INTEGER) _stock,
     5710                  sku.meta_value _sku,
     5711                  COALESCE(low_stock_amount.meta_value, parent_low_stock_amount.meta_value) _low_stock_amount,
     5712                  regular_price.meta_value _regular_price,
     5713                  IF(tax_class.meta_value <> 'parent', tax_class.meta_value, parent_tax_class.meta_value) _tax_class,
     5714                  tax_status.meta_value _tax_status,
     5715                  pa.meta_value _product_attributes,
     5716                  IF ( p.post_status IN ('publish', 'private'), '', 'DELETE' ) __incrementalDelete
     5717                  $cols
     5718                  $polylang_cols
     5719          FROM    {$db}posts p
     5720                  LEFT JOIN {$db}postmeta pm ON (p.ID = pm.post_id AND pm.meta_key = '_stock')
     5721                  LEFT JOIN {$db}postmeta sku ON (p.ID = sku.post_id AND sku.meta_key = '_sku')
     5722                  LEFT JOIN {$db}postmeta tax_status ON
     5723                    (p.ID = tax_status.post_id AND tax_status.meta_key = '_tax_status')
     5724                  LEFT JOIN {$db}postmeta tax_class ON
     5725                    (p.ID = tax_class.post_id AND tax_class.meta_key = '_tax_class')
     5726                  LEFT JOIN {$db}postmeta low_stock_amount ON
     5727                    (p.ID = low_stock_amount.post_id AND low_stock_amount.meta_key = '_low_stock_amount')
     5728                  LEFT JOIN {$db}postmeta regular_price ON
     5729                    (p.ID = regular_price.post_id AND regular_price.meta_key = '_regular_price')
     5730                  LEFT JOIN {$db}postmeta parent_low_stock_amount ON
     5731                    (p.post_parent = parent_low_stock_amount.post_id AND parent_low_stock_amount.meta_key = '_low_stock_amount')
     5732                  LEFT JOIN {$db}postmeta parent_tax_class ON
     5733                    (p.post_parent = parent_tax_class.post_id AND parent_tax_class.meta_key = '_tax_class')
     5734                  INNER JOIN {$db}postmeta manageStock ON (p.ID = manageStock.post_id AND manageStock.meta_key = '_manage_stock')
     5735                  LEFT JOIN {$db}postmeta pa ON (p.ID = pa.post_id AND pa.meta_key = '_product_attributes')
     5736                  $joins
     5737                  $polylang_joins
     5738          WHERE   p.post_type IN ('product', 'product_variation')
     5739                  AND p.post_modified >= %s
     5740                  AND ((%s = 'includeDeleted') OR (p.post_status IN ('publish', 'private')))
     5741                  AND manageStock.meta_value <> 'no'
     5742          " . $this->get_subset_condition() . "
     5743          GROUP BY p.ID
     5744          ORDER BY p.ID ASC;
     5745          ",
     5746        $modifiedAfter,
     5747        $includeDeleted
     5748      );
     5749    }
    56695750    $res = $wpdb->get_results($sql);
    56705751    if ( $polylang_cols ) {
  • profitori/trunk/readme.txt

    r2791040 r2794299  
    367367
    368368== Changelog ==
     369
     370= 2.1.0.2 =
     371* Tuned performance of product query
    369372
    370373= 2.1.0.1 =
Note: See TracChangeset for help on using the changeset viewer.