Index: branches/5.1.x/core/kernel/db/cat_event_handler.php =================================================================== diff -u -N -r14002 -r14007 --- branches/5.1.x/core/kernel/db/cat_event_handler.php (.../cat_event_handler.php) (revision 14002) +++ branches/5.1.x/core/kernel/db/cat_event_handler.php (.../cat_event_handler.php) (revision 14007) @@ -1,6 +1,6 @@ Application->isAdminUser) { - // don't set permission-based status, when creating categories in admin - return true; + $object =& $event->getObject(); + /* @var $object kDBItem */ + + $is_admin = $this->Application->isAdminUser; + $owner_field = $this->getOwnerField($event->Prefix); + + if ((!$object->IsTempTable() && !$is_admin) || ($is_admin && !$object->GetDBField($owner_field))) { + // Front-end OR owner not specified -> set to currently logged-in user + $object->SetDBField($owner_field, $this->Application->RecallVar('user_id')); } + if ( $object->Validate() ) { + $object->SetDBField('ResourceId', $this->Application->NextResourceId()); + } + + if (!$this->Application->isAdmin) { + $this->setItemStatusByPermission($event); + } + } + + /** + * Sets category item status based on user permissions (only on Front-end) + * + * @param kEvent $event + */ + function setItemStatusByPermission(&$event) + { $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 */ + if (!$use_pending_editing) { + return ; + } - $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); - } + $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; } + else { + $object->SetDBField('Status', $item_status); + } } /**