/**
  * Returnts the full person attribute record (person_attributes and person_info_variants_to_attributes)
  *
  * @author Andrei V. Zhuravlev
  * @param $variant_id integer variant id
  */
 function getPersonCustomAttributes($variant_id)
 {
     global $application;
     $tables = $this->getTables();
     $s = $tables['person_info_variants_to_attributes']['columns'];
     $a = $tables['person_attributes']['columns'];
     $query = new DB_Select();
     foreach ($s as $k => $v) {
         if ($k != 'name' && $k != 'descr') {
             $query->addSelectField($v);
         }
     }
     $query->setMultiLangAlias('_ml_name', 'person_info_variants_to_attributes', $s['name'], $s['id'], 'Checkout');
     $query->addSelectField($query->getMultiLangAlias('_ml_name'), 'person_attribute_visible_name');
     $query->setMultiLangAlias('_ml_descr', 'person_info_variants_to_attributes', $s['descr'], $s['id'], 'Checkout');
     $query->addSelectField($query->getMultiLangAlias('_ml_descr'), 'person_attribute_description');
     foreach ($a as $v) {
         $query->addSelectField($v);
     }
     $query->WhereValue($s['variant_id'], DB_EQ, $variant_id);
     /*if ($custom == CUSTOM_ATTRIBUTES_ONLY)
       {*/
     $query->WhereAND();
     $query->WhereValue($a['is_custom'], DB_EQ, 1);
     $query->WhereAND();
     $query->WhereField($a['id'], DB_EQ, $s['attribute_id']);
     //}
     /*else if ($custom == STANDARD_ATTRIBUTES_ONLY)
             {
                 $query->WhereAND();
                 $query->WhereValue($a['is_custom'], DB_EQ, 0);
                 $query->WhereAND();
                 $query->WhereField($a['id'], DB_EQ, $s['attribute_id']);
             }
             else if ($custom == ALL_ATTRIBUTES)
             {
     
             }*/
     $query->SelectOrder($s['sort']);
     $result = $application->db->getDB_Result($query);
     return $result;
 }
 /**
  * Returnts the full person custom attribute record (person_attributes and person_info_variants_to_attributes)
  *
  * @author Andrei V. Zhuravlev
  * @param $variantId integer variant id
  * @param $attributeId integer attribute id
  */
 function getPersonCustomAttributeData($attributeId)
 {
     global $application;
     $tables = $this->getTables();
     $piva = $tables['person_info_variants_to_attributes']['columns'];
     $pa = $tables['person_attributes']['columns'];
     $query = new DB_Select();
     foreach ($piva as $k => $v) {
         if ($k != 'name' && $k != 'descr') {
             $query->addSelectField($v);
         }
     }
     $query->setMultiLangAlias('_ml_name', 'person_info_variants_to_attributes', $piva['name'], $piva['id'], 'Checkout');
     $query->addSelectField($query->getMultiLangAlias('_ml_name'), 'person_attribute_visible_name');
     $query->setMultiLangAlias('_ml_descr', 'person_info_variants_to_attributes', $piva['descr'], $piva['id'], 'Checkout');
     $query->addSelectField($query->getMultiLangAlias('_ml_descr'), 'person_attribute_description');
     foreach ($pa as $v) {
         $query->addSelectField($v);
     }
     $query->WhereField($piva['attribute_id'], DB_EQ, $pa['id']);
     $query->WhereAnd();
     $query->WhereValue($piva['attribute_id'], DB_EQ, $attributeId);
     $query->WhereAnd();
     $query->WhereValue($pa['is_custom'], DB_EQ, "1");
     $result = $application->db->getDB_Result($query);
     return $result;
 }
 function getCFldValues()
 {
     global $application;
     $values = "";
     if ($this->mode == "add") {
         $values = "";
         if (isset($this->field_data['postdata']['customFieldValues'])) {
             $values = $this->field_data['postdata']['customFieldValues'];
         }
     } else {
         $itid = $this->field_data[0]['input_type_id'];
         $tables = modAPIFunc("Catalog", "getTables");
         $t_input_type_values = $tables['input_type_values']['columns'];
         $query = new DB_Select();
         $query->setMultiLangAlias('_ml_value', 'input_type_values', $t_input_type_values['value'], $t_input_type_values['id'], 'Catalog');
         $query->addSelectField($query->getMultiLangAlias('_ml_value'), 'value');
         $query->WhereValue($t_input_type_values['it_id'], DB_EQ, $itid);
         $query->SelectOrder($t_input_type_values['id'], 'ASC');
         $result = $application->db->getDB_Result($query);
         foreach ($result as $r) {
             $values .= modApiFunc('Catalog', 'getInputTypeActualValue', $r['value']) . "\n";
         }
     }
     return "<textarea class=\"form-control\"" . $this->HtmlForm->genInputTextAreaField(20, 'customFieldValues', 5) . " id='customFieldValues' disabled=disabled>" . $values . "</textarea>";
 }
 function getPersonInfoGroupAttrs($group_id, $attr_vis = PERSON_INFO_GROUP_ATTR_ALL)
 {
     global $application;
     $tables = $this->getTables();
     $pia_table = $tables['ca_person_info_attrs']['columns'];
     $atg_table = $tables['ca_attrs_to_groups']['columns'];
     $query = new DB_Select();
     $query->addSelectTable('ca_person_info_attrs');
     $query->addSelectTable('ca_attrs_to_groups');
     $query->addSelectField($pia_table['attr_id'], 'attr_id');
     $query->addSelectField($pia_table['attr_name'], 'attr_name');
     $query->addSelectField($pia_table['lang_code'], 'lang_code');
     $query->setMultiLangAlias('_ml_name', 'ca_attrs_to_groups', $atg_table['visible_name'], $atg_table['ag_id'], 'Customer_Account');
     $query->addSelectField($query->getMultiLangAlias('_ml_name'), 'visible_name');
     $query->addSelectField($atg_table['is_visible'], 'is_visible');
     $query->addSelectField($atg_table['is_required'], 'is_required');
     $query->Where($atg_table['group_id'], DB_EQ, $group_id);
     $query->WhereAND();
     $query->Where($pia_table['attr_id'], DB_EQ, $atg_table['attr_id']);
     if ($attr_vis == PERSON_INFO_GROUP_ATTR_VISIBLE) {
         $query->WhereAND();
         $query->WhereValue($atg_table['is_visible'], DB_EQ, 'Y');
     } elseif ($attr_vis == PERSON_INFO_GROUP_ATTR_HIDDEN) {
         $query->WhereAND();
         $query->WhereValue($atg_table['is_visible'], DB_EQ, 'N');
     }
     $query->SelectOrder($atg_table['sort_order']);
     $res = $application->db->getDB_Result($query);
     $group_name = $this->getPersonInfoGroupNameByID($group_id);
     if ($group_name == 'Customer') {
         $attrs = $res;
         return $attrs;
     }
     foreach ($res as $k => $attr_info) {
         if ($attr_vis == PERSON_INFO_GROUP_ATTR_ALL) {
             $attrs[] = $attr_info;
         }
         if ($attr_vis == PERSON_INFO_GROUP_ATTR_VISIBLE) {
             if ($this->__isCOAttrVisible($this->detectCOPITypeID($group_name), $this->detectCOAttrID($attr_info['attr_name']))) {
                 $attrs[] = $attr_info;
             }
         }
         if ($attr_vis == PERSON_INFO_GROUP_ATTR_HIDDEN) {
             if ($this->__isCOAttrHidden($this->detectCOPITypeID($group_name), $this->detectCOAttrID($attr_info['attr_name']))) {
                 $attrs[] = $attr_info;
             }
         }
     }
     return $attrs;
 }
 /**
  * Gets a body of notification block tag.
  *
  *@param integer $n_id - notification id
  *@param integer $b_id - block tag id
  *
  *@return string - block tag body
  */
 function getNotificationBlockBody($n_id, $b_id)
 {
     $body = "";
     global $application;
     $tables = $this->getTables();
     $nbb = $tables['notification_blocktag_bodies']['columns'];
     $query = new DB_Select();
     $query->setMultiLangAlias('_ml_ntfctn_body', 'notification_blocktag_bodies', $nbb['body'], $nbb['id'], 'Notifications');
     $query->addSelectField($query->getMultiLangAlias('_ml_ntfctn_body'), 'Body');
     $query->WhereValue($nbb['n_id'], DB_EQ, $n_id);
     $query->WhereAnd();
     $query->WhereValue($nbb['nb_id'], DB_EQ, $b_id);
     $result = $application->db->getDB_Result($query);
     if (sizeof($result) != 0) {
         $body = $result[0]['Body'];
     }
     return $body;
 }
 /**
  * Prepares data to add order to the database.
  *
  * @param int $option_id - ID of the option, to prepare data for
  * @param mixed option_data - array element describing the combination
  * (for details see wiki)
  *
  * @return array(
  *  $option_name  - option name
  * ,$values_string - string with the name(names) of the option value (values)
  * in the combination
  * ,$modifiers = array(
  *   'price' => price modificator
  *  ,'weight' => weight modificator
  *  ,'shipping_cost' => shipping cost modificator
  *  ,'handling_cost' => handling cost modificator
  * )
  * )
  */
 function prepareDataForPlaceOrder($option_id, $option_data)
 {
     $modifiers = $this->__getInnerVar("_MODIFIERS");
     if (is_numeric($option_data)) {
         //SS
         $option_info = $this->getOptionInfo($option_id);
         $value_info = $this->getValueInfo($option_data);
         $mods = array();
         for ($i = 0; $i < count($modifiers); $i++) {
             $mods[$modifiers[$i]] = $value_info[$modifiers[$i] . "_modifier"];
         }
         return array($option_info['display_name'], $value_info['value_name'], $mods);
         //modApiFunc("Product_Options", "convertModifierPrices", $mods, $currency_code, $default_currency_code));
     } elseif (is_array($option_data) and !isset($option_data['val'])) {
         //MS
         $option_info = $this->getOptionInfo($option_id);
         $values_list = array_keys($option_data);
         $values_string = "";
         $mods_array = array();
         for ($i = 0; $i < count($modifiers); $i++) {
             $mods_array[$modifiers[$i]] = 0;
         }
         if (!empty($values_list)) {
             global $application;
             $tables = $this->getTables();
             $values_table = $tables['po_options_values']['columns'];
             $query = new DB_Select();
             $query->addSelectTable('po_options_values');
             $query->setMultiLangAlias('_value_name', 'po_options_values', $values_table['value_name'], $values_table['value_id'], 'Product_Options');
             $query->addSelectField($query->getMultiLangAlias('_value_name'), 'value_name');
             for ($i = 0; $i < count($modifiers); $i++) {
                 $query->addSelectField($values_table[$modifiers[$i] . "_modifier"], $modifiers[$i] . "_modifier");
             }
             $query->Where($values_table['value_id'], DB_IN, '(\'' . implode("','", $values_list) . '\')');
             $res = $application->db->getDB_Result($query);
             $vals = array();
             foreach ($res as $k => $value_data) {
                 $vals[] = $value_data['value_name'];
                 for ($i = 0; $i < count($modifiers); $i++) {
                     $mods_array[$modifiers[$i]] += $value_data[$modifiers[$i] . "_modifier"];
                 }
             }
             $values_string = implode(", ", $vals);
         }
         return array($option_info['display_name'], $values_string, $mods_array);
         //modApiFunc("Product_Options", "convertModifierPrices", $mods_array, $currency_code, $default_currency_code));
     } elseif (is_array($option_data) and isset($option_data['val']) and !isset($option_data['is_file'])) {
         //CI
         $option_info = $this->getOptionInfo($option_id);
         if (preg_match("/^CB/", $option_info['show_type']) and (!isset($option_data['cb']) or $option_data['cb'] != 'on')) {
             $option_data['val'] = "";
         }
         $mods_array = array();
         for ($i = 0; $i < count($modifiers); $i++) {
             $mods_array[$modifiers[$i]] = 0;
         }
         $value_data = array_shift(array_values($this->getValuesList($option_id)));
         for ($i = 0; $i < count($modifiers); $i++) {
             $mods_array[$modifiers[$i]] += $value_data[$modifiers[$i] . "_modifier"];
         }
         return array($option_info['display_name'], $option_data['val'], $mods_array);
         //modApiFunc("Product_Options", "convertModifierPrices", $mods_array, $currency_code, $default_currency_code));
     } elseif (is_array($option_data) and isset($option_data['val']) and isset($option_data['is_file'])) {
         //UF
         $option_info = $this->getOptionInfo($option_id);
         $mods_array = array();
         for ($i = 0; $i < count($modifiers); $i++) {
             $mods_array[$modifiers[$i]] = 0;
         }
         $value_data = array_shift(array_values($this->getValuesList($option_id)));
         for ($i = 0; $i < count($modifiers); $i++) {
             $mods_array[$modifiers[$i]] += $value_data[$modifiers[$i] . "_modifier"];
         }
         return array($option_info['display_name'], $option_data['val'], $mods_array);
         //modApiFunc("Product_Options", "convertModifierPrices", $mods_array, $currency_code, $default_currency_code));
     }
 }
 function getTaxFormulaViewFull($tax_rate_id, $specific_rate = "")
 {
     if (!$tax_rate_id || $tax_rate_id == 0) {
         return "";
     }
     global $application;
     $MessageResources =& $application->getInstance('MessageResources');
     $tables = $this->getTables();
     $tr = $tables['tax_rates']['columns'];
     $tn = $tables['tax_names']['columns'];
     $query = new DB_Select();
     $query->addSelectField($tr['rate'], 'Rate');
     $query->addSelectField($tr['formula'], 'Formula');
     $query->addSelectField($tr['applicable'], 'Applicable');
     $query->addLeftJoin('tax_names', $tn['id'], DB_EQ, $tr['tn_id']);
     $query->setMultiLangAlias('_name', 'tax_names', $tn['name'], $tn['id'], 'Taxes');
     $query->addSelectField($query->getMultiLangAlias('_name'), 'TaxName');
     $query->WhereValue($tr['id'], DB_EQ, $tax_rate_id);
     $result = $application->db->getDB_Result($query);
     if (sizeof($result) == 0) {
         return "";
     }
     $result = $result[0];
     if ($specific_rate != "") {
         $result['Rate'] = "[{$specific_rate}]";
     }
     if ($result["Applicable"] == "false") {
         return prepareHTMLDisplay($result['TaxName']) . " = " . $MessageResources->getMessage('TAX_RATE_NOT_APPLICABLE_LABEL');
     }
     $replace = array();
     foreach ($this->getTaxNamesList() as $taxNameInfo) {
         $replace['{t_' . $taxNameInfo['Id'] . '}'] = prepareHTMLDisplay($taxNameInfo['Name']);
     }
     foreach ($this->getTaxCostsList() as $cost) {
         $replace['{p_' . $cost['id'] . '}'] = $MessageResources->getMessage($cost['name']);
     }
     preg_match_all("/([0-9]+\\.?[0-9]+)/", $result['Formula'], $numbers);
     for ($j = 0; $j < sizeof($numbers[0]); $j++) {
         $replace[$numbers[0][$j]] = modApiFunc("Localization", "num_format", $numbers[0][$j]);
     }
     $result['Formula'] = strtr($result['Formula'], $replace);
     return prepareHTMLDisplay($result['TaxName']) . " = " . $result['Rate'] . "% * (" . $result['Formula'] . ")";
 }