Index: trunk/core/units/categories/categories_event_handler.php =================================================================== diff -u -r8428 -r8451 --- trunk/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 8428) +++ trunk/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 8451) @@ -284,7 +284,7 @@ * @param kEvent $event * @return int */ - function GetPassedId(&$event) + function getPassedID(&$event) { if ( $this->Application->IsAdmin()) { return parent::getPassedID($event); @@ -605,6 +605,69 @@ { $this->Application->RemoveVar('clipboard'); } + + /** + * Sets correct status for new categories created on front-end + * + * @param kEvent $event + */ + function OnBeforeItemCreate(&$event) + { + if ($this->Application->IsAdmin()) { + return ; + } + + $perm_helper =& $this->Application->recallObject('PermissionsHelper'); + /* @var $perm_helper kPermissionsHelper */ + + $new_status = false; + $category_id = $this->Application->GetVar('m_cat_id'); + if ($perm_helper->CheckPermission('CATEGORY.ADD', 0, $category_id)) { + $new_status = STATUS_ACTIVE; + } + else if ($perm_helper->CheckPermission('CATEGORY.ADD.PENDING', 0, $category_id)) { + $new_status = STATUS_PENDING; + } + + if ($new_status) { + $object =& $event->getObject(); + /* @var $object kDBItem */ + + $object->SetDBField('Status', $new_status); + } + else { + $event->status = erPERM_FAIL; + return ; + } + } + + /** + * Performs redirect to correct suggest confirmation template + * + * @param kEvent $event + */ + function OnCreate(&$event) + { + parent::OnCreate($event); + + if ($this->Application->IsAdmin() || $event->status != erSUCCESS) { + return ; + } + + $object =& $event->getObject(); + $is_active = ($object->GetDBField('Status') == STATUS_ACTIVE); + + $next_template = $is_active ? 'suggest_confirm_template' : 'suggest_pending_confirm_template'; + $event->redirect = $this->Application->GetVar($next_template); + $event->SetRedirectParam('opener', 's'); + + // send email events + $perm_prefix = $this->Application->getUnitOption($event->Prefix, 'PermItemPrefix'); + + $event_suffix = $is_active ? 'ADD' : 'ADD.PENDING'; + $this->Application->EmailEventAdmin($perm_prefix.'.'.$event_suffix); + $this->Application->EmailEventUser($perm_prefix.'.'.$event_suffix, $object->GetDBField('CreatedById')); + } } ?> \ No newline at end of file