示例#1
0
    private function saveTemplate()
    {
        $result = array();
        $result['error'] = '';
        $mode = Tools::getValue('mode');
        if ($mode == 'add') {
            $id = 0;
        } elseif ($mode == 'copy') {
            $id = (int) Tools::getValue('id');
        } else {
            $mode = 'edit';
            $id = (int) Tools::getValue('id');
        }
        if ($id < 0) {
            return $result;
        }
        $errors = array();
        $templates = array();
        $template_properties = array();
        $template_properties['pp_explanation'] = (int) Tools::getValue('pp_explanation');
        $template_properties['pp_price_text'] = (int) Tools::getValue('pp_price_text');
        $template_properties['pp_qty_text'] = (int) Tools::getValue('pp_qty_text');
        $template_properties['pp_unity_text'] = (int) Tools::getValue('pp_unity_text');
        $ext_method = (int) Tools::getValue($this->multidimensional_plugin ? 'pp_ext_method' : 'pp_ext_method_fallback');
        if ($ext_method == 3) {
            $ext_method = 2;
        }
        $display_mode = (int) Tools::getValue('pp_display_mode') != 0 ? 1 : 0;
        if ((int) Tools::getValue('pp_display_mode_retail_price', 0) > 0) {
            $display_mode += 2;
        }
        if ((int) Tools::getValue('pp_display_mode_base_unit_price', 0) > 0) {
            $display_mode += 4;
        }
        $price_display_mode = (int) Tools::getValue('pp_price_display_mode');
        if (!in_array($price_display_mode, array(0, 1, 16))) {
            $price_display_mode = 0;
        }
        $hidden = (int) Tools::getValue('pp_bo_hidden', 0) == 1 ? 1 : 0;
        $pp_bo_qty_available_display = (int) Tools::getValue('pp_bo_qty_available_display');
        if (!in_array($pp_bo_qty_available_display, array(0, 1, 2))) {
            $pp_bo_qty_available_display = 0;
        }
        $measurement_system = (int) Tools::getValue('pp_bo_measurement_system');
        $unit_price_ratio = $this->getFloatValue('unit_price_ratio');
        $minimal_price_ratio = $this->getFloatValue('minimal_price_ratio');
        $qty_policy = (int) Tools::getValue('pp_qty_policy', 0);
        $qty_policy = $qty_policy == 3 ? 2 : $qty_policy;
        if ($ext_method > 0) {
            $ext_policy = (int) Tools::getValue('pp_ext_policy', 0);
            if (!in_array($ext_policy, array(0, 1, 2))) {
                $ext_policy = 0;
            }
            $qty_policy = $ext_policy == 1 ? 0 : 2;
        }
        $qty_mode = $qty_policy ? (int) Tools::getValue('pp_qty_mode') != 0 ? 1 : 0 : 0;
        $minimal_quantity = $qty_policy == 2 ? $this->getFloatValue('minimal_quantity') : (int) Tools::getValue('minimal_quantity');
        $default_quantity = $qty_policy == 2 ? $this->getFloatValue('default_quantity') : (int) Tools::getValue('default_quantity');
        $qty_step = $qty_policy == 2 ? $this->getFloatValue('qty_step') : (int) Tools::getValue('qty_step');
        $ms = PP::resolveMS($measurement_system);
        foreach ($this->active_languages as $language) {
            $id_lang = $language['id_lang'];
            $template = array();
            $data = array();
            $data['id_pp_template'] = $id;
            $data['qty_policy'] = $qty_policy;
            $data['qty_mode'] = $qty_mode;
            $data['display_mode'] = $display_mode;
            $data['price_display_mode'] = $price_display_mode;
            $data['measurement_system'] = $measurement_system;
            $data['unit_price_ratio'] = $unit_price_ratio;
            $data['minimal_price_ratio'] = $minimal_price_ratio;
            $data['minimal_quantity'] = $minimal_quantity;
            $data['default_quantity'] = $default_quantity;
            $data['qty_step'] = $qty_step;
            $data['ext'] = $ext_method > 0 ? 1 : 0;
            $data['qty_available_display'] = $pp_bo_qty_available_display;
            $data['hidden'] = $hidden;
            $data['css'] = Tools::getValue('pp_css');
            $data['template_properties'] = $template_properties;
            PP::calcProductProperties($template, $data);
            $this->getValue($template, 'name', $this->l('name:'), $errors, $id_lang);
            $template['description'] = Tools::getValue('description_input_' . $id_lang);
            $templates[$id_lang][$id] = $template;
        }
        if (count($errors) == 0) {
            $db = Db::getInstance();
            if ($mode == 'edit') {
                $id_pp_template = $id;
            } else {
                $id_pp_template = $this->getNextId($db, 'pp_template', 'id_pp_template');
                $db->execute('INSERT INTO `' . _DB_PREFIX_ . 'pp_template` (id_pp_template, version) VALUE (' . $id_pp_template . ', 0)');
                foreach ($this->active_languages as $language) {
                    $templates[$language['id_lang']][$id]['id_pp_template'] = $id_pp_template;
                }
            }
            $db->autoExecute(_DB_PREFIX_ . 'pp_template', array('version' => PP::PP_TEMPLATE_VERSION, 'qty_policy' => $template['pp_qty_policy'], 'qty_mode' => $template['pp_qty_mode'], 'display_mode' => $template['pp_display_mode'], 'price_display_mode' => $template['pp_price_display_mode'], 'measurement_system' => $template['pp_bo_measurement_system'], 'unit_price_ratio' => $template['pp_unit_price_ratio'], 'minimal_price_ratio' => $template['pp_minimal_price_ratio'], 'minimal_quantity' => $template['db_minimal_quantity'], 'default_quantity' => $template['db_default_quantity'], 'qty_step' => $template['db_qty_step'], 'ext' => $template['pp_ext'], 'qty_available_display' => $template['pp_bo_qty_available_display'], 'hidden' => $template['pp_bo_hidden'], 'css' => $template['pp_css']), 'UPDATE', 'id_pp_template = ' . $id_pp_template);
            $db->delete(_DB_PREFIX_ . 'pp_template_property', 'id_pp_template = ' . $id_pp_template);
            array_walk($template_properties, create_function('&$value, $key, $id_pp_template', '$value = "(".$id_pp_template.",\'".$key."\',".$value.")";'), $id_pp_template);
            $db->execute('INSERT INTO ' . _DB_PREFIX_ . 'pp_template_property (id_pp_template,pp_name,id_pp_property) VALUES ' . implode(',', $template_properties));
            foreach ($this->active_languages as $language) {
                $id_lang = $language['id_lang'];
                $template = $templates[$id_lang][$id];
                $r = $db->getRow('SELECT * FROM `' . _DB_PREFIX_ . 'pp_template_lang` WHERE id_pp_template = ' . $id_pp_template . ' AND id_lang=' . $id_lang);
                if ($r === false) {
                    $r = array('description_1' => '', 'description_2' => '', 'id_pp_template' => $id_pp_template, 'id_lang' => $id_lang);
                }
                $auto_desc = 0;
                if ($template['description'] == '') {
                    $auto_desc = 1;
                    $template['description'] = self::generateDescription($template, $id_lang);
                }
                $r[$ms != 2 ? 'description_1' : 'description_2'] = pSQL($template['description'], true);
                $r[$ms != 2 ? 'auto_desc_1' : 'auto_desc_2'] = $auto_desc;
                $r['name'] = pSQL($template['name'], true);
                $db->delete(_DB_PREFIX_ . 'pp_template_lang', 'id_pp_template = ' . $id_pp_template . ' AND id_lang=' . $id_lang);
                $db->autoExecute(_DB_PREFIX_ . 'pp_template_lang', $r, 'INSERT');
            }
            $db->delete(_DB_PREFIX_ . 'pp_template_ext', 'id_pp_template = ' . $id_pp_template);
            $db->delete(_DB_PREFIX_ . 'pp_template_ext_prop', 'id_pp_template = ' . $id_pp_template);
            if ($template['pp_ext'] == 1) {
                $ext_title = (int) Tools::getValue('pp_ext_title', 0);
                $ext_property = (int) Tools::getValue('pp_ext_property', 0);
                $ext_text = (int) Tools::getValue('pp_ext_text', 0);
                //$ext_show_position = (int)Tools::getValue('pp_ext_show_position', 0);
                $s = (string) $id_pp_template;
                $s .= ',1';
                // type 1: quantity calculation based on dimensions
                $s .= ',' . $ext_policy;
                $s .= ',' . $ext_method;
                $s .= ',' . $ext_title;
                $s .= ',' . $ext_property;
                $s .= ',' . $ext_text;
                //$s .= ','.$ext_show_position;
                $db->execute('INSERT INTO ' . _DB_PREFIX_ . 'pp_template_ext (id_pp_template,type,policy,method,title,property,text) VALUES (' . $s . ')');
                if ($this->multidimensional_plugin) {
                    $this->multidimensional_plugin->saveTemplate($id_pp_template, self::DIMENSIONS);
                }
            }
            Hook::exec('ppropertiesAdmin', array('mode' => 'actionTemplateSave', 'id_pp_template' => $id));
            $templates = null;
            PP::resetTemplates();
        } else {
            $result['error'] .= $this->l('Please fix the following errors:');
            foreach ($errors as $error) {
                $result['error'] .= '
				<div>' . $error . '</div>';
            }
        }
        $result['templates'] = $templates;
        return $result;
    }