Plugin Directory

Changeset 2965886


Ignore:
Timestamp:
09/12/2023 12:38:55 PM (2 years ago)
Author:
shoppingfeed
Message:

Update to version 6.3.0 from GitHub

Location:
shopping-feed
Files:
2 added
34 edited
1 copied

Legend:

Unmodified
Added
Removed
  • shopping-feed/tags/6.3.0/readme.txt

    r2956157 r2965886  
    22Contributors: ShoppingFeed, BeAPI
    33Tags: shoppingfeed, marketplace, woocommerce, woocommerce shoppingfeed, create woocommerce products shoppingfeed, products feed, generate shoppingfeed, amazon, Jet, Walmart, many marketplace, import orders
    4 Stable tag: 6.2.0
    5 Version: 6.2.0
     4Stable tag: 6.3.0
     5Version: 6.3.0
    66Requires PHP: 7.1
    77Requires at least: 5.7
     
    1414
    1515== Changelog ==
     16* 6.3.0
     17  * Orders : Don't import orders fulfilled by the marketplaces by default, see details in the description.
     18  * WPCLI command : don't rerun the generation process when an error occurs.
    1619* 6.2.0
    1720  * Rework feed generation process to better handle shop with large amount of products.
     
    152155- In Settings, check that ShoppingFeed is enabled and save changes
    153156
     157## Orders fulfilled by the marketplaces
     158
     159The plugin won't import orders fulfilled by marketplaces by default.
     160
     161Options are available in the plugin settings to include those orders during the import.
     162
     163They can be found in the "Orders" tab :
     164
     165* Orders fulfilled by marketplace : import orders even if they are fulfilled by the marketplace.
     166* Fulfilled by marketplace order's status : select the status used for orders fulfilled by marketplaces when they are imported.
     167
    154168## Shipment tracking support
    155169
  • shopping-feed/tags/6.3.0/shoppingfeed.php

    r2956157 r2965886  
    88 * Text Domain:          shopping-feed
    99 * Domain Path:          /languages
    10  * Version:              6.2.0
     10 * Version:              6.3.0
    1111 * Requires at least:    5.7
    1212 * Requires PHP:         7.1
     
    2727}
    2828
    29 define( 'SF_VERSION', '6.2.0' );
     29define( 'SF_VERSION', '6.3.0' );
    3030define( 'SF_DB_VERSION_SLUG', 'SF_DB_VERSION' );
    3131define( 'SF_DB_VERSION', '1.0.0' );
  • shopping-feed/tags/6.3.0/src/Addons/Inventory/Inventory.php

    r2339808 r2965886  
    88use ShoppingFeed\ShoppingFeedWC\Addons\Inventory\Marketplaces\Amazon;
    99use ShoppingFeed\ShoppingFeedWC\Addons\Inventory\Marketplaces\Cdiscount;
     10use ShoppingFeed\ShoppingFeedWC\Addons\Inventory\Marketplaces\FulfilledByChannel;
    1011use ShoppingFeed\ShoppingFeedWC\Addons\Inventory\Marketplaces\MonoMono;
    1112
     
    2627    private $mono_mono;
    2728
     29    /**
     30     * @var FulfilledByChannel
     31     */
     32    private $fulfilled_by_channel;
     33
    2834    public function __construct() {
    29         $this->amazon    = new Amazon();
    30         $this->cdiscount = new Cdiscount();
    31         $this->mono_mono = new MonoMono();
     35        $this->amazon               = new Amazon();
     36        $this->cdiscount            = new Cdiscount();
     37        $this->mono_mono            = new MonoMono();
     38        $this->fulfilled_by_channel = new FulfilledByChannel();
    3239    }
    3340}
  • shopping-feed/tags/6.3.0/src/Addons/Inventory/Marketplaces/Amazon.php

    r2339808 r2965886  
    1313
    1414    public function __construct() {
    15         add_action( 'sf_add_metas', array( $this, 'add_metas' ) );
     15        add_action( 'sf_add_metas', [ $this, 'add_metas' ] );
    1616    }
    1717
     
    2020     */
    2121    public function add_metas( $metas ) {
    22         if (
    23             true !== $this->is_amazon( $metas->sf_order ) ||
    24             'AFN' !== $metas->sf_order->getPaymentInformation()['method']
    25         ) {
    26             return;
     22        if ( $this->is_fulfilled_by_amazon( $metas->sf_order ) ) {
     23            $metas->add_meta(
     24                Metas::$dont_update_inventory,
     25                true
     26            );
    2727        }
    28 
    29         $metas->add_meta(
    30             Metas::$dont_update_inventory,
    31             true
    32         );
    3328    }
    3429}
  • shopping-feed/tags/6.3.0/src/Addons/Inventory/Marketplaces/Cdiscount.php

    r2339808 r2965886  
    1313
    1414    public function __construct() {
    15         add_action( 'sf_add_metas', array( $this, 'add_metas' ) );
     15        add_action( 'sf_add_metas', [ $this, 'add_metas' ] );
    1616    }
    1717
     
    2020     */
    2121    public function add_metas( $metas ) {
    22         if (
    23             true !== $this->is_cdiscount( $metas->sf_order ) ||
    24             'CLogistique' !== $metas->sf_order->getPaymentInformation()['method']
    25         ) {
    26             return;
     22        if ( $this->is_fulfilled_by_cdiscount( $metas->sf_order ) ) {
     23            $metas->add_meta(
     24                Metas::$dont_update_inventory,
     25                true
     26            );
    2727        }
    28 
    29         $metas->add_meta(
    30             Metas::$dont_update_inventory,
    31             true
    32         );
    3328    }
    3429}
  • shopping-feed/tags/6.3.0/src/Addons/Inventory/Marketplaces/MonoMono.php

    r2339808 r2965886  
    1313
    1414    public function __construct() {
    15         add_action( 'sf_add_metas', array( $this, 'add_metas' ) );
     15        add_action( 'sf_add_metas', [ $this, 'add_metas' ] );
    1616    }
    1717
     
    2020     */
    2121    public function add_metas( $metas ) {
    22         if (
    23             (
    24                 true !== $this->is_mano_mano( $metas->sf_order ) &&
    25                 empty( $metas->sf_order_array['additionalFields']['env'] )
    26             ) ||
    27             'epmm' !== $metas->sf_order_array['additionalFields']['env']
    28         ) {
    29             return;
     22        if ( $this->is_fulfilled_by_manomano( $metas->sf_order ) ) {
     23            $metas->add_meta(
     24                Metas::$dont_update_inventory,
     25                true
     26            );
    3027        }
    31 
    32         $metas->add_meta(
    33             Metas::$dont_update_inventory,
    34             true
    35         );
    3628    }
    3729}
  • shopping-feed/tags/6.3.0/src/Addons/Marketplace.php

    r2717483 r2965886  
    11<?php
     2
    23namespace ShoppingFeed\ShoppingFeedWC\Addons;
    34
     
    1314trait Marketplace {
    1415    /**
    15      * @param $sf_order OrderResource
     16     * @param OrderResource $sf_order
    1617     *
    1718     * @return bool
     
    2526
    2627    /**
    27      * @param $sf_order OrderResource
     28     * @param OrderResource $sf_order
    2829     *
    2930     * @return bool
     
    3738
    3839    /**
    39      * @param $sf_order OrderResource
     40     * @param OrderResource $sf_order
    4041     *
    4142     * @return bool
     
    4950
    5051    /**
    51      * @param $sf_order OrderResource
     52     * @param OrderResource $sf_order
    5253     *
    5354     * @return bool
     
    5556    private function is_mano_mano( $sf_order ) {
    5657        return (
    57             strtoupper( $sf_order->getChannel()->getName() ) === 'ManoMano' ||
     58            strtoupper( $sf_order->getChannel()->getName() ) === 'MANOMANO' ||
    5859            $sf_order->getChannel()->getId() === 259
    5960        );
     
    6364     * Check if the current SF order is from the Zalando marketplace
    6465     *
    65      * @param $sf_order OrderResource
     66     * @param OrderResource $sf_order
    6667     *
    6768     * @return bool
    68      * @author Stéphane Gillot
    6969     */
    7070    private function is_zalando( $sf_order ) {
     
    8383    }
    8484
     85    /**
     86     * Check if the order is fulfilled by Amazon.
     87     *
     88     * @param OrderResource $sf_order
     89     *
     90     * @return bool
     91     */
     92    private function is_fulfilled_by_amazon( $sf_order ) {
     93        return $this->is_amazon( $sf_order ) && 'afn' === strtolower( $sf_order->getPaymentInformation()['method'] );
     94    }
     95
     96    /**
     97     * Check if the order is fulfilled by CDiscount.
     98     *
     99     * @param OrderResource $sf_order
     100     *
     101     * @return bool
     102     */
     103    private function is_fulfilled_by_cdiscount( $sf_order ) {
     104        return $this->is_cdiscount( $sf_order ) && 'clogistique' === strtolower( $sf_order->getPaymentInformation()['method'] );
     105    }
     106
     107    /**
     108     * Check if the order is fulfilled by ManoMano.
     109     *
     110     * @param OrderResource $sf_order
     111     *
     112     * @return bool
     113     */
     114    private function is_fulfilled_by_manomano( $sf_order ) {
     115        return $this->is_mano_mano( $sf_order ) && 'epmm' === strtolower( $sf_order->toArray()['additionalFields']['env'] );
     116    }
     117
     118    /**
     119     * Check if the order is fulfilled by the channel.
     120     *
     121     * @param OrderResource $sf_order
     122     *
     123     * @return bool
     124     */
     125    private function is_fulfilled_by_channel( $sf_order ) {
     126        return ! empty( $sf_order->toArray()['fulfilledBy'] ) && 'channel' === strtolower( $sf_order->toArray()['fulfilledBy'] );
     127    }
     128
     129    /**
     130     * Check if the order is fulfilled by a marketplace.
     131     *
     132     * @param OrderResource $sf_order
     133     *
     134     * @return bool
     135     */
     136    private function is_fulfilled_by_marketplace( $sf_order ) {
     137
     138        if ( $this->is_fulfilled_by_amazon( $sf_order ) ) {
     139            return true;
     140        }
     141
     142        if ( $this->is_fulfilled_by_cdiscount( $sf_order ) ) {
     143            return true;
     144        }
     145
     146        if ( $this->is_fulfilled_by_manomano( $sf_order ) ) {
     147            return true;
     148        }
     149
     150        if ( $this->is_fulfilled_by_channel( $sf_order ) ) {
     151            return true;
     152        }
     153
     154        return false;
     155    }
    85156}
  • shopping-feed/tags/6.3.0/src/Admin/Options.php

    r2748452 r2965886  
    986986
    987987        add_settings_section(
    988             'sf_orders_settings_import_frequency',
     988            'sf_orders_settings_import_options',
    989989            __( 'Import Options', 'shopping-feed' ),
    990990            function () {
     
    10001000        $frequencies_options = [];
    10011001        foreach ( $frequencies as $frequency ) {
    1002             $frequencies_options[ $frequency * MINUTE_IN_SECONDS ] = sprintf( '%s %s', $frequency, __( 'min', 'shopping-feed' ) );
     1002            $frequencies_options[ $frequency * MINUTE_IN_SECONDS ] = sprintf(
     1003                '%s %s',
     1004                $frequency,
     1005                __( 'min', 'shopping-feed' )
     1006            );
    10031007        }
    10041008
     
    10131017                        ?>
    10141018                        <option
    1015                                 value="<?php echo esc_html( $frequency ); ?>"
    1016                             <?php selected( $frequency, $this->sf_orders_options['import_frequency'] ? $this->sf_orders_options['import_frequency'] : false ); ?>
    1017                         ><?php echo esc_html( $name ); ?></option>
     1019                            value="<?php echo esc_attr( $frequency ); ?>"
     1020                            <?php selected( $frequency, isset( $this->sf_orders_options['import_frequency'] ) ? $this->sf_orders_options['import_frequency'] : false ); ?>>
     1021                            <?php echo esc_html( $name ); ?>
     1022                        </option>
    10181023                        <?php
    10191024                    }
    10201025                    ?>
    10211026                </select>
    1022                 <p class="description"
    1023                    id="tagline-description"><?php echo esc_attr_e( 'Frequency to import orders from SF', 'shopping-feed' ); ?></p>
     1027                <p class="description" id="tagline-description">
     1028                    <?php esc_html_e( 'Frequency to import orders from SF', 'shopping-feed' ); ?>
     1029                </p>
    10241030                <?php
    10251031            },
    10261032            self::SF_ORDERS_SETTINGS_PAGE,
    1027             'sf_orders_settings_import_frequency'
     1033            'sf_orders_settings_import_options'
    10281034        );
    10291035
    10301036        //statuses settings
    10311037        $wc_order_statuses = wc_get_order_statuses();
    1032 
    1033         //default status
    1034         add_settings_section(
    1035             'sf_orders_settings_default_status',
    1036             null,
    1037             function () {
    1038             },
    1039             self::SF_ORDERS_SETTINGS_PAGE
    1040         );
    10411038
    10421039        add_settings_field(
     
    10501047                        ?>
    10511048                        <option
    1052                                 value="<?php echo esc_html( $wc_order_statuse ); ?>"
    1053                             <?php selected( $wc_order_statuse, $this->sf_orders_options['default_status'] ? $this->sf_orders_options['default_status'] : false ); ?>
    1054                         ><?php echo esc_html( $name ); ?></option>
     1049                            value="<?php echo esc_html( $wc_order_statuse ); ?>"
     1050                            <?php selected( $wc_order_statuse, isset( $this->sf_orders_options['default_status'] ) ? $this->sf_orders_options['default_status'] : false ); ?>>
     1051                            <?php echo esc_html( $name ); ?>
     1052                        </option>
    10551053                        <?php
    10561054                    }
    10571055                    ?>
    10581056                </select>
    1059                 <p class="description"
    1060                    id="tagline-description"><?php echo esc_attr_e( 'Default Status for orders imported from from SF', 'shopping-feed' ); ?></p>
     1057                <p class="description" id="tagline-description">
     1058                    <?php esc_html_e( 'Default Status for orders imported from from SF', 'shopping-feed' ); ?>
     1059                </p>
    10611060                <?php
    10621061            },
    10631062            self::SF_ORDERS_SETTINGS_PAGE,
    1064             'sf_orders_settings_default_status'
     1063            'sf_orders_settings_import_options'
     1064        );
     1065
     1066        add_settings_field(
     1067            'import_orders_fulfilled_by_marketplace',
     1068            __( 'Orders fulfilled by marketplace', 'shopping-feed' ),
     1069            function () {
     1070                ?>
     1071                <label for="import_order_fulfilled">
     1072                    <input
     1073                        type="checkbox"
     1074                        id="import_order_fulfilled"
     1075                        name="<?php echo esc_attr( sprintf( '%s[import_order_fulfilled_by_marketplace]', self::SF_ORDERS_OPTIONS ) ); ?>"
     1076                        value="1"
     1077                        <?php checked( '1', isset( $this->sf_orders_options['import_order_fulfilled_by_marketplace'] ) ? $this->sf_orders_options['import_order_fulfilled_by_marketplace'] : '0' ); ?>
     1078                    >
     1079                    <?php esc_html_e( 'Import orders fulfilled by marketplace', 'shopping-feed' ); ?>
     1080                </label>
     1081                <p class="description" id="tagline-description">
     1082                    <?php esc_html_e( 'Import orders even if they are fulfilled by the marketplace.', 'shopping-feed' ); ?>
     1083                </p>
     1084                <?php
     1085            },
     1086            self::SF_ORDERS_SETTINGS_PAGE,
     1087            'sf_orders_settings_import_options'
     1088        );
     1089
     1090        add_settings_field(
     1091            'fulfilled_by_marketplace_order_status',
     1092            __( "Fulfilled by marketplace order's status", 'shopping-feed' ),
     1093            function () use ( $wc_order_statuses ) {
     1094                ?>
     1095                <select
     1096                        name="<?php echo esc_html( sprintf( '%s[fulfilled_by_marketplace_order_status]', self::SF_ORDERS_OPTIONS ) ); ?>"
     1097                >
     1098                    <?php
     1099                    foreach ( $wc_order_statuses as $wc_order_statuse => $name ) {
     1100                        ?>
     1101                        <option
     1102                                value="<?php echo esc_html( $wc_order_statuse ); ?>"
     1103                            <?php selected( $wc_order_statuse, isset( $this->sf_orders_options['fulfilled_by_marketplace_order_status'] ) ? $this->sf_orders_options['fulfilled_by_marketplace_order_status'] : 'wc-completed' ); ?>>
     1104                            <?php echo esc_html( $name ); ?>
     1105                        </option>
     1106                        <?php
     1107                    }
     1108                    ?>
     1109                </select>
     1110                <p class="description" id="tagline-description">
     1111                    <?php esc_html_e( 'Status used for orders fulfilled by marketplaces when they are imported.', 'shopping-feed' ); ?>
     1112                </p>
     1113                <?php
     1114            },
     1115            self::SF_ORDERS_SETTINGS_PAGE,
     1116            'sf_orders_settings_import_options'
    10651117        );
    10661118
  • shopping-feed/tags/6.3.0/src/Cli/FeedGeneration.php

    r2339808 r2965886  
    1616    public function __invoke() {
    1717        $generator = Generator::get_instance();
    18         if ( is_wp_error( $generator->generate() ) ) {
     18        $return = $generator->generate();
     19        if ( is_wp_error( $return ) ) {
    1920            \WP_CLI::error(
    2021                sprintf(
    2122                /* translators: %s: Error message */
    2223                    __( 'Error during feed generation : %s', 'shopping-feed' ),
    23                     $generator->generate()->get_error_message()
     24                    $return->get_error_message()
    2425                )
    2526            );
  • shopping-feed/tags/6.3.0/src/Orders/Order/Status.php

    r2339808 r2965886  
    55defined( 'ABSPATH' ) || exit;
    66
    7 
    87use ShoppingFeed\Sdk\Api\Order\OrderResource;
     8use ShoppingFeed\ShoppingFeedWC\Addons\Marketplace;
    99use ShoppingFeed\ShoppingFeedWC\ShoppingFeedHelper;
    1010
     
    1414 */
    1515class Status {
     16
     17    use Marketplace;
    1618
    1719    /**
     
    4042        $this->set_name( ShoppingFeedHelper::get_sf_default_order_status() );
    4143        $this->set_note( sprintf( 'Order from : %s', $sf_order->getChannel()->getName() ) );
     44
     45        if ( $this->is_fulfilled_by_marketplace( $sf_order ) ) {
     46            $this->set_name( ShoppingFeedHelper::get_sf_fulfilled_by_channel_order_status() );
     47        }
    4248    }
    4349
  • shopping-feed/tags/6.3.0/src/Orders/Orders.php

    r2785151 r2965886  
    66defined( 'ABSPATH' ) || exit;
    77
     8use ShoppingFeed\Sdk\Api\Order\OrderResource;
    89use ShoppingFeed\Sdk\Api\Store\StoreResource;
     10use ShoppingFeed\ShoppingFeedWC\Addons\Marketplace;
    911use ShoppingFeed\ShoppingFeedWC\Sdk\Sdk;
    1012use ShoppingFeed\ShoppingFeedWC\ShoppingFeedHelper;
     
    1416 */
    1517class Orders {
     18
     19    use Marketplace;
    1620
    1721    /**
     
    7781                ShoppingFeedHelper::get_logger()->notice(
    7882                    sprintf(
    79                     /* translators: %1$1s: Order reference. %2$2s: Order id. */
    80                         __( 'Order already imported  %1$1s => %2$2s', 'shopping-feed' ),
     83                        /* translators: 1: Order reference. 2: Order id. */
     84                        __( 'Order already imported %1$1s (%2$2s)', 'shopping-feed' ),
     85                        $sf_order->getReference(),
     86                        $sf_order->getId()
     87                    ),
     88                    array(
     89                        'source' => 'shopping-feed',
     90                    )
     91                );
     92                continue;
     93            }
     94
     95            if ( ! $this->can_import_order( $sf_order ) ) {
     96                ShoppingFeedHelper::get_logger()->notice(
     97                    sprintf(
     98                        /* translators: 1: Order reference. 2: Order id. */
     99                        __( 'Order fulfilled by channel %1$1s (%2$2s)', 'shopping-feed' ),
    81100                        $sf_order->getReference(),
    82101                        $sf_order->getId()
     
    97116        return true;
    98117    }
     118
     119    /**
     120     * Check if the order can be imported.
     121     *
     122     * @param OrderResource $sf_order
     123     *
     124     * @return bool
     125     */
     126    public function can_import_order( $sf_order ) {
     127        // Allow user for force imports for orders fulfilled by the marketplaces.
     128        $orders_options = ShoppingFeedHelper::get_sf_orders_options();
     129        if ( isset( $orders_options['import_order_fulfilled_by_marketplace'] ) && true === (bool) $orders_options['import_order_fulfilled_by_marketplace'] ) {
     130            return true;
     131        }
     132
     133        return false === $this->is_fulfilled_by_marketplace( $sf_order );
     134    }
    99135}
  • shopping-feed/tags/6.3.0/src/ShoppingFeedHelper.php

    r2956157 r2965886  
    376376
    377377    /**
     378     * Return SF fulfilled by marketplace order status.
     379     * @return string
     380     */
     381    public static function get_sf_fulfilled_by_channel_order_status() {
     382        $orders_options = self::get_sf_orders_options();
     383        if ( ! is_array( $orders_options ) ) {
     384            return 'wc-completed';
     385        }
     386
     387        return ! empty( $orders_options['fulfilled_by_marketplace_order_status'] )
     388            ? $orders_options['fulfilled_by_marketplace_order_status']
     389            : 'wc-completed';
     390    }
     391
     392    /**
    378393     * Return SF orders import
    379394     * default: 15 MINUTES
     
    639654     */
    640655    public static function sf_order_statuses_to_import() {
    641         return apply_filters( 'shopping_feed_orders_to_import', array( 'waiting_shipment' ) );
     656        $default_statuses = [ 'waiting_shipment' ];
     657        $orders_options = self::get_sf_orders_options();
     658
     659        /**
     660         * Add shipped status if importing fulfilled by marketplace orders
     661         * @see https://support.beapi.fr/issues/60658
     662         */
     663        if ( isset( $orders_options['import_order_fulfilled_by_marketplace'] ) && true === (bool) $orders_options['import_order_fulfilled_by_marketplace'] ) {
     664            $fullfilled_by_marketplace_statuses = [ 'shipped', 'refunded', 'cancelled' ];
     665            $default_statuses = array_merge( $default_statuses, $fullfilled_by_marketplace_statuses );
     666        }
     667
     668        return apply_filters( 'shopping_feed_orders_to_import', $default_statuses );
    642669    }
    643670
  • shopping-feed/tags/6.3.0/vendor/autoload.php

    r2956157 r2965886  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInit04b8226c92be02a57b9cd59a31bee5d4::getLoader();
     7return ComposerAutoloaderInit6ae1c61023135e79f79b19c4ed257c4e::getLoader();
  • shopping-feed/tags/6.3.0/vendor/composer/autoload_classmap.php

    r2785151 r2965886  
    305305    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\Amazon' => $baseDir . '/src/Addons/Inventory/Marketplaces/Amazon.php',
    306306    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\Cdiscount' => $baseDir . '/src/Addons/Inventory/Marketplaces/Cdiscount.php',
     307    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\FulfilledByChannel' => $baseDir . '/src/Addons/Inventory/Marketplaces/FulfilledByChannel.php',
    307308    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\MonoMono' => $baseDir . '/src/Addons/Inventory/Marketplaces/MonoMono.php',
    308309    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Marketplace' => $baseDir . '/src/Addons/Marketplace.php',
  • shopping-feed/tags/6.3.0/vendor/composer/autoload_real.php

    r2956157 r2965886  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit04b8226c92be02a57b9cd59a31bee5d4
     5class ComposerAutoloaderInit6ae1c61023135e79f79b19c4ed257c4e
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit04b8226c92be02a57b9cd59a31bee5d4', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInit6ae1c61023135e79f79b19c4ed257c4e', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit04b8226c92be02a57b9cd59a31bee5d4', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit6ae1c61023135e79f79b19c4ed257c4e', 'loadClassLoader'));
    3030
    3131        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     
    3333            require __DIR__ . '/autoload_static.php';
    3434
    35             call_user_func(\Composer\Autoload\ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::getInitializer($loader));
     35            call_user_func(\Composer\Autoload\ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::getInitializer($loader));
    3636        } else {
    3737            $map = require __DIR__ . '/autoload_namespaces.php';
     
    5454
    5555        if ($useStaticLoader) {
    56             $includeFiles = Composer\Autoload\ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::$files;
     56            $includeFiles = Composer\Autoload\ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::$files;
    5757        } else {
    5858            $includeFiles = require __DIR__ . '/autoload_files.php';
    5959        }
    6060        foreach ($includeFiles as $fileIdentifier => $file) {
    61             composerRequire04b8226c92be02a57b9cd59a31bee5d4($fileIdentifier, $file);
     61            composerRequire6ae1c61023135e79f79b19c4ed257c4e($fileIdentifier, $file);
    6262        }
    6363
     
    7171 * @return void
    7272 */
    73 function composerRequire04b8226c92be02a57b9cd59a31bee5d4($fileIdentifier, $file)
     73function composerRequire6ae1c61023135e79f79b19c4ed257c4e($fileIdentifier, $file)
    7474{
    7575    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • shopping-feed/tags/6.3.0/vendor/composer/autoload_static.php

    r2956157 r2965886  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4
     7class ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e
    88{
    99    public static $files = array (
     
    395395        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\Amazon' => __DIR__ . '/../..' . '/src/Addons/Inventory/Marketplaces/Amazon.php',
    396396        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\Cdiscount' => __DIR__ . '/../..' . '/src/Addons/Inventory/Marketplaces/Cdiscount.php',
     397        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\FulfilledByChannel' => __DIR__ . '/../..' . '/src/Addons/Inventory/Marketplaces/FulfilledByChannel.php',
    397398        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\MonoMono' => __DIR__ . '/../..' . '/src/Addons/Inventory/Marketplaces/MonoMono.php',
    398399        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Marketplace' => __DIR__ . '/../..' . '/src/Addons/Marketplace.php',
     
    449450    {
    450451        return \Closure::bind(function () use ($loader) {
    451             $loader->prefixLengthsPsr4 = ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::$prefixLengthsPsr4;
    452             $loader->prefixDirsPsr4 = ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::$prefixDirsPsr4;
    453             $loader->classMap = ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::$classMap;
     452            $loader->prefixLengthsPsr4 = ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::$prefixLengthsPsr4;
     453            $loader->prefixDirsPsr4 = ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::$prefixDirsPsr4;
     454            $loader->classMap = ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::$classMap;
    454455
    455456        }, null, ClassLoader::class);
  • shopping-feed/tags/6.3.0/vendor/composer/installed.php

    r2956157 r2965886  
    66        'install_path' => __DIR__ . '/../../',
    77        'aliases' => array(),
    8         'reference' => '13d6fc50d163ede4c1a910d7b164b31527ed0250',
     8        'reference' => '44f93b44061d87eb2b3907fb30fa653c0b87cece',
    99        'name' => 'shoppingfeed/shoppingfeed-for-woocommerce',
    1010        'dev' => false,
     
    107107            'install_path' => __DIR__ . '/../../',
    108108            'aliases' => array(),
    109             'reference' => '13d6fc50d163ede4c1a910d7b164b31527ed0250',
     109            'reference' => '44f93b44061d87eb2b3907fb30fa653c0b87cece',
    110110            'dev_requirement' => false,
    111111        ),
  • shopping-feed/trunk/readme.txt

    r2956157 r2965886  
    22Contributors: ShoppingFeed, BeAPI
    33Tags: shoppingfeed, marketplace, woocommerce, woocommerce shoppingfeed, create woocommerce products shoppingfeed, products feed, generate shoppingfeed, amazon, Jet, Walmart, many marketplace, import orders
    4 Stable tag: 6.2.0
    5 Version: 6.2.0
     4Stable tag: 6.3.0
     5Version: 6.3.0
    66Requires PHP: 7.1
    77Requires at least: 5.7
     
    1414
    1515== Changelog ==
     16* 6.3.0
     17  * Orders : Don't import orders fulfilled by the marketplaces by default, see details in the description.
     18  * WPCLI command : don't rerun the generation process when an error occurs.
    1619* 6.2.0
    1720  * Rework feed generation process to better handle shop with large amount of products.
     
    152155- In Settings, check that ShoppingFeed is enabled and save changes
    153156
     157## Orders fulfilled by the marketplaces
     158
     159The plugin won't import orders fulfilled by marketplaces by default.
     160
     161Options are available in the plugin settings to include those orders during the import.
     162
     163They can be found in the "Orders" tab :
     164
     165* Orders fulfilled by marketplace : import orders even if they are fulfilled by the marketplace.
     166* Fulfilled by marketplace order's status : select the status used for orders fulfilled by marketplaces when they are imported.
     167
    154168## Shipment tracking support
    155169
  • shopping-feed/trunk/shoppingfeed.php

    r2956157 r2965886  
    88 * Text Domain:          shopping-feed
    99 * Domain Path:          /languages
    10  * Version:              6.2.0
     10 * Version:              6.3.0
    1111 * Requires at least:    5.7
    1212 * Requires PHP:         7.1
     
    2727}
    2828
    29 define( 'SF_VERSION', '6.2.0' );
     29define( 'SF_VERSION', '6.3.0' );
    3030define( 'SF_DB_VERSION_SLUG', 'SF_DB_VERSION' );
    3131define( 'SF_DB_VERSION', '1.0.0' );
  • shopping-feed/trunk/src/Addons/Inventory/Inventory.php

    r2339808 r2965886  
    88use ShoppingFeed\ShoppingFeedWC\Addons\Inventory\Marketplaces\Amazon;
    99use ShoppingFeed\ShoppingFeedWC\Addons\Inventory\Marketplaces\Cdiscount;
     10use ShoppingFeed\ShoppingFeedWC\Addons\Inventory\Marketplaces\FulfilledByChannel;
    1011use ShoppingFeed\ShoppingFeedWC\Addons\Inventory\Marketplaces\MonoMono;
    1112
     
    2627    private $mono_mono;
    2728
     29    /**
     30     * @var FulfilledByChannel
     31     */
     32    private $fulfilled_by_channel;
     33
    2834    public function __construct() {
    29         $this->amazon    = new Amazon();
    30         $this->cdiscount = new Cdiscount();
    31         $this->mono_mono = new MonoMono();
     35        $this->amazon               = new Amazon();
     36        $this->cdiscount            = new Cdiscount();
     37        $this->mono_mono            = new MonoMono();
     38        $this->fulfilled_by_channel = new FulfilledByChannel();
    3239    }
    3340}
  • shopping-feed/trunk/src/Addons/Inventory/Marketplaces/Amazon.php

    r2339808 r2965886  
    1313
    1414    public function __construct() {
    15         add_action( 'sf_add_metas', array( $this, 'add_metas' ) );
     15        add_action( 'sf_add_metas', [ $this, 'add_metas' ] );
    1616    }
    1717
     
    2020     */
    2121    public function add_metas( $metas ) {
    22         if (
    23             true !== $this->is_amazon( $metas->sf_order ) ||
    24             'AFN' !== $metas->sf_order->getPaymentInformation()['method']
    25         ) {
    26             return;
     22        if ( $this->is_fulfilled_by_amazon( $metas->sf_order ) ) {
     23            $metas->add_meta(
     24                Metas::$dont_update_inventory,
     25                true
     26            );
    2727        }
    28 
    29         $metas->add_meta(
    30             Metas::$dont_update_inventory,
    31             true
    32         );
    3328    }
    3429}
  • shopping-feed/trunk/src/Addons/Inventory/Marketplaces/Cdiscount.php

    r2339808 r2965886  
    1313
    1414    public function __construct() {
    15         add_action( 'sf_add_metas', array( $this, 'add_metas' ) );
     15        add_action( 'sf_add_metas', [ $this, 'add_metas' ] );
    1616    }
    1717
     
    2020     */
    2121    public function add_metas( $metas ) {
    22         if (
    23             true !== $this->is_cdiscount( $metas->sf_order ) ||
    24             'CLogistique' !== $metas->sf_order->getPaymentInformation()['method']
    25         ) {
    26             return;
     22        if ( $this->is_fulfilled_by_cdiscount( $metas->sf_order ) ) {
     23            $metas->add_meta(
     24                Metas::$dont_update_inventory,
     25                true
     26            );
    2727        }
    28 
    29         $metas->add_meta(
    30             Metas::$dont_update_inventory,
    31             true
    32         );
    3328    }
    3429}
  • shopping-feed/trunk/src/Addons/Inventory/Marketplaces/MonoMono.php

    r2339808 r2965886  
    1313
    1414    public function __construct() {
    15         add_action( 'sf_add_metas', array( $this, 'add_metas' ) );
     15        add_action( 'sf_add_metas', [ $this, 'add_metas' ] );
    1616    }
    1717
     
    2020     */
    2121    public function add_metas( $metas ) {
    22         if (
    23             (
    24                 true !== $this->is_mano_mano( $metas->sf_order ) &&
    25                 empty( $metas->sf_order_array['additionalFields']['env'] )
    26             ) ||
    27             'epmm' !== $metas->sf_order_array['additionalFields']['env']
    28         ) {
    29             return;
     22        if ( $this->is_fulfilled_by_manomano( $metas->sf_order ) ) {
     23            $metas->add_meta(
     24                Metas::$dont_update_inventory,
     25                true
     26            );
    3027        }
    31 
    32         $metas->add_meta(
    33             Metas::$dont_update_inventory,
    34             true
    35         );
    3628    }
    3729}
  • shopping-feed/trunk/src/Addons/Marketplace.php

    r2717483 r2965886  
    11<?php
     2
    23namespace ShoppingFeed\ShoppingFeedWC\Addons;
    34
     
    1314trait Marketplace {
    1415    /**
    15      * @param $sf_order OrderResource
     16     * @param OrderResource $sf_order
    1617     *
    1718     * @return bool
     
    2526
    2627    /**
    27      * @param $sf_order OrderResource
     28     * @param OrderResource $sf_order
    2829     *
    2930     * @return bool
     
    3738
    3839    /**
    39      * @param $sf_order OrderResource
     40     * @param OrderResource $sf_order
    4041     *
    4142     * @return bool
     
    4950
    5051    /**
    51      * @param $sf_order OrderResource
     52     * @param OrderResource $sf_order
    5253     *
    5354     * @return bool
     
    5556    private function is_mano_mano( $sf_order ) {
    5657        return (
    57             strtoupper( $sf_order->getChannel()->getName() ) === 'ManoMano' ||
     58            strtoupper( $sf_order->getChannel()->getName() ) === 'MANOMANO' ||
    5859            $sf_order->getChannel()->getId() === 259
    5960        );
     
    6364     * Check if the current SF order is from the Zalando marketplace
    6465     *
    65      * @param $sf_order OrderResource
     66     * @param OrderResource $sf_order
    6667     *
    6768     * @return bool
    68      * @author Stéphane Gillot
    6969     */
    7070    private function is_zalando( $sf_order ) {
     
    8383    }
    8484
     85    /**
     86     * Check if the order is fulfilled by Amazon.
     87     *
     88     * @param OrderResource $sf_order
     89     *
     90     * @return bool
     91     */
     92    private function is_fulfilled_by_amazon( $sf_order ) {
     93        return $this->is_amazon( $sf_order ) && 'afn' === strtolower( $sf_order->getPaymentInformation()['method'] );
     94    }
     95
     96    /**
     97     * Check if the order is fulfilled by CDiscount.
     98     *
     99     * @param OrderResource $sf_order
     100     *
     101     * @return bool
     102     */
     103    private function is_fulfilled_by_cdiscount( $sf_order ) {
     104        return $this->is_cdiscount( $sf_order ) && 'clogistique' === strtolower( $sf_order->getPaymentInformation()['method'] );
     105    }
     106
     107    /**
     108     * Check if the order is fulfilled by ManoMano.
     109     *
     110     * @param OrderResource $sf_order
     111     *
     112     * @return bool
     113     */
     114    private function is_fulfilled_by_manomano( $sf_order ) {
     115        return $this->is_mano_mano( $sf_order ) && 'epmm' === strtolower( $sf_order->toArray()['additionalFields']['env'] );
     116    }
     117
     118    /**
     119     * Check if the order is fulfilled by the channel.
     120     *
     121     * @param OrderResource $sf_order
     122     *
     123     * @return bool
     124     */
     125    private function is_fulfilled_by_channel( $sf_order ) {
     126        return ! empty( $sf_order->toArray()['fulfilledBy'] ) && 'channel' === strtolower( $sf_order->toArray()['fulfilledBy'] );
     127    }
     128
     129    /**
     130     * Check if the order is fulfilled by a marketplace.
     131     *
     132     * @param OrderResource $sf_order
     133     *
     134     * @return bool
     135     */
     136    private function is_fulfilled_by_marketplace( $sf_order ) {
     137
     138        if ( $this->is_fulfilled_by_amazon( $sf_order ) ) {
     139            return true;
     140        }
     141
     142        if ( $this->is_fulfilled_by_cdiscount( $sf_order ) ) {
     143            return true;
     144        }
     145
     146        if ( $this->is_fulfilled_by_manomano( $sf_order ) ) {
     147            return true;
     148        }
     149
     150        if ( $this->is_fulfilled_by_channel( $sf_order ) ) {
     151            return true;
     152        }
     153
     154        return false;
     155    }
    85156}
  • shopping-feed/trunk/src/Admin/Options.php

    r2748452 r2965886  
    986986
    987987        add_settings_section(
    988             'sf_orders_settings_import_frequency',
     988            'sf_orders_settings_import_options',
    989989            __( 'Import Options', 'shopping-feed' ),
    990990            function () {
     
    10001000        $frequencies_options = [];
    10011001        foreach ( $frequencies as $frequency ) {
    1002             $frequencies_options[ $frequency * MINUTE_IN_SECONDS ] = sprintf( '%s %s', $frequency, __( 'min', 'shopping-feed' ) );
     1002            $frequencies_options[ $frequency * MINUTE_IN_SECONDS ] = sprintf(
     1003                '%s %s',
     1004                $frequency,
     1005                __( 'min', 'shopping-feed' )
     1006            );
    10031007        }
    10041008
     
    10131017                        ?>
    10141018                        <option
    1015                                 value="<?php echo esc_html( $frequency ); ?>"
    1016                             <?php selected( $frequency, $this->sf_orders_options['import_frequency'] ? $this->sf_orders_options['import_frequency'] : false ); ?>
    1017                         ><?php echo esc_html( $name ); ?></option>
     1019                            value="<?php echo esc_attr( $frequency ); ?>"
     1020                            <?php selected( $frequency, isset( $this->sf_orders_options['import_frequency'] ) ? $this->sf_orders_options['import_frequency'] : false ); ?>>
     1021                            <?php echo esc_html( $name ); ?>
     1022                        </option>
    10181023                        <?php
    10191024                    }
    10201025                    ?>
    10211026                </select>
    1022                 <p class="description"
    1023                    id="tagline-description"><?php echo esc_attr_e( 'Frequency to import orders from SF', 'shopping-feed' ); ?></p>
     1027                <p class="description" id="tagline-description">
     1028                    <?php esc_html_e( 'Frequency to import orders from SF', 'shopping-feed' ); ?>
     1029                </p>
    10241030                <?php
    10251031            },
    10261032            self::SF_ORDERS_SETTINGS_PAGE,
    1027             'sf_orders_settings_import_frequency'
     1033            'sf_orders_settings_import_options'
    10281034        );
    10291035
    10301036        //statuses settings
    10311037        $wc_order_statuses = wc_get_order_statuses();
    1032 
    1033         //default status
    1034         add_settings_section(
    1035             'sf_orders_settings_default_status',
    1036             null,
    1037             function () {
    1038             },
    1039             self::SF_ORDERS_SETTINGS_PAGE
    1040         );
    10411038
    10421039        add_settings_field(
     
    10501047                        ?>
    10511048                        <option
    1052                                 value="<?php echo esc_html( $wc_order_statuse ); ?>"
    1053                             <?php selected( $wc_order_statuse, $this->sf_orders_options['default_status'] ? $this->sf_orders_options['default_status'] : false ); ?>
    1054                         ><?php echo esc_html( $name ); ?></option>
     1049                            value="<?php echo esc_html( $wc_order_statuse ); ?>"
     1050                            <?php selected( $wc_order_statuse, isset( $this->sf_orders_options['default_status'] ) ? $this->sf_orders_options['default_status'] : false ); ?>>
     1051                            <?php echo esc_html( $name ); ?>
     1052                        </option>
    10551053                        <?php
    10561054                    }
    10571055                    ?>
    10581056                </select>
    1059                 <p class="description"
    1060                    id="tagline-description"><?php echo esc_attr_e( 'Default Status for orders imported from from SF', 'shopping-feed' ); ?></p>
     1057                <p class="description" id="tagline-description">
     1058                    <?php esc_html_e( 'Default Status for orders imported from from SF', 'shopping-feed' ); ?>
     1059                </p>
    10611060                <?php
    10621061            },
    10631062            self::SF_ORDERS_SETTINGS_PAGE,
    1064             'sf_orders_settings_default_status'
     1063            'sf_orders_settings_import_options'
     1064        );
     1065
     1066        add_settings_field(
     1067            'import_orders_fulfilled_by_marketplace',
     1068            __( 'Orders fulfilled by marketplace', 'shopping-feed' ),
     1069            function () {
     1070                ?>
     1071                <label for="import_order_fulfilled">
     1072                    <input
     1073                        type="checkbox"
     1074                        id="import_order_fulfilled"
     1075                        name="<?php echo esc_attr( sprintf( '%s[import_order_fulfilled_by_marketplace]', self::SF_ORDERS_OPTIONS ) ); ?>"
     1076                        value="1"
     1077                        <?php checked( '1', isset( $this->sf_orders_options['import_order_fulfilled_by_marketplace'] ) ? $this->sf_orders_options['import_order_fulfilled_by_marketplace'] : '0' ); ?>
     1078                    >
     1079                    <?php esc_html_e( 'Import orders fulfilled by marketplace', 'shopping-feed' ); ?>
     1080                </label>
     1081                <p class="description" id="tagline-description">
     1082                    <?php esc_html_e( 'Import orders even if they are fulfilled by the marketplace.', 'shopping-feed' ); ?>
     1083                </p>
     1084                <?php
     1085            },
     1086            self::SF_ORDERS_SETTINGS_PAGE,
     1087            'sf_orders_settings_import_options'
     1088        );
     1089
     1090        add_settings_field(
     1091            'fulfilled_by_marketplace_order_status',
     1092            __( "Fulfilled by marketplace order's status", 'shopping-feed' ),
     1093            function () use ( $wc_order_statuses ) {
     1094                ?>
     1095                <select
     1096                        name="<?php echo esc_html( sprintf( '%s[fulfilled_by_marketplace_order_status]', self::SF_ORDERS_OPTIONS ) ); ?>"
     1097                >
     1098                    <?php
     1099                    foreach ( $wc_order_statuses as $wc_order_statuse => $name ) {
     1100                        ?>
     1101                        <option
     1102                                value="<?php echo esc_html( $wc_order_statuse ); ?>"
     1103                            <?php selected( $wc_order_statuse, isset( $this->sf_orders_options['fulfilled_by_marketplace_order_status'] ) ? $this->sf_orders_options['fulfilled_by_marketplace_order_status'] : 'wc-completed' ); ?>>
     1104                            <?php echo esc_html( $name ); ?>
     1105                        </option>
     1106                        <?php
     1107                    }
     1108                    ?>
     1109                </select>
     1110                <p class="description" id="tagline-description">
     1111                    <?php esc_html_e( 'Status used for orders fulfilled by marketplaces when they are imported.', 'shopping-feed' ); ?>
     1112                </p>
     1113                <?php
     1114            },
     1115            self::SF_ORDERS_SETTINGS_PAGE,
     1116            'sf_orders_settings_import_options'
    10651117        );
    10661118
  • shopping-feed/trunk/src/Cli/FeedGeneration.php

    r2339808 r2965886  
    1616    public function __invoke() {
    1717        $generator = Generator::get_instance();
    18         if ( is_wp_error( $generator->generate() ) ) {
     18        $return = $generator->generate();
     19        if ( is_wp_error( $return ) ) {
    1920            \WP_CLI::error(
    2021                sprintf(
    2122                /* translators: %s: Error message */
    2223                    __( 'Error during feed generation : %s', 'shopping-feed' ),
    23                     $generator->generate()->get_error_message()
     24                    $return->get_error_message()
    2425                )
    2526            );
  • shopping-feed/trunk/src/Orders/Order/Status.php

    r2339808 r2965886  
    55defined( 'ABSPATH' ) || exit;
    66
    7 
    87use ShoppingFeed\Sdk\Api\Order\OrderResource;
     8use ShoppingFeed\ShoppingFeedWC\Addons\Marketplace;
    99use ShoppingFeed\ShoppingFeedWC\ShoppingFeedHelper;
    1010
     
    1414 */
    1515class Status {
     16
     17    use Marketplace;
    1618
    1719    /**
     
    4042        $this->set_name( ShoppingFeedHelper::get_sf_default_order_status() );
    4143        $this->set_note( sprintf( 'Order from : %s', $sf_order->getChannel()->getName() ) );
     44
     45        if ( $this->is_fulfilled_by_marketplace( $sf_order ) ) {
     46            $this->set_name( ShoppingFeedHelper::get_sf_fulfilled_by_channel_order_status() );
     47        }
    4248    }
    4349
  • shopping-feed/trunk/src/Orders/Orders.php

    r2785151 r2965886  
    66defined( 'ABSPATH' ) || exit;
    77
     8use ShoppingFeed\Sdk\Api\Order\OrderResource;
    89use ShoppingFeed\Sdk\Api\Store\StoreResource;
     10use ShoppingFeed\ShoppingFeedWC\Addons\Marketplace;
    911use ShoppingFeed\ShoppingFeedWC\Sdk\Sdk;
    1012use ShoppingFeed\ShoppingFeedWC\ShoppingFeedHelper;
     
    1416 */
    1517class Orders {
     18
     19    use Marketplace;
    1620
    1721    /**
     
    7781                ShoppingFeedHelper::get_logger()->notice(
    7882                    sprintf(
    79                     /* translators: %1$1s: Order reference. %2$2s: Order id. */
    80                         __( 'Order already imported  %1$1s => %2$2s', 'shopping-feed' ),
     83                        /* translators: 1: Order reference. 2: Order id. */
     84                        __( 'Order already imported %1$1s (%2$2s)', 'shopping-feed' ),
     85                        $sf_order->getReference(),
     86                        $sf_order->getId()
     87                    ),
     88                    array(
     89                        'source' => 'shopping-feed',
     90                    )
     91                );
     92                continue;
     93            }
     94
     95            if ( ! $this->can_import_order( $sf_order ) ) {
     96                ShoppingFeedHelper::get_logger()->notice(
     97                    sprintf(
     98                        /* translators: 1: Order reference. 2: Order id. */
     99                        __( 'Order fulfilled by channel %1$1s (%2$2s)', 'shopping-feed' ),
    81100                        $sf_order->getReference(),
    82101                        $sf_order->getId()
     
    97116        return true;
    98117    }
     118
     119    /**
     120     * Check if the order can be imported.
     121     *
     122     * @param OrderResource $sf_order
     123     *
     124     * @return bool
     125     */
     126    public function can_import_order( $sf_order ) {
     127        // Allow user for force imports for orders fulfilled by the marketplaces.
     128        $orders_options = ShoppingFeedHelper::get_sf_orders_options();
     129        if ( isset( $orders_options['import_order_fulfilled_by_marketplace'] ) && true === (bool) $orders_options['import_order_fulfilled_by_marketplace'] ) {
     130            return true;
     131        }
     132
     133        return false === $this->is_fulfilled_by_marketplace( $sf_order );
     134    }
    99135}
  • shopping-feed/trunk/src/ShoppingFeedHelper.php

    r2956157 r2965886  
    376376
    377377    /**
     378     * Return SF fulfilled by marketplace order status.
     379     * @return string
     380     */
     381    public static function get_sf_fulfilled_by_channel_order_status() {
     382        $orders_options = self::get_sf_orders_options();
     383        if ( ! is_array( $orders_options ) ) {
     384            return 'wc-completed';
     385        }
     386
     387        return ! empty( $orders_options['fulfilled_by_marketplace_order_status'] )
     388            ? $orders_options['fulfilled_by_marketplace_order_status']
     389            : 'wc-completed';
     390    }
     391
     392    /**
    378393     * Return SF orders import
    379394     * default: 15 MINUTES
     
    639654     */
    640655    public static function sf_order_statuses_to_import() {
    641         return apply_filters( 'shopping_feed_orders_to_import', array( 'waiting_shipment' ) );
     656        $default_statuses = [ 'waiting_shipment' ];
     657        $orders_options = self::get_sf_orders_options();
     658
     659        /**
     660         * Add shipped status if importing fulfilled by marketplace orders
     661         * @see https://support.beapi.fr/issues/60658
     662         */
     663        if ( isset( $orders_options['import_order_fulfilled_by_marketplace'] ) && true === (bool) $orders_options['import_order_fulfilled_by_marketplace'] ) {
     664            $fullfilled_by_marketplace_statuses = [ 'shipped', 'refunded', 'cancelled' ];
     665            $default_statuses = array_merge( $default_statuses, $fullfilled_by_marketplace_statuses );
     666        }
     667
     668        return apply_filters( 'shopping_feed_orders_to_import', $default_statuses );
    642669    }
    643670
  • shopping-feed/trunk/vendor/autoload.php

    r2956157 r2965886  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInit04b8226c92be02a57b9cd59a31bee5d4::getLoader();
     7return ComposerAutoloaderInit6ae1c61023135e79f79b19c4ed257c4e::getLoader();
  • shopping-feed/trunk/vendor/composer/autoload_classmap.php

    r2785151 r2965886  
    305305    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\Amazon' => $baseDir . '/src/Addons/Inventory/Marketplaces/Amazon.php',
    306306    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\Cdiscount' => $baseDir . '/src/Addons/Inventory/Marketplaces/Cdiscount.php',
     307    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\FulfilledByChannel' => $baseDir . '/src/Addons/Inventory/Marketplaces/FulfilledByChannel.php',
    307308    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\MonoMono' => $baseDir . '/src/Addons/Inventory/Marketplaces/MonoMono.php',
    308309    'ShoppingFeed\\ShoppingFeedWC\\Addons\\Marketplace' => $baseDir . '/src/Addons/Marketplace.php',
  • shopping-feed/trunk/vendor/composer/autoload_real.php

    r2956157 r2965886  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit04b8226c92be02a57b9cd59a31bee5d4
     5class ComposerAutoloaderInit6ae1c61023135e79f79b19c4ed257c4e
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit04b8226c92be02a57b9cd59a31bee5d4', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInit6ae1c61023135e79f79b19c4ed257c4e', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit04b8226c92be02a57b9cd59a31bee5d4', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit6ae1c61023135e79f79b19c4ed257c4e', 'loadClassLoader'));
    3030
    3131        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     
    3333            require __DIR__ . '/autoload_static.php';
    3434
    35             call_user_func(\Composer\Autoload\ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::getInitializer($loader));
     35            call_user_func(\Composer\Autoload\ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::getInitializer($loader));
    3636        } else {
    3737            $map = require __DIR__ . '/autoload_namespaces.php';
     
    5454
    5555        if ($useStaticLoader) {
    56             $includeFiles = Composer\Autoload\ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::$files;
     56            $includeFiles = Composer\Autoload\ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::$files;
    5757        } else {
    5858            $includeFiles = require __DIR__ . '/autoload_files.php';
    5959        }
    6060        foreach ($includeFiles as $fileIdentifier => $file) {
    61             composerRequire04b8226c92be02a57b9cd59a31bee5d4($fileIdentifier, $file);
     61            composerRequire6ae1c61023135e79f79b19c4ed257c4e($fileIdentifier, $file);
    6262        }
    6363
     
    7171 * @return void
    7272 */
    73 function composerRequire04b8226c92be02a57b9cd59a31bee5d4($fileIdentifier, $file)
     73function composerRequire6ae1c61023135e79f79b19c4ed257c4e($fileIdentifier, $file)
    7474{
    7575    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • shopping-feed/trunk/vendor/composer/autoload_static.php

    r2956157 r2965886  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4
     7class ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e
    88{
    99    public static $files = array (
     
    395395        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\Amazon' => __DIR__ . '/../..' . '/src/Addons/Inventory/Marketplaces/Amazon.php',
    396396        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\Cdiscount' => __DIR__ . '/../..' . '/src/Addons/Inventory/Marketplaces/Cdiscount.php',
     397        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\FulfilledByChannel' => __DIR__ . '/../..' . '/src/Addons/Inventory/Marketplaces/FulfilledByChannel.php',
    397398        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Inventory\\Marketplaces\\MonoMono' => __DIR__ . '/../..' . '/src/Addons/Inventory/Marketplaces/MonoMono.php',
    398399        'ShoppingFeed\\ShoppingFeedWC\\Addons\\Marketplace' => __DIR__ . '/../..' . '/src/Addons/Marketplace.php',
     
    449450    {
    450451        return \Closure::bind(function () use ($loader) {
    451             $loader->prefixLengthsPsr4 = ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::$prefixLengthsPsr4;
    452             $loader->prefixDirsPsr4 = ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::$prefixDirsPsr4;
    453             $loader->classMap = ComposerStaticInit04b8226c92be02a57b9cd59a31bee5d4::$classMap;
     452            $loader->prefixLengthsPsr4 = ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::$prefixLengthsPsr4;
     453            $loader->prefixDirsPsr4 = ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::$prefixDirsPsr4;
     454            $loader->classMap = ComposerStaticInit6ae1c61023135e79f79b19c4ed257c4e::$classMap;
    454455
    455456        }, null, ClassLoader::class);
  • shopping-feed/trunk/vendor/composer/installed.php

    r2956157 r2965886  
    66        'install_path' => __DIR__ . '/../../',
    77        'aliases' => array(),
    8         'reference' => '13d6fc50d163ede4c1a910d7b164b31527ed0250',
     8        'reference' => '44f93b44061d87eb2b3907fb30fa653c0b87cece',
    99        'name' => 'shoppingfeed/shoppingfeed-for-woocommerce',
    1010        'dev' => false,
     
    107107            'install_path' => __DIR__ . '/../../',
    108108            'aliases' => array(),
    109             'reference' => '13d6fc50d163ede4c1a910d7b164b31527ed0250',
     109            'reference' => '44f93b44061d87eb2b3907fb30fa653c0b87cece',
    110110            'dev_requirement' => false,
    111111        ),
Note: See TracChangeset for help on using the changeset viewer.