discountAllocations for global discountshtmlspecialchars()SHOPIFY_DEBUG_MODEShopifyProductImportCron for automatic importcompany field in 3 addresses (customer.defaultAddress, billingAddress, shippingAddress)getAllOrderMetafields() - automatic pagination with cursor (92 lines)c.ref column in 2 SELECT SQL queries (lines 5369 and 5472)c.ref to SQL SELECT queriesproductUpdate() not published to sales channelspublishProductToConfiguredChannels() after productUpdate()empty() || == 1 ALWAYS true!empty() && == 1 to respect configuration1️⃣ Frozen CRON Auto-Detection
-1 if configuration incomplete2️⃣ Historical Import Stuck Detection
STUCK_COUNTER for traceability3️⃣ PHP Timeout Protection
4️⃣ SQL Migration Errors Repair
sql/update_2.1.0_to_2.1.1.sqlllx_shopify_dolibarr_storedetailsResolved GitHub Issues: #139 (Images), #140 (CRON), #141 (Services + Publications) + 2 Philippe client bugs (Stocks + Collections)
UPDATE llx_societe_extrafields SET WHEREsetNoEmail()GitHub issues resolved: #125, #126, #127, #128, #130
getOrdersCount() method via GraphQLdolibarr_set_const()GitHub issues resolved: #123 (v2.0.35) and #124 (v3.0.0)
website/support_manager.php - Complete management dashboardwebsite/api/validate_support.php - Real-time validationlib/compatibility.lib.php - Centralized compatibility functionsclass/shopifyordermanager.class.php: Enhanced customer management with strict validationcore/modules/modShopifyIntegration.class.php: Version bump to 2.0.30updated_at_min instead of created_at_mingetDolGlobalBool() error on Dolibarr v19-20🎯 Critical version: Installation strongly recommended for all users, especially if you use Dolibarr v19-20 or encounter order synchronization issues.
llx_const instead of llx_shopify_dolibarr_storedetailsConfigurationMigrator for automatic migration and backward compatibilitygetConfigurationStats() method for detailed monitoringdolibarr_set_const()ConfigurationMigratorloadConfiguration() modernizedloadConfiguration() modernizedforceMigration() method to re-migrate all parameters even if already presenttestShopifyConnection() method with GraphQL shop query and scope detectionShopifyRightsChecker for comprehensive permissions analysisstatus['current'] vs status['status'])updateProductTimestamp() precision by adding shopifyVariantId to WHERE clauseTEMP_LOCK_[timestamp]_[productId] formatisManualSync=true parametersetSyncLock() creating empty string IDs instead of NULL values in databaselast_sync_status and last_sync_error fieldsgetProductVariants() method to eliminate code duplication between importProducts() and importProductsManual()begin...commit/rollback in importProductsManual()$product was undefined in importProductsManual()$numSyncedGETPOST('term', 'alphanohtml') corrupting numeric SKUs in ajax/search_products.phpajax/preview_sync.phpsynchronizeProductsToShopify() method (239 lines)syncProductWithVariants() and syncProductAsVariant() methodsgetShopifyProductId() helper methodimportProductsManual() methodupdateProductTimestamp() causant l'échec de recherche dans la table de mappingupdateProductTimestamp() empêchant la mise à jour correcte des enregistrementsupdateProductTimestamp() pour utiliser la transaction parent au lieu de transactions imbriquées