Index: trunk/core/kernel/db/db_event_handler.php =================================================================== diff -u -N -r6583 -r6647 --- trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 6583) +++ trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 6647) @@ -143,8 +143,14 @@ function mapEvents() { - $events_map = Array('OnRemoveFilters' => 'FilterAction', - 'OnApplyFilters' => 'FilterAction'); + $events_map = Array( + 'OnRemoveFilters' => 'FilterAction', + 'OnApplyFilters' => 'FilterAction', + 'OnMassApprove'=>'iterateItems', + 'OnMassDecline'=>'iterateItems', + 'OnMassMoveUp'=>'iterateItems', + 'OnMassMoveDown'=>'iterateItems', + ); $this->eventMethods = array_merge($this->eventMethods, $events_map); } @@ -1188,6 +1194,101 @@ } + /** + * Apply same processing to each item beeing selected in grid + * + * @param kEvent $event + * @access private + */ + function iterateItems(&$event) + { + if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + return; + } + + $object =& $event->getObject( Array('skip_autoload' => true) ); + $ids = $this->StoreSelectedIDs($event); + + if ($ids) { + $status_field = array_shift( $this->Application->getUnitOption($event->Prefix,'StatusField') ); + + foreach ($ids as $id) { + $object->Load($id); + + switch ($event->Name) { + case 'OnMassApprove': + $object->SetDBField($status_field, 1); + break; + + case 'OnMassDecline': + $object->SetDBField($status_field, 0); + break; + + case 'OnMassMoveUp': + $object->SetDBField('Priority', $object->GetDBField('Priority') + 1); + break; + + case 'OnMassMoveDown': + $object->SetDBField('Priority', $object->GetDBField('Priority') - 1); + break; + } + + if ($object->Update()) { + $event->status = erSUCCESS; + } + else { + $event->status = erFAIL; + $event->redirect = false; + break; + } + } + } + } + + /** + * Enter description here... + * + * @param kEvent $event + */ + function OnMassClone(&$event) + { + if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + return; + } + + $event->status = erSUCCESS; + + $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); + + $ids = $this->StoreSelectedIDs($event); + + if ($ids) { + $temp->CloneItems($event->Prefix, $event->Special, $ids); + } + + $this->clearSelectedIDs($event); + } + + function check_array($records, $field, $value) + { + foreach ($records as $record) { + if ($record[$field] == $value) { + return true; + } + } + return false; + } + + function OnPreSavePopup(&$event) + { + $object =& $event->getObject(); + $this->RemoveRequiredFields($object); + $event->CallSubEvent('OnPreSave'); + + $this->finalizePopup($event); + } + + /* End of Edit events */ // III. Events that allow to put some code before and after Update,Load,Create and Delete methods of item