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.');
 }
Example #4
0
 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);
}