Attached Files |
coupon_cloning_problem.patch [^] (8,444 bytes) 2011-01-05 02:14
[Show Content]
Index: admin_templates/discounts/coupon_clone_selector.tpl
===================================================================
--- admin_templates/discounts/coupon_clone_selector.tpl (revision 14103)
+++ admin_templates/discounts/coupon_clone_selector.tpl (working copy)
@@ -31,42 +31,10 @@
<div id="scroll_container">
<table class="edit-form">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_inc param="tab_index" by="1"/>
- <td class="label-cell">
- <label for="clone_items_count"><inp2:m_phrase label="la_EnterNumberOfCopies"/>:</label>
- </td>
- <td class="control-mid"> </td>
- <td class="control-cell">
- <input name="clone_items_count" id="clone_items_count" value="<inp2:coup_LastCloneCount />" size="5">
- </td>
- </tr>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_inc param="tab_index" by="1"/>
- <td class="label-cell">
- <inp2:m_Phrase label="la_Expiration" />:
- </td>
- <td class="control-mid"> </td>
- <td class="control-cell">
- <input type="text" name="clone_exp_date" id="clone_exp_date" value="<inp2:coup_DefaultExpDate />" datepickerIcon="<inp2:m_ProjectBase/>admin/images/ddarrow.gif" size="9">
- <span class="small">(mm.dd.yy)</span>
- <script type="text/javascript">
- initCalendar("clone_exp_date", "m.d.y");
- </script>
- <input type="text" name="clone_exp_time" id="clone_exp_time" value="<inp2:coup_DefaultExpTime />" size="9"><span class="small"> (h:mm:ss AM)</span>
- <br>
-
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="coup" field="Expiration"/>
- </tr>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="coup" field="CouponCount" title="la_EnterNumberOfCopies" style="width: 50px;"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="coup" field="DefaultExpiration" title="la_Expiration"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
-<!-- <inp2:coup_HiddenSelection /> -->
-
-<inp2:m_include t="incs/footer"/>
-
-<script type="text/javascript">
- set_event('coup', '');
-</script>
\ No newline at end of file
+<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: admin_templates/discounts/coupons_list.tpl
===================================================================
--- admin_templates/discounts/coupons_list.tpl (revision 14103)
+++ admin_templates/discounts/coupons_list.tpl (working copy)
@@ -28,7 +28,7 @@
a_toolbar.AddButton( new ToolBarButton('clone', '<inp2:m_phrase label="la_ToolTip_Clone" escape="1"/>',
function() {
//set_event('sc', 'OnSaveCreated');
- openSelector('coup', '<inp2:m_t t="in-commerce/discounts/coupon_clone_selector" pass="all"/>', '', '500x260');
+ openSelector('coup', '<inp2:m_t t="in-commerce/discounts/coupon_clone_selector" pass="all"/>', '', '500x260', 'OnPrepareClone');
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
Index: units/coupons/coupons_config.php
===================================================================
--- units/coupons/coupons_config.php (revision 14103)
+++ units/coupons/coupons_config.php (working copy)
@@ -134,6 +134,11 @@
'NumberOfUses' => Array ('type' => 'int', 'default' => 1),
),
+ 'VirtualFields' => Array (
+ 'CouponCount' => Array ('type' => 'int', 'min_value_inc' => 1, 'default' => 1),
+ 'DefaultExpiration' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
+ ),
+
'Grids' => Array(
'Default' => Array(
'Icons' => Array(
Index: units/coupons/coupons_event_handler.php
===================================================================
--- units/coupons/coupons_event_handler.php (revision 14103)
+++ units/coupons/coupons_event_handler.php (working copy)
@@ -24,38 +24,98 @@
parent::mapPermissions();
$permissions = Array(
'OnItemBuild' => Array('self' => true),
+ 'OnApplyClone' => Array('self' => 'add'),
+ 'OnPrepareClone' => Array('self' => 'view'),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
}
+ /**
+ * Prepares coupon cloning
+ *
+ * @param kEvent $event
+ */
+ function OnPrepareClone(&$event)
+ {
+ $this->StoreSelectedIDs($event);
+ $event->CallSubEvent('OnNew');
+
+ $object =& $event->getObject();
+ /* @var $object kDBItem */
+
+ $this->setCloningRequired($object);
+ $clone_count = $this->Application->RecallVar('CoupLastCloneCount');
+
+ if ( is_numeric($clone_count) && $clone_count > 0 ) {
+ $object->SetDBField('CouponCount', $clone_count);
+ }
+
+ $expire_days = $this->Application->ConfigValue('Comm_DefaultCouponDuration');
+ $default_expiration = strtotime('+' . $expire_days . ' days');
+
+ $object->SetDBField('DefaultExpiration_date', $default_expiration);
+ $object->SetDBField('DefaultExpiration_time', $default_expiration);
+ }
+
function OnApplyClone(&$event)
{
- $item = &$event->getObject();
- $clone_count = $this->Application->GetVar('clone_items_count');
- $table = $this->Application->getUnitOption($event->Prefix, 'TableName');
- if ($clone_count && $clone_count>0){
- $this->Application->StoreVar('CoupLastCloneCount', $clone_count);
- for ($i=0; $i<$clone_count; $i++) {
+ $object =& $event->getObject( Array ('skip_autoload' => true) );
+ /* @var $object kDBItem */
+
+ $this->setCloningRequired($object);
+
+ $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
+ list($id, $field_values) = each($items_info);
+ $object->SetFieldsFromHash($field_values);
+ $object->setID($id);
+
+ if ( !$object->Validate() ) {
+ $event->status = erFAIL;
+
+ return ;
+ }
+
+ $item =& $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
+ /* @var $item kDBItem */
+
+ $original_coupon_ids = $this->getSelectedIDs($event, true);
+
+ $clone_count = $object->GetDBField('CouponCount');
+ $this->Application->StoreVar('CoupLastCloneCount', $clone_count);
+ $default_expiration = $object->GetDBField('DefaultExpiration');
+
+ foreach ($original_coupon_ids as $original_coupon_id) {
+ $object->Load($original_coupon_id);
+
+ for ($i = 0; $i < $clone_count; $i++) {
$this->SetNewCode($item);
- $item->SetField('Expiration_date', $this->Application->GetVar('clone_exp_date'));
- $item->SetField('Expiration_time', $this->Application->GetVar('clone_exp_time'));
+ $item->SetDBField('Name', $object->GetDBField('Name'));
$item->NameCopy();
- $validated = $item->Create();
+ $item->SetDBField('Expiration_date', $default_expiration);
+ $item->SetDBField('Expiration_time', $default_expiration);
+ if ( !$item->Create() ) {
+ $event->status = erFAIL;
+
+ return ;
+ }
}
}
- if ($validated){
- $this->finalizePopup($event);
- }else{
- $event->redirect = false;
- }
+ $this->finalizePopup($event);
}
+ function setCloningRequired(&$object)
+ {
+ $this->RemoveRequiredFields($object);
+ $object->setRequired('CouponCount');
+ $object->setRequired('DefaultExpiration');
+ }
+
function SetNewCode(&$item)
{
do{
Index: units/coupons/coupons_tag_processor.php
===================================================================
--- units/coupons/coupons_tag_processor.php (revision 14103)
+++ units/coupons/coupons_tag_processor.php (working copy)
@@ -15,24 +15,4 @@
class CouponsTagProcessor extends kDBTagProcessor {
- function LastCloneCount($params){
-
- $clone_count = $this->Application->RecallVar('CoupLastCloneCount');
- if (!$clone_count){
- $clone_count = 1;
- }
- return $clone_count;
- }
-
- function DefaultExpDate($params){
- $object = &$this->Application->recallObject($this->getPrefixSpecial());
- $formatter =& $this->Application->makeClass('kDateFormatter');
- return $formatter->Format( adodb_mktime() + $this->Application->ConfigValue('Comm_DefaultCouponDuration') * 3600 * 24, 'Expiration_date', $object);
- }
-
- function DefaultExpTime($params){
- $object = &$this->Application->recallObject($this->getPrefixSpecial());
- $formatter =& $this->Application->makeClass('kDateFormatter');
- return $formatter->Format( adodb_mktime() + $this->Application->ConfigValue('Comm_DefaultCouponDuration') * 3600 * 24, 'Expiration_time', $object);
- }
}
\ No newline at end of file
coupon_cloning_problem_v2.patch [^] (8,603 bytes) 2011-01-05 02:25
[Show Content]
Index: admin_templates/discounts/coupon_clone_selector.tpl
===================================================================
--- admin_templates/discounts/coupon_clone_selector.tpl (revision 14103)
+++ admin_templates/discounts/coupon_clone_selector.tpl (working copy)
@@ -31,42 +31,10 @@
<div id="scroll_container">
<table class="edit-form">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_inc param="tab_index" by="1"/>
- <td class="label-cell">
- <label for="clone_items_count"><inp2:m_phrase label="la_EnterNumberOfCopies"/>:</label>
- </td>
- <td class="control-mid"> </td>
- <td class="control-cell">
- <input name="clone_items_count" id="clone_items_count" value="<inp2:coup_LastCloneCount />" size="5">
- </td>
- </tr>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_inc param="tab_index" by="1"/>
- <td class="label-cell">
- <inp2:m_Phrase label="la_Expiration" />:
- </td>
- <td class="control-mid"> </td>
- <td class="control-cell">
- <input type="text" name="clone_exp_date" id="clone_exp_date" value="<inp2:coup_DefaultExpDate />" datepickerIcon="<inp2:m_ProjectBase/>admin/images/ddarrow.gif" size="9">
- <span class="small">(mm.dd.yy)</span>
- <script type="text/javascript">
- initCalendar("clone_exp_date", "m.d.y");
- </script>
- <input type="text" name="clone_exp_time" id="clone_exp_time" value="<inp2:coup_DefaultExpTime />" size="9"><span class="small"> (h:mm:ss AM)</span>
- <br>
-
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="coup" field="Expiration"/>
- </tr>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="coup" field="CouponCount" title="la_EnterNumberOfCopies" style="width: 50px;"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="coup" field="DefaultExpiration" title="la_Expiration"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
-<!-- <inp2:coup_HiddenSelection /> -->
-
-<inp2:m_include t="incs/footer"/>
-
-<script type="text/javascript">
- set_event('coup', '');
-</script>
\ No newline at end of file
+<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: admin_templates/discounts/coupons_list.tpl
===================================================================
--- admin_templates/discounts/coupons_list.tpl (revision 14103)
+++ admin_templates/discounts/coupons_list.tpl (working copy)
@@ -28,7 +28,7 @@
a_toolbar.AddButton( new ToolBarButton('clone', '<inp2:m_phrase label="la_ToolTip_Clone" escape="1"/>',
function() {
//set_event('sc', 'OnSaveCreated');
- openSelector('coup', '<inp2:m_t t="in-commerce/discounts/coupon_clone_selector" pass="all"/>', '', '500x260');
+ openSelector('coup', '<inp2:m_t t="in-commerce/discounts/coupon_clone_selector" pass="all"/>', '', '500x260', 'OnPrepareClone');
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
Index: units/coupons/coupons_config.php
===================================================================
--- units/coupons/coupons_config.php (revision 14103)
+++ units/coupons/coupons_config.php (working copy)
@@ -134,6 +134,11 @@
'NumberOfUses' => Array ('type' => 'int', 'default' => 1),
),
+ 'VirtualFields' => Array (
+ 'CouponCount' => Array ('type' => 'int', 'min_value_inc' => 1, 'default' => 1),
+ 'DefaultExpiration' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
+ ),
+
'Grids' => Array(
'Default' => Array(
'Icons' => Array(
Index: units/coupons/coupons_event_handler.php
===================================================================
--- units/coupons/coupons_event_handler.php (revision 14103)
+++ units/coupons/coupons_event_handler.php (working copy)
@@ -24,38 +24,101 @@
parent::mapPermissions();
$permissions = Array(
'OnItemBuild' => Array('self' => true),
+ 'OnApplyClone' => Array('self' => 'add'),
+ 'OnPrepareClone' => Array('self' => 'view'),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
}
+ /**
+ * Prepares coupon cloning
+ *
+ * @param kEvent $event
+ */
+ function OnPrepareClone(&$event)
+ {
+ $this->StoreSelectedIDs($event);
+ $event->CallSubEvent('OnNew');
+
+ $object =& $event->getObject();
+ /* @var $object kDBItem */
+
+ $this->setCloningRequired($object);
+ $clone_count = $this->Application->RecallVar('CoupLastCloneCount');
+
+ if ( is_numeric($clone_count) && $clone_count > 0 ) {
+ $object->SetDBField('CouponCount', $clone_count);
+ }
+
+ $expire_days = $this->Application->ConfigValue('Comm_DefaultCouponDuration');
+ $default_expiration = strtotime('+' . $expire_days . ' days');
+
+ $object->SetDBField('DefaultExpiration_date', $default_expiration);
+ $object->SetDBField('DefaultExpiration_time', $default_expiration);
+ }
+
function OnApplyClone(&$event)
{
- $item = &$event->getObject();
- $clone_count = $this->Application->GetVar('clone_items_count');
- $table = $this->Application->getUnitOption($event->Prefix, 'TableName');
- if ($clone_count && $clone_count>0){
- $this->Application->StoreVar('CoupLastCloneCount', $clone_count);
- for ($i=0; $i<$clone_count; $i++) {
- $this->SetNewCode($item);
+ $object =& $event->getObject( Array ('skip_autoload' => true) );
+ /* @var $object kDBItem */
- $item->SetField('Expiration_date', $this->Application->GetVar('clone_exp_date'));
- $item->SetField('Expiration_time', $this->Application->GetVar('clone_exp_time'));
+ $this->setCloningRequired($object);
+
+ $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
+ list($id, $field_values) = each($items_info);
+ $object->SetFieldsFromHash($field_values);
+ $object->setID($id);
+
+ if ( !$object->Validate() ) {
+ $event->status = erFAIL;
+
+ return ;
+ }
+
+ $item =& $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
+ /* @var $item kDBItem */
+
+ $original_coupon_ids = $this->getSelectedIDs($event, true);
+
+ $clone_count = $object->GetDBField('CouponCount');
+ $this->Application->StoreVar('CoupLastCloneCount', $clone_count);
+ $default_expiration = $object->GetDBField('DefaultExpiration');
+
+ foreach ($original_coupon_ids as $original_coupon_id) {
+ $item->Load($original_coupon_id);
+
+ for ($i = 0; $i < $clone_count; $i++) {
$item->NameCopy();
- $validated = $item->Create();
+ $this->SetNewCode($item);
+ $item->SetDBField('Expiration_date', $default_expiration);
+ $item->SetDBField('Expiration_time', $default_expiration);
+ // remove original coupon usage statistics
+ $item->SetDBField('LastUsedBy', NULL);
+ $item->SetDBField('LastUsedOn_date', NULL);
+ $item->SetDBField('LastUsedOn_time', NULL);
+
+ if ( !$item->Create() ) {
+ $event->status = erFAIL;
+
+ return ;
+ }
}
}
- if ($validated){
- $this->finalizePopup($event);
- }else{
- $event->redirect = false;
- }
+ $this->finalizePopup($event);
}
+ function setCloningRequired(&$object)
+ {
+ $this->RemoveRequiredFields($object);
+ $object->setRequired('CouponCount');
+ $object->setRequired('DefaultExpiration');
+ }
+
function SetNewCode(&$item)
{
do{
Index: units/coupons/coupons_tag_processor.php
===================================================================
--- units/coupons/coupons_tag_processor.php (revision 14103)
+++ units/coupons/coupons_tag_processor.php (working copy)
@@ -15,24 +15,4 @@
class CouponsTagProcessor extends kDBTagProcessor {
- function LastCloneCount($params){
-
- $clone_count = $this->Application->RecallVar('CoupLastCloneCount');
- if (!$clone_count){
- $clone_count = 1;
- }
- return $clone_count;
- }
-
- function DefaultExpDate($params){
- $object = &$this->Application->recallObject($this->getPrefixSpecial());
- $formatter =& $this->Application->makeClass('kDateFormatter');
- return $formatter->Format( adodb_mktime() + $this->Application->ConfigValue('Comm_DefaultCouponDuration') * 3600 * 24, 'Expiration_date', $object);
- }
-
- function DefaultExpTime($params){
- $object = &$this->Application->recallObject($this->getPrefixSpecial());
- $formatter =& $this->Application->makeClass('kDateFormatter');
- return $formatter->Format( adodb_mktime() + $this->Application->ConfigValue('Comm_DefaultCouponDuration') * 3600 * 24, 'Expiration_time', $object);
- }
}
\ No newline at end of file
coupon_cloning_problem-v3-Dmitry.patch [^] (12,932 bytes) 2011-01-05 12:15
[Show Content]
Index: admin_templates/discounts/coupon_clone_selector.tpl
===================================================================
--- admin_templates/discounts/coupon_clone_selector.tpl (revision 14094)
+++ admin_templates/discounts/coupon_clone_selector.tpl (working copy)
@@ -31,42 +31,10 @@
<div id="scroll_container">
<table class="edit-form">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_inc param="tab_index" by="1"/>
- <td class="label-cell">
- <label for="clone_items_count"><inp2:m_phrase label="la_EnterNumberOfCopies"/>:</label>
- </td>
- <td class="control-mid"> </td>
- <td class="control-cell">
- <input name="clone_items_count" id="clone_items_count" value="<inp2:coup_LastCloneCount />" size="5">
- </td>
- </tr>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_inc param="tab_index" by="1"/>
- <td class="label-cell">
- <inp2:m_Phrase label="la_Expiration" />:
- </td>
- <td class="control-mid"> </td>
- <td class="control-cell">
- <input type="text" name="clone_exp_date" id="clone_exp_date" value="<inp2:coup_DefaultExpDate />" datepickerIcon="<inp2:m_ProjectBase/>admin/images/ddarrow.gif" size="9">
- <span class="small">(mm.dd.yy)</span>
- <script type="text/javascript">
- initCalendar("clone_exp_date", "m.d.y");
- </script>
- <input type="text" name="clone_exp_time" id="clone_exp_time" value="<inp2:coup_DefaultExpTime />" size="9"><span class="small"> (h:mm:ss AM)</span>
- <br>
-
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="coup" field="Expiration"/>
- </tr>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="coup" field="CouponCount" title="la_EnterNumberOfCopies" style="width: 50px;"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="coup" field="DefaultExpiration" title="la_Expiration"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
-<!-- <inp2:coup_HiddenSelection /> -->
-
-<inp2:m_include t="incs/footer"/>
-
-<script type="text/javascript">
- set_event('coup', '');
-</script>
\ No newline at end of file
+<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: admin_templates/discounts/coupons_list.tpl
===================================================================
--- admin_templates/discounts/coupons_list.tpl (revision 14094)
+++ admin_templates/discounts/coupons_list.tpl (working copy)
@@ -28,7 +28,7 @@
a_toolbar.AddButton( new ToolBarButton('clone', '<inp2:m_phrase label="la_ToolTip_Clone" escape="1"/>',
function() {
//set_event('sc', 'OnSaveCreated');
- openSelector('coup', '<inp2:m_t t="in-commerce/discounts/coupon_clone_selector" pass="all"/>', '', '500x260');
+ openSelector('coup', '<inp2:m_Link template="in-commerce/discounts/coupon_clone_selector" pass="all"/>', '', '600x260', 'OnPrepareClone');
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
Index: units/coupon_items/coupon_items_config.php
===================================================================
--- units/coupon_items/coupon_items_config.php (revision 14094)
+++ units/coupon_items/coupon_items_config.php (working copy)
@@ -41,8 +41,7 @@
),
'IDField' => 'CouponItemId',
- 'StatusField' => Array('Status'),
- 'TitleField' => 'Name',
+ 'StatusField' => Array('Status'),
'TableName' => TABLE_PREFIX . 'ProductsCouponItems',
'ForeignKey' => 'CouponId',
Index: units/coupons/coupons_config.php
===================================================================
--- units/coupons/coupons_config.php (revision 14094)
+++ units/coupons/coupons_config.php (working copy)
@@ -134,6 +134,11 @@
'NumberOfUses' => Array ('type' => 'int', 'default' => 1),
),
+ 'VirtualFields' => Array (
+ 'CouponCount' => Array ('type' => 'int', 'min_value_inc' => 1, 'default' => 1),
+ 'DefaultExpiration' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
+ ),
+
'Grids' => Array(
'Default' => Array(
'Icons' => Array(
Index: units/coupons/coupons_event_handler.php
===================================================================
--- units/coupons/coupons_event_handler.php (revision 14094)
+++ units/coupons/coupons_event_handler.php (working copy)
@@ -24,38 +24,104 @@
parent::mapPermissions();
$permissions = Array(
'OnItemBuild' => Array('self' => true),
+ 'OnApplyClone' => Array('self' => 'add'),
+ 'OnPrepareClone' => Array('self' => 'view'),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
}
+ /**
+ * Prepares coupon cloning
+ *
+ * @param kEvent $event
+ */
+ function OnPrepareClone(&$event)
+ {
+ $this->StoreSelectedIDs($event);
+ $event->CallSubEvent('OnNew');
+
+ $object =& $event->getObject();
+ /* @var $object kDBItem */
+
+ $this->setCloningRequired($object);
+ $clone_count = $this->Application->RecallVar('CoupLastCloneCount');
+
+ if ( is_numeric($clone_count) && $clone_count > 0 ) {
+ $object->SetDBField('CouponCount', $clone_count);
+ }
+
+ $expire_days = $this->Application->ConfigValue('Comm_DefaultCouponDuration');
+ $default_expiration = strtotime('+' . $expire_days . ' days');
+
+ $object->SetDBField('DefaultExpiration_date', $default_expiration);
+ $object->SetDBField('DefaultExpiration_time', $default_expiration);
+ }
+
+
+ function OnBeforeClone(&$event)
+ {
+ parent::OnBeforeClone($event);
+
+ $object =& $event->getObject();
+ /* @var $object kDBItem */
+
+ $this->SetNewCode($object);
+
+ $object->SetDBField('LastUsedBy', NULL);
+ $object->SetDBField('LastUsedOn', NULL);
+ $object->SetDBField('NumberOfUses', NULL);
+
+ $expiration = $this->Application->GetVar('clone_coupon_expiration');
+ $object->SetDBField('Expiration_date', $expiration);
+ $object->SetDBField('Expiration_time', $expiration);
+ }
+
function OnApplyClone(&$event)
- {
- $item = &$event->getObject();
- $clone_count = $this->Application->GetVar('clone_items_count');
- $table = $this->Application->getUnitOption($event->Prefix, 'TableName');
- if ($clone_count && $clone_count>0){
- $this->Application->StoreVar('CoupLastCloneCount', $clone_count);
- for ($i=0; $i<$clone_count; $i++) {
- $this->SetNewCode($item);
+ {
+ if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
+ $event->status = erFAIL;
+ return;
+ }
+
+ $object =& $event->getObject( Array ('skip_autoload' => true) );
+ /* @var $object kDBItem */
- $item->SetField('Expiration_date', $this->Application->GetVar('clone_exp_date'));
- $item->SetField('Expiration_time', $this->Application->GetVar('clone_exp_time'));
- $item->NameCopy();
- $validated = $item->Create();
+ $this->setCloningRequired($object);
+ $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
+ list($id, $field_values) = each($items_info);
+ $object->SetFieldsFromHash($field_values);
+ $object->setID($id);
- }
+ if ( !$object->Validate() ) {
+ $event->status = erFAIL;
+ return ;
}
+
+ $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
+ /* @var $temp kTempTablesHandler */
+
+ $original_coupon_ids = $this->getSelectedIDs($event, true);
+ $clone_count = $object->GetDBField('CouponCount');
+ $this->Application->StoreVar('CoupLastCloneCount', $clone_count);
+ $this->Application->SetVar('clone_coupon_expiration', $object->GetDBField('DefaultExpiration'));
+
+ for ($i = 0; $i < $clone_count; $i++) {
+ $temp->CloneItems($event->Prefix, $event->Special, $original_coupon_ids);
+ }
- if ($validated){
- $this->finalizePopup($event);
- }else{
- $event->redirect = false;
- }
+ $this->finalizePopup($event);
}
+ function setCloningRequired(&$object)
+ {
+ $this->RemoveRequiredFields($object);
+ $object->setRequired('CouponCount');
+ $object->setRequired('DefaultExpiration');
+ }
+
function SetNewCode(&$item)
{
do{
Index: units/coupons/coupons_tag_processor.php
===================================================================
--- units/coupons/coupons_tag_processor.php (revision 14094)
+++ units/coupons/coupons_tag_processor.php (working copy)
@@ -15,24 +15,4 @@
class CouponsTagProcessor extends kDBTagProcessor {
- function LastCloneCount($params){
-
- $clone_count = $this->Application->RecallVar('CoupLastCloneCount');
- if (!$clone_count){
- $clone_count = 1;
- }
- return $clone_count;
- }
-
- function DefaultExpDate($params){
- $object = &$this->Application->recallObject($this->getPrefixSpecial());
- $formatter =& $this->Application->makeClass('kDateFormatter');
- return $formatter->Format( adodb_mktime() + $this->Application->ConfigValue('Comm_DefaultCouponDuration') * 3600 * 24, 'Expiration_date', $object);
- }
-
- function DefaultExpTime($params){
- $object = &$this->Application->recallObject($this->getPrefixSpecial());
- $formatter =& $this->Application->makeClass('kDateFormatter');
- return $formatter->Format( adodb_mktime() + $this->Application->ConfigValue('Comm_DefaultCouponDuration') * 3600 * 24, 'Expiration_time', $object);
- }
}
\ No newline at end of file
Index: units/gift_certificates/gift_certificates_eh.php
===================================================================
--- units/gift_certificates/gift_certificates_eh.php (revision 14094)
+++ units/gift_certificates/gift_certificates_eh.php (working copy)
@@ -29,60 +29,6 @@
$this->permMapping = array_merge($this->permMapping, $permissions);
}
- function OnApplyClone(&$event)
- {
- $item = &$event->getObject();
- $clone_count = $this->Application->GetVar('clone_items_count');
- $table = $this->Application->getUnitOption($event->Prefix, 'TableName');
- if ($clone_count && $clone_count>0){
- $this->Application->StoreVar('CoupLastCloneCount', $clone_count);
- for ($i=0; $i<$clone_count; $i++) {
- $this->SetNewCode($item);
-
- $item->SetField('Expiration_date', $this->Application->GetVar('clone_exp_date'));
- $item->SetField('Expiration_time', $this->Application->GetVar('clone_exp_time'));
- $item->NameCopy();
- $validated = $item->Create();
-
-
- }
- }
-
- if ($validated){
- $this->finalizePopup($event);
- }else{
- $event->redirect = false;
- }
- }
-
- function SetNewCode(&$item)
- {
- do{
- $new_code = $this->RandomCouponCode(10);
- $exists = $this->Conn->GetOne('SELECT COUNT(*) FROM '.TABLE_PREFIX.'ProductsCoupons WHERE Code='.$this->Conn->qstr($new_code));
- if ($exists){
- $new_code = false;
- }
- } while (!$new_code);
-
- $item->SetDBField('Code', $new_code);
- }
-
- function RandomCouponCode($size)
- {
- $rand_code = "";
- for ($i=0; $i<10; $i++){
- $is_letter = rand(0,1);
- if ($is_letter){
- $rand_char = chr(rand(65,90));
- }else{
- $rand_char = rand(0,9);
- }
- $rand_code .= $rand_char;
- }
- return $rand_code;
- }
-
/**
* Enter description here...
*
@@ -133,12 +79,13 @@
{
parent::OnPreCreate($event);
- $object = &$event->getObject();
+ $object =& $event->getObject();
+ /* @var $object kDBItem */
+
$exp_date = adodb_mktime();
-
$default_duration = $this->Application->ConfigValue('Comm_DefaultCouponDuration');
-
- if ($default_duration && $default_duration > 0){
+
+ if ($default_duration){
$exp_date += (int)$default_duration * 86400;
}
$object->SetDBField('Expiration_date', $exp_date);
Index: units/gift_certificates/gift_certificates_tp.php
===================================================================
--- units/gift_certificates/gift_certificates_tp.php (revision 14094)
+++ units/gift_certificates/gift_certificates_tp.php (working copy)
@@ -14,30 +14,7 @@
defined('FULL_PATH') or die('restricted access!');
class GiftCertificateTagProcessor extends kDBTagProcessor {
-
- function LastCloneCount($params)
- {
- $clone_count = $this->Application->RecallVar('CoupLastCloneCount');
- if (!$clone_count){
- $clone_count = 1;
- }
- return $clone_count;
- }
-
- function DefaultExpDate($params)
- {
- $object = &$this->Application->recallObject($this->getPrefixSpecial());
- $formatter =& $this->Application->makeClass('kDateFormatter');
- return $formatter->Format( adodb_mktime() + $this->Application->ConfigValue('Comm_DefaultCouponDuration') * 3600 * 24, 'Expiration_date', $object);
- }
-
- function DefaultExpTime($params)
- {
- $object = &$this->Application->recallObject($this->getPrefixSpecial());
- $formatter =& $this->Application->makeClass('kDateFormatter');
- return $formatter->Format( adodb_mktime() + $this->Application->ConfigValue('Comm_DefaultCouponDuration') * 3600 * 24, 'Expiration_time', $object);
- }
-
+
function HasOrder($params)
{
if ($this->IsNewItem($params)) {
|