Index: trunk/core/units/general/cat_event_handler.php =================================================================== diff -u -N -r8104 -r8363 --- trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 8104) +++ trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 8363) @@ -18,9 +18,9 @@ 'OnSaveSettings' => Array('self' => 'add|edit|advanced:import'), 'OnBeforeDeleteOriginal' => Array('self' => 'edit|advanced:approve'), - 'OnCancelAction' => Array( 'self' => true), - + 'OnCancelAction' => Array('self' => true), ); + $this->permMapping = array_merge($this->permMapping, $permissions); } @@ -1503,10 +1503,11 @@ { parent::OnNew($event); - if ($event->Special != 'import' && $event->Special != 'export') return ; - $export_helper =& $this->Application->recallObject('CatItemExportHelper'); - $export_helper->setRequiredFields($event); - $this->Application->StoreVar('ImportCategory', 0); + if ($event->Special == 'import' || $event->Special == 'export') { + $export_helper =& $this->Application->recallObject('CatItemExportHelper'); + $export_helper->setRequiredFields($event); + $this->Application->StoreVar('ImportCategory', 0); + } } /** @@ -1705,6 +1706,55 @@ } /** + * Set status for new category item based on user permission in category + * + * @param kEvent $event + */ + function OnBeforeItemCreate(&$event) + { + if ($this->Application->IsAdmin()) { + return true; + } + + $use_pending_editing = $this->Application->getUnitOption($event->Prefix, 'UsePendingEditing'); + if ($use_pending_editing) { + $object =& $event->getObject(); + /* @var $object kDBItem */ + + $perm_helper =& $this->Application->recallObject('PermissionsHelper'); + /* @var $perm_helper kPermissionsHelper */ + + $primary_category = $object->GetDBField('CategoryId') > 0 ? $object->GetDBField('CategoryId') : $this->Application->GetVar('m_cat_id'); + $item_status = $perm_helper->AddCheckPermission($primary_category, $event->Prefix); + if ($item_status == STATUS_DISABLED) { + $event->status = erFAIL; + return false; + } + else { + $object->SetDBField('Status', $item_status); + } + } + } + + /** + * Creates category item & redirects to confirmation template (front-end only) + * + * @param kEvent $event + */ + function OnCreate(&$event) + { + parent::OnCreate($event); + + if (!$this->Application->IsAdmin()) { + $event->SetRedirectParam('opener', 's'); + + $object =& $event->getObject(); + $next_template = $object->GetDBField('Status') == STATUS_ACTIVE ? 'suggest_confirm_template' : 'suggest_pending_confirm_template'; + $event->redirect = $this->Application->GetVar($next_template); + } + } + + /** * Apply same processing to each item beeing selected in grid * * @param kEvent $event