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 @@
- - - - - - - - - - - - - + +
- -   - -
- : -   - - (mm.dd.yy) - -   (h:mm:ss AM) -
- -
- - - - - \ No newline at end of file + \ 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', '', function() { //set_event('sc', 'OnSaveCreated'); - openSelector('coup', '', '', '500x260'); + openSelector('coup', '', '', '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