Skip to content

Commit

Permalink
Resolves issue # 1484 - default option values
Browse files Browse the repository at this point in the history
  • Loading branch information
briansandall committed Mar 9, 2017
1 parent 2efca85 commit 7bb36e7
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 7 deletions.
2 changes: 1 addition & 1 deletion admin/skins/default/js/admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ function optionAdd(t, e) {
var c = $(l[i]).attr("rel"),
d = "" == $(l[i]).val() ? "0" : $(l[i]).val(),
h = $(o).find("." + c).find("input:first");
"matrix_include" == c ? h.attr("name", "option_add[" + c + "][" + options_added + "]") : "set_enabled" == c ? (h.removeAttr("disabled"), h.attr("checked", "checked"), h.parent().addClass("selected"), h.val(1), 1 == d && (h.parent().addClass("selected"), h.attr("checked", "checked")), h.attr("name", "option_add[" + c + "][" + options_added + "]")) : "negative" == c || "absolute_price" == c ? (h.removeAttr("disabled"), $(l[i]).is(":checked") && (h.parent().addClass("selected"), h.attr("checked", "checked")), h.attr("name", "option_add[" + c + "][" + options_added + "]")) : (d = parseFloat(d, 10).toFixed(2), $(o).find("." + c).append(d).find("input:first").val(parseFloat(d)).removeAttr("disabled")), $(l[i]).val("")
"matrix_include" == c ? h.attr("name", "option_add[" + c + "][" + options_added + "]") : "set_enabled" == c ? (h.removeAttr("disabled"), h.attr("checked", "checked"), h.parent().addClass("selected"), h.val(1), 1 == d && (h.parent().addClass("selected"), h.attr("checked", "checked")), h.attr("name", "option_add[" + c + "][" + options_added + "]")) : "default" == c || "negative" == c || "absolute_price" == c ? (h.removeAttr("disabled"), $(l[i]).is(":checked") && (h.parent().addClass("selected"), h.attr("checked", "checked")), h.attr("name", "option_add[" + c + "][" + options_added + "]")) : (d = parseFloat(d, 10).toFixed(2), $(o).find("." + c).append(d).find("input:first").val(parseFloat(d)).removeAttr("disabled")), $(l[i]).val("")
}
$(o).find("a.remove").on("click", function() {
inlineRemove(this)
Expand Down
6 changes: 6 additions & 0 deletions admin/skins/default/templates/products.index.php
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,7 @@
<td>{$LANG.catalogue.title_product_options_matrix}</td>
<td>{$LANG.common.name}</td>
<td>{$LANG.catalogue.title_option_set}</td>
<td>{$LANG.common.default}</td>
<td>{$LANG.common.negative}</td>
<td>{$LANG.common.price}</td>
<td>{$LANG.catalogue.absolute_price}</td>
Expand All @@ -385,6 +386,7 @@
<td align="center"><input type="hidden" id="matrix_include_{$option.assign_id}" name="option_update[{$option.assign_id}][matrix_include]" value="{$option.matrix_include}" class="toggle"></td>
<td>{$option.display}</td>
<td>{$option.set_name}</td>
<td align="center"><input type="checkbox" name="option_update[{$option.assign_id}][option_default]" {if isset($option.option_default) && $option.option_default == 1}checked="checked"{/if} value="1"></td>
<td align="center"><input type="checkbox" name="option_update[{$option.assign_id}][option_negative]" {if isset($option.option_negative) && $option.option_negative == 1}checked="checked"{/if} value="1"></td>
<td><span class="editable number-right" name="option_update[{$option.assign_id}][option_price]" title="{$LANG.common.click_edit}">{$option.option_price}</span></td>
<td align="center"><input type="checkbox" name="option_update[{$option.assign_id}][absolute_price]" {if isset($option.absolute_price) && $option.absolute_price == 1}checked="checked"{/if} value="1"></td>
Expand All @@ -400,6 +402,7 @@
<td align="center"><input type="hidden" id="matrix_include_{$option.set_member_id}" name="option_create[{$option.set_member_id}][matrix_include]" value="0" class="toggle"></td>
<td>{$option.display}</td>
<td>{$option.set_name}</td>
<td align="center"><input type="checkbox" name="option_create[{$option.set_member_id}][option_default]" {if isset($option.option_default) && $option.option_default == 1}checked="checked"{/if} value="1"></td>
<td align="center"><input type="checkbox" name="option_create[{$option.set_member_id}][option_negative]" {if isset($option.option_negative) && $option.option_negative == 1}checked="checked"{/if} value="1"></td>
<td><span class="editable number-right" name="option_create[{$option.set_member_id}][option_price]" title="{$LANG.common.click_edit}">{$option.option_price}</span></td>
<td align="center"><input type="checkbox" name="option_create[{$option.set_member_id}][absolute_price]" {if isset($option.absolute_price) && $option.absolute_price == 1}checked="checked"{/if} value="1"></td>
Expand Down Expand Up @@ -436,6 +439,7 @@
</select>
</td>
<td></td>
<td align="center"><input type="checkbox" id="opt_default" rel="default" class="checkbox data"></td>
<td align="center"><input type="checkbox" id="opt_negative" rel="negative" class="checkbox data"></td>
<td><input type="text" id="opt_price" rel="price" class="textbox number data"></td>
<td align="center"><input type="checkbox" id="opt_absolute_price" rel="absolute_price" class="checkbox data"></td>
Expand All @@ -446,6 +450,7 @@
<td class="set_enabled"><input type="hidden" rel=""></td>
<td class="matrix_include"><input type="hidden" rel=""></td>
<td class="name"><input type="hidden" rel=""></td>
<td class="default"><input type="hidden" rel=""></td>
<td class="negative"><input type="hidden" rel=""></td>
<td class="price"><input type="hidden" rel=""></td>
<td class="absolute_price"><input type="hidden" rel=""></td>
Expand All @@ -457,6 +462,7 @@
<td align="center" class="matrix_include"><input type="checkbox" name="option_add[matrix_include][]" value="1"></td>
<td class="name"><input type="hidden" name="option_add[value][]" value="" disabled="disabled"></td>
<td class="set_name">{$LANG.common.none}</td>
<td class="default" align="center"><input type="checkbox" name="option_add[default][]" value="1" disabled="disabled"></td>
<td class="negative" align="center"><input type="checkbox" name="option_add[negative][]" value="1" disabled="disabled"></td>
<td class="price"><input type="hidden" name="option_add[price][]" value="" disabled="disabled"></td>
<td class="absolute_price" align="center"><input type="checkbox" name="option_add[absolute_price][]" value="1" disabled="disabled"></td>
Expand Down
4 changes: 4 additions & 0 deletions admin/sources/products.index.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,9 @@
// Update existing options - Inline editor
if (isset($_POST['option_update']) && is_array($_POST['option_update'])) {
foreach ($_POST['option_update'] as $assign_id => $values) {
if (!isset($values['option_default'])) {
$values['option_default'] = 0;
}
if (!isset($values['option_negative'])) {
$values['option_negative'] = 0;
}
Expand All @@ -216,6 +219,7 @@
$record = array(
'product' => $product_id,
'option_negative' => (isset($_POST['option_add']['negative'][$offset]) && $_POST['option_add']['negative'][$offset]==1) ? $_POST['option_add']['negative'][$offset] : '0',
'option_default' => (isset($_POST['option_add']['default'][$offset]) && $_POST['option_add']['default'][$offset]==1) ? $_POST['option_add']['default'][$offset] : '0',
'option_price' => $_POST['option_add']['price'][$offset],
'option_weight' => $_POST['option_add']['weight'][$offset],
'matrix_include' => $_POST['option_add']['matrix_include'][$offset],
Expand Down
25 changes: 21 additions & 4 deletions classes/catalogue.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,7 @@ public function displayProductOptions($product_id = null, $selected_options_arra
'option_id' => $value['option_id'],
'option_name' => $value['option_name'],
'option_description' => $value['option_description'],
'option_default' => (bool)$value['option_default'],
'required' => (bool)$value['option_required'],
'selected' => isset($selected[$value['assign_id']]) ? true : false
);
Expand All @@ -492,6 +493,7 @@ public function displayProductOptions($product_id = null, $selected_options_arra
'symbol' => ($value['absolute_price']=='1' && $symbol=='+') ? '' : $symbol,
'value_id' => $value['value_id'],
'value_name' => $value['value_name'],
'option_default' => (bool)$value['option_default'],
'selected' => isset($selected[$value['assign_id']]) ? true : false,
'absolute_price' => $value['absolute_price']
);
Expand Down Expand Up @@ -891,7 +893,7 @@ public function getOptionsLinePrice() {
* @return bool/array
*/
public function getOptionRequired() {
// If there is only one value for every option assign them
// If there is only one value OR a default value for every option assign them
if(isset($_POST['add'])) {
$add_options = true;
$single_fixed_options = false;
Expand All @@ -901,11 +903,26 @@ public function getOptionRequired() {
if($assigned_options) {
$single_fixed_options = true;
$forced_options = array();
$default_options = array();
// First find any default option values
foreach($assigned_options as $assigned_option) {

// If the store owner set multiple defaults for the same option, only the last one will be used
if (!empty($assigned_option['option_default'])) {
$default_options[$assigned_option['option_id']] = $assigned_option;
}
}
foreach($assigned_options as $assigned_option) {
// Always use the default option value if it exists
if (isset($default_options[$assigned_option['option_id']])) {
$assigned_option = $default_options[$assigned_option['option_id']];
}
if(isset($forced_options[$assigned_option['option_id']])) {
$single_fixed_options = false;
break;
if (empty($default_options[$assigned_option['option_id']])) {
$single_fixed_options = false;
break;
} else {
continue; // this option was already handled
}
}

$forced_options[$assigned_option['option_id']] = $assigned_option['assign_id'];
Expand Down
1 change: 1 addition & 0 deletions setup/db/install/structure.sql
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,7 @@ CREATE TABLE IF NOT EXISTS `CubeCart_option_assign` (
`value_id` INT UNSIGNED NOT NULL DEFAULT '0',
`set_member_id` INT UNSIGNED NOT NULL DEFAULT '0',
`set_enabled` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
`option_default` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
`option_negative` tinyint(1) unsigned NOT NULL DEFAULT '0',
`option_price` DECIMAL(16,2) NOT NULL DEFAULT '0.00',
`option_weight` DECIMAL(10,3) NOT NULL DEFAULT '0.00',
Expand Down
1 change: 1 addition & 0 deletions setup/db/upgrade/6.1.6.sql
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
DELETE FROM `CubeCart_filemanager` WHERE `filename` NOT REGEXP '(jpeg|jpg|gif|png)$' AND `type` = 1; #EOQ
ALTER TABLE `CubeCart_option_assign` ADD COLUMN `option_default` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 AFTER `set_enabled`; #EOQ
ALTER TABLE `CubeCart_option_assign` CHANGE `option_weight` `option_weight` DECIMAL(10,3) NOT NULL DEFAULT '0.00'; #EOQ
4 changes: 2 additions & 2 deletions skins/foundation/templates/element.product.options.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<div class="pseudo-label">{if empty($option.option_description)}{$option.option_name}{else}{$option.option_description}{/if}{if $option.required} ({$LANG.common.required}){/if}</div>
<span id="error_option_{$option.option_id}">
{foreach from=$option.values item=value name=options}
<div><input type="radio" name="productOptions[{$option.option_id}]" id="rad_option_{$value.assign_id}" value="{$value.assign_id}" class="nomarg{if $value.absolute_price == '1'} absolute{/if}"{if !$CTRL_HIDE_PRICES} data-price="{$value.decimal_price}"{/if}{if $smarty.foreach.options.first} rel="error_option_{$option.option_id}" {if $option.required}required{/if}{/if}>
<div><input type="radio" name="productOptions[{$option.option_id}]" id="rad_option_{$value.assign_id}" value="{$value.assign_id}" class="nomarg{if $value.absolute_price == '1'} absolute{/if}"{if empty($_POST) && !empty($value.option_default)} checked="checked"{/if}{if !$CTRL_HIDE_PRICES} data-price="{$value.decimal_price}"{/if}{if $smarty.foreach.options.first} rel="error_option_{$option.option_id}" {if $option.required}required{/if}{/if}>
<label for="rad_option_{$value.assign_id}" class="return">{$value.value_name}{if $value.price} {$value.symbol}{$value.price}{/if}</label>
</div>
{/foreach}
Expand All @@ -44,7 +44,7 @@
<select name="productOptions[{$option.option_id}]" id="option_{$option.option_id}" class="nomarg" {if $option.required}required{/if}>
<option value="">{$LANG.form.please_select}</option>
{foreach from=$option.values item=value}
<option value="{$value.assign_id}"{if $value.absolute_price == '1'}class="absolute"{/if}{if !$CTRL_HIDE_PRICES} data-price="{$value.decimal_price}"{/if}>{$value.value_name}{if $value.price} {$value.symbol}{$value.price}{/if}</option>
<option value="{$value.assign_id}"{if $value.absolute_price == '1'}class="absolute"{/if}{if empty($_POST) && !empty($value.option_default)} selected="selected"{/if}{if !$CTRL_HIDE_PRICES} data-price="{$value.decimal_price}"{/if}>{$value.value_name}{if $value.price} {$value.symbol}{$value.price}{/if}</option>
{/foreach}
</select>
{/if}
Expand Down

0 comments on commit 7bb36e7

Please sign in to comment.