/**
  * Go through all products that need to be cleaned and clean them.
  * @return $this object
  */
 public function cleanAllProducts()
 {
     // Get all products that need cleaning - due to loose comparison of column
     // values by the collection, any products that do not include an 'is_clean'
     // column will be included.
     $productsToClean = $this->_products->getItemsByColumnValue('is_clean', false);
     $logData = ['total_products' => count($productsToClean)];
     $logMessage = 'Cleaning {total_products} products.';
     $this->_logger->info($logMessage, $this->_context->getMetaData(__CLASS__, $logData));
     foreach ($productsToClean as $product) {
         $this->cleanProduct($product);
     }
     // save all the products that may have been modified while cleaning products
     $this->_products->save();
     return $this;
 }
 /**
  * given a collection of products and a collection deleted sku data remove
  * each product that matches in catalog id and client id in a specific website
  * @param Mage_Catalog_Model_Resource_Product_Collection $collection
  * @param array $dData
  * @return self
  */
 protected function _removeFromWebsites(Mage_Catalog_Model_Resource_Product_Collection $collection, array $dData)
 {
     foreach ($this->_helper->loadWebsiteFilters() as $siteFilter) {
         foreach ($this->_getSkusInWebsite($dData, $siteFilter) as $dSku) {
             $product = $collection->getItemById($dSku);
             if ($product) {
                 $product->setWebsiteIds($this->_removeWebsiteId($product->getWebsiteIds(), $siteFilter['mage_website_id']));
             }
         }
     }
     $collection->save();
     return $this;
 }