public function map() { //Always print debug information. Issue #80 $this->debug = true; $updateAll = (bool) Mage::getStoreConfig('webtoprint/settings/refresh-templates'); $action = $this->getAction(); $assignToParents = (bool) $action->getParam('assign-to-parents'); $categoryMappingStore = $action->getParam('category-mapping-store'); unset($action); $categoryMappingStore = Mage::app()->getStore($categoryMappingStore); if (!$categoryMappingStore->getId()) { $categoryMappingStore = null; } $cataloguesMapping = null; $helper = Mage::helper('webtoprint/category'); $templates = Mage::getModel('webtoprint/template')->getCollection()->load(); foreach ($templates as $template) { $product_model = Mage::getModel('catalog/product'); if ($product_id = $product_model->getIdBySku($template->getGuid())) { $this->debug("Product {$template->getGuid()} already exists"); $product = $product_model->load($product_id); if (!$product->getWebtoprintTemplate()) { $this->debug("Product {$template->getGuid()} doesn't have web-to-print attribute."); Mage::register('webtoprint-template-changed', true); $product->setSku("{$template->getGuid()}-rename-me")->setRequiredOptions(true)->setWebtoprintTemplate($template->getGuid())->save(); Mage::unregister('webtoprint-template-changed'); $this->debug("Web-to-print attribute was added to product {$template->getGuid()}"); } else { $this->debug("SKU of product {$template->getGuid()} is equal to its web-to-print attribute"); Mage::register('webtoprint-template-changed', true); $product->setSku("{$template->getGuid()}-rename-me")->setRequiredOptions(true)->save(); Mage::unregister('webtoprint-template-changed'); $this->debug("SKU of product {$template->getGuid()} was changed."); } } else { $products = $product_model->getCollection()->addAttributeToFilter('webtoprint_template', array('eq' => $template->getGuid()))->load(); if (!(bool) $template->getExist()) { if (count($products) == 0) { $template->delete(); continue; } $behaviour = (int) Mage::getStoreConfig('webtoprint/settings/templates-removing-behaviour'); if ($behaviour == ZetaPrints_WebToPrint_Model_System_Config_Source_TemplateDeletingBehaviour::NONE) { foreach ($products as $product) { $full_product = $product_model->load($product->getId()); $this->debug("Template for product {$full_product->getWebtoprintTemplate()} was removed"); Mage::register('webtoprint-template-changed', true); $full_product->setRequiredOptions(false)->setWebtoprintTemplate(''); Mage::dispatchEvent('webtoprint_product_update', array('product' => $full_product, 'template' => zetaprints_parse_template_details(new SimpleXMLElement($template->getXml())), 'params' => array('process-quantities' => $this->_isProcessQuantities()))); $full_product->save(); Mage::unregister('webtoprint-template-changed'); $this->debug("Product {$full_product->getSku()} was unlinked from the template"); } $template->delete(); } elseif ($behaviour == ZetaPrints_WebToPrint_Model_System_Config_Source_TemplateDeletingBehaviour::DELETE) { foreach ($products as $product) { $full_product = $product_model->load($product->getId()); $this->debug("Template for product {$full_product->getWebtoprintTemplate()} was removed"); $full_product->delete(); $this->debug("Product {$product->getSku()} was removed"); } $template->delete(); } else { if ($behaviour >= 0) { $category = Mage::getModel('catalog/category')->load($behaviour); if (!$category->getId()) { $this->warning('Category doesn\'t exist. Check configuration.'); continue; } foreach ($products as $product) { $full_product = $product_model->load($product->getId()); $this->debug("Template for product {$full_product->getWebtoprintTemplate()} was removed"); Mage::register('webtoprint-template-changed', true); $full_product->setCategoryIds(array($behaviour))->setRequiredOptions(false)->setWebtoprintTemplate(''); Mage::dispatchEvent('webtoprint_product_update', array('product' => $full_product, 'template' => zetaprints_parse_template_details(new SimpleXMLElement($template->getXml())), 'params' => array('process-quantities' => $this->_isProcessQuantities()))); $full_product->save(); Mage::unregister('webtoprint-template-changed'); $this->debug("Product {$product->getSku()} was moved to category {$category->getName()}"); } $template->delete(); } } } else { foreach ($products as $product) { if ($updateAll || strtotime($product->getUpdatedAt()) <= strtotime($template->getDate())) { $full_product = $product_model->load($product->getId()); $this->debug("Template for product {$full_product->getWebtoprintTemplate()} changed"); Mage::register('webtoprint-template-changed', true); //Mark product as changed and then save it. $full_product->setDataChanges(true); $templateDetails = zetaprints_parse_template_details(new SimpleXMLElement($template->getXml())); if ($cataloguesMapping === null) { $cataloguesMapping = array(); $url = Mage::getStoreConfig('webtoprint/settings/url'); $key = Mage::getStoreConfig('webtoprint/settings/key'); $catalogues = zetaprints_get_list_of_catalogs($url, $key); foreach ($catalogues as $catalogue) { $cataloguesMapping[$catalogue['guid']] = $catalogue['title']; } unset($catalogues, $catalogue, $url, $key); } $templateDetails['catalogue'] = $cataloguesMapping[$template->getCatalogGuid()]; $categoryIds = $helper->getCategoriesIds($templateDetails, $assignToParents, $categoryMappingStore); if ($categoryIds) { $full_product->setCategoryIds($categoryIds); } Mage::dispatchEvent('webtoprint_product_update', array('product' => $full_product, 'template' => $templateDetails, 'params' => array('process-quantities' => $this->_isProcessQuantities()))); $full_product->save(); Mage::unregister('webtoprint-template-changed'); $this->debug("Product {$full_product->getWebtoprintTemplate()} was succesfully updated"); } } } } } }
public function getDataSetTable($context) { if (!($templateId = $this->get_template_id($context->getProduct()))) { return false; } if (!($xml = Mage::registry('webtoprint-template-xml'))) { $template = Mage::getModel('webtoprint/template')->loadById($templateId); if ($template->getId()) { try { $xml = new SimpleXMLElement($xml = $template->getXml()); } catch (Exception $e) { Mage::log("Exception: {$e->getMessage()}"); } } } if (!$xml) { return false; } $templateDetails = zetaprints_parse_template_details($xml); $dataset = array(); $fieldNames = array(); foreach ($templateDetails['pages'] as $pageNumber => $page) { if (!isset($page['fields'])) { continue; } $_dataset = array(); foreach ($page['fields'] as $field) { if (isset($field['dataset'])) { foreach ($field['dataset'] as $number => $data) { if (!isset($_dataset[$number])) { $_dataset[$number] = array(); } $_dataset[$number][] = $data; } $fieldNames[] = $field['name']; } } if (count($_dataset)) { $dataset[$pageNumber] = $_dataset; } } if (!count($dataset)) { return; } ?> <div class="zp-dataset-wrapper"> <?php foreach ($dataset as $pageNumber => $_dataset) { ?> <div id="zp-dataset-page-<?php echo $pageNumber; ?> " class="zp-dataset"> <table id="zp-dataset-table-page-<?php echo $pageNumber; ?> " class="zp-dataset-table"> <thead> <tr> <th></th> <?php if (isset($templateDetails['pages'][$pageNumber]['fields'])) { $fields = $templateDetails['pages'][$pageNumber]['fields']; foreach ($fields as $field) { if (isset($field['dataset'])) { ?> <th><?php echo $this->__($field['name']); ?> </th> <?php } } } ?> </tr> </thead> <tbody> <?php foreach ($_dataset as $set) { ?> <tr> <td class="zp-dataset-checkbox"><input type="checkbox" name="test" /></td> <?php foreach ($set as $number => $data) { ?> <td class="<?php echo $fieldNames[$number]; ?> "> <?php foreach ($data['lines'] as $line => $text) { ?> <p <?php if (!$line) { ?> class="zp-dataset-first-line"<?php } ?> ><?php echo $text; ?> </p> <?php } ?> </td> <?php } ?> </tr> <?php } ?> </tbody> </table> <p class="zp-dataset-notice"> <?php echo $this->__('* Click on a cell to insert the value or click on the first column to insert the entire row.'); ?> </p> </div> <?php } ?> </div> <?php $title = $this->__('Database look-up'); ?> <button id="zp-dataset-button" class="button hidden" title="<?php echo $title; ?> " type="button"> <span><span><?php echo $title; ?> </span></span> </button> <?php }
public function map() { //Always print debug information. Issue #80 $this->debug = true; $this->warning('Product type: ' . $this->getAction()->getParam('product-type', 'simple')); if (!($assignToWebsites = $this->_getWebsitesForAssign())) { return; } //Get all web-to-print templates $templates = Mage::getModel('webtoprint/template')->getCollection()->load(); //Get all products $products = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('webtoprint_template')->load(); //If there're products then... if ($has_products = (bool) count($products)) { //... create array to store used web-to-print template GUIDs $used_templates = array(); //For every product... foreach ($products as $product) { //... remember its ID $used_templates[$product->getId()] = null; //And if it has web-to-print attribute set then... if ($product->hasWebtoprintTemplate() && $product->getWebtoprintTemplate()) { //... also remember the value of the attribute $used_templates[$product->getWebtoprintTemplate()] = null; } } } unset($products); // Get ID of source product if present and try to load source product $sourceId = $this->getAction()->getParam('source-product-id'); $sourceProduct = null; if ($sourceId) { $sourceProduct = Mage::getModel('catalog/product')->load($sourceId); if ($sourceProduct->getId()) { $this->warning('Base product: ' . $sourceProduct->getName()); $sourceProduct->getCategoryIds(); $sourceProduct->setId(null); $sourceData = $sourceProduct->getData(); $sourceData['stock_item'] = null; $sourceData['url_key'] = null; } else { $sourceProduct = null; } } $url = Mage::getStoreConfig('webtoprint/settings/url'); $key = Mage::getStoreConfig('webtoprint/settings/key'); $_catalogues = zetaprints_get_list_of_catalogs($url, $key); $cataloguesMapping = array(); foreach ($_catalogues as $_catalogue) { $cataloguesMapping[$_catalogue['guid']] = $_catalogue['title']; } $_catalogues = array(); $categoryMappingStore = $this->getAction()->getParam('category-mapping-store'); $categoryMappingStore = Mage::app()->getStore($categoryMappingStore); $assignToParents = (bool) $this->getAction()->getParam('assign-to-parents'); if (!$categoryMappingStore->getId()) { $categoryMappingStore = null; } $useProductPopulateDefaults = Mage::getStoreConfig('webtoprint/settings/products-populate-defaults'); $_defaultCategory = array(); $helper = Mage::helper('webtoprint/category'); $line = 0; $number_of_templates = count($templates); $number_of_created_products = 0; foreach ($templates as $template) { $line++; if ($has_products) { if (array_key_exists($template->getGuid(), $used_templates)) { $this->debug("{$line}. Product {$template->getGuid()} already exists"); continue; } } if (!$sourceProduct) { $product_model = Mage::getModel('catalog/product'); $product_model->setWebsiteIds($assignToWebsites)->setAttributeSetId($product_model->getDefaultAttributeSetId())->setTypeId($this->getAction()->getParam('product-type', 'simple'))->setStatus(Mage_Catalog_Model_Product_Status::STATUS_DISABLED)->setVisibility(0); if ($useProductPopulateDefaults) { $product_model->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)->setWeight(0)->setPrice(0)->setTaxClassId(0); } $templateDetails = zetaprints_parse_template_details(new SimpleXMLElement($template->getXml())); $templateDetails['catalogue'] = $cataloguesMapping[$template->getCatalogGuid()]; $categoryIds = $helper->getCategoriesIds($templateDetails, $assignToParents, $categoryMappingStore); if (!$categoryIds && $useProductPopulateDefaults) { $categoryIds = $this->_getDefaultCategoryId(); } $product_model->setCategoryIds($categoryIds); } else { $product_model = $sourceProduct; $product_model->setOrigData()->setData($sourceData); } $product_model->setSku(zetaprints_generate_guid() . '-rename-me')->setName($template->getTitle())->setDescription($template->getDescription())->setShortDescription($template->getDescription())->setRequiredOptions(true)->setWebtoprintTemplate($template->getGuid()); Mage::dispatchEvent('webtoprint_product_create', array('product' => $product_model, 'template' => $templateDetails, 'params' => array('process-quantities' => $this->_isProcessQuantities()))); try { $product_model->save(); } catch (Exception $e) { $this->error("{$line}. Error creating product from template: {$template->getGuid()}"); $this->error($e->getMessage()); continue; } $stock_item = Mage::getModel('cataloginventory/stock_item'); $stock_item->setStockId(1)->setUseConfigManageStock(0)->setProduct($product_model)->save(); $this->debug("{$line}. Product for template {$template->getGuid()} was created."); $number_of_created_products++; unset($product_model); unset($stock_item); } $this->notice("Number of templates: {$number_of_templates}"); $this->notice("Number of created products: {$number_of_created_products}"); $this->warning('Warning: products were created with general set of properties. Update other product properties using bulk edit to make them operational.'); }
public function getTemplateDetailsForCurrentProduct() { if (!($temlateDetails = Mage::registry('webtoprint-template-details'))) { if (!($xml = $this->getTemplateXmlForCurrentProduct())) { return; } $temlateDetails = zetaprints_parse_template_details($xml); Mage::register('webtoprint-template-details', $temlateDetails); } return $temlateDetails; }
function zetaprints_update_preview($url, $key, $data) { _zetaprints_debug(); $data['Xml'] = 1; $response = zetaprints_get_content_from_url("{$url}/API.aspx?page=api-preview;ApiKey={$key}", $data); if (zetaprints_has_error($response)) { return null; } try { $xml = new SimpleXMLElement($response['content']['body']); } catch (Exception $e) { _zetaprints_debug("Exception: {$e->getMessage()}"); return null; } return zetaprints_parse_template_details($xml); }