Index: branches/unlabeled/unlabeled-1.64.2/kernel/units/general/cat_event_handler.php =================================================================== diff -u -r5868 -r5869 --- branches/unlabeled/unlabeled-1.64.2/kernel/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 5868) +++ branches/unlabeled/unlabeled-1.64.2/kernel/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 5869) @@ -13,9 +13,11 @@ { parent::mapPermissions(); $permissions = Array( - 'OnExport' => Array('self' => 'view|advanced:export'), - 'OnExportBegin' => Array('self' => 'view|advanced:export'), - 'OnSaveSettings' => Array('self' => 'add|edit|advanced:import'), + 'OnExport' => Array('self' => 'view|advanced:export'), + 'OnExportBegin' => Array('self' => 'view|advanced:export'), + 'OnSaveSettings' => Array('self' => 'add|edit|advanced:import'), + 'OnBeforeDeleteOriginal' => Array('self' => 'edit|advanced:approve'), + ); $this->permMapping = array_merge($this->permMapping, $permissions); } @@ -337,7 +339,12 @@ } $view_filter = implode(' OR ', $view_filters); $object->addFilter('perm_filter2', $view_filter); + $object->addFilter('status_filter', $object->TableName.'.Status = 1'); + if ($this->Application->getUnitOption($event->Prefix, 'UsePendingEditing')) { + // if category item uses pending editing abilities, then in no cases show pending copies on front + $object->addFilter('original_filter', '%1$s.OrgId = 0 OR %1$s.OrgId IS NULL'); + } } $types = $event->getEventParam('types'); @@ -1799,7 +1806,59 @@ $object->SetDBField('CreatedById', $this->Application->GetVar('u_id')); } } + + /** + * Occures before original item of item in pending editing got deleted (for hooking only) + * + * @param kEvent $event + */ + function OnBeforeDeleteOriginal(&$event) + { + + } + + /** + * Apply same processing to each item beeing selected in grid + * + * @param kEvent $event + * @access private + */ + function iterateItems(&$event) + { + if ($event->Name != 'OnMassApprove' && $event->Name != 'OnMassDecline') { + return parent::iterateItems($event); + } + + if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + return; + } + + $object =& $event->getObject( Array('skip_autoload' => true) ); + $ids = $this->StoreSelectedIDs($event); + if ($ids) { + foreach ($ids as $id) { + $object->Load($id); + + switch ($event->Name) { + case 'OnMassApprove': + $ret = $object->ApproveChanges(); + break; + + case 'OnMassDecline': + $ret = $object->DeclineChanges(); + break; + } + + if (!$ret) { + $event->status = erFAIL; + $event->redirect = false; + break; + } + } + } + } + } ?> \ No newline at end of file