Index: trunk/core/units/general/cat_event_handler.php =================================================================== diff -u -N -r8369 -r8402 --- trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 8369) +++ trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 8402) @@ -49,31 +49,28 @@ $this->Application->StoreVar('m_cat_id', $root_category); } - if ($event->Name == 'OnEdit' || $event->Name == 'OnSave') { + $check_events = Array ('OnEdit', 'OnSave', 'OnMassDelete'); + if (in_array($event->Name, $check_events)) { // check each id from selected individually and only if all are allowed proceed next - if ($event->Name == 'OnEdit') { - $selected_ids = implode(',', $this->StoreSelectedIDs($event)); - } - else { + if ($event->Name == 'OnSave') { $selected_ids = implode(',', $this->getSelectedIDs($event, true)); if (!$selected_ids) { $selected_ids = 0; // when saving newly created item (OnPreCreate -> OnPreSave -> OnSave) } } + else { + $selected_ids = implode(',', $this->StoreSelectedIDs($event)); + } $perm_value = true; if (strlen($selected_ids)) { - $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); - $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); - $sql = 'SELECT '.$id_field.', CreatedById, ci.CategoryId - FROM '.$table_name.' item_table - LEFT JOIN '.$this->Application->getUnitOption('ci', 'TableName').' ci ON ci.ItemResourceId = item_table.ResourceId - WHERE '.$id_field.' IN ('.$selected_ids.') AND (ci.PrimaryCat = 1)'; - $items = $this->Conn->Query($sql, $id_field); - $perm_helper =& $this->Application->recallObject('PermissionsHelper'); + /* @var $perm_helper kPermissionsHelper */ + + $items = $perm_helper->GetCategoryItemData($event->Prefix, $selected_ids); + $check_method = ($event->Name == 'OnMassDelete') ? 'DeleteCheckPermission' : 'ModifyCheckPermission'; foreach ($items as $item_id => $item_data) { - if ($perm_helper->ModifyCheckPermission($item_data['CreatedById'], $item_data['CategoryId'], $event->Prefix) == 0) { + if ($perm_helper->$check_method($item_data['CreatedById'], $item_data['CategoryId'], $event->Prefix) == 0) { // one of items selected has no permission $perm_value = false; break; @@ -357,7 +354,7 @@ if ( !$this->Application->IsAdmin() ) { - $object->addFilter('status_filter', $object->TableName.'.Status = 1'); + $object->addFilter('status_filter', '%1$s.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'); @@ -1749,14 +1746,37 @@ function OnCreate(&$event) { parent::OnCreate($event); + $this->SetFrontRedirectTemplate($event, 'suggest'); + } + + /** + * Creates category item & redirects to confirmation template (front-end only) + * + * @param kEvent $event + */ + function OnUpdate(&$event) + { + parent::OnUpdate($event); + $this->SetFrontRedirectTemplate($event, 'modify'); + } + + /** + * Sets next template to one required for front-end after adding/modifying item + * + * @param kEvent $event + * @param string $template_key - {suggest,modify} + */ + function SetFrontRedirectTemplate(&$event, $template_key) + { + if ($this->Application->IsAdmin() || $event->status != erSUCCESS) { + return ; + } - if (!$this->Application->IsAdmin()) { - $event->SetRedirectParam('opener', 's'); + $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); - } + $object =& $event->getObject(); + $next_template = $object->GetDBField('Status') == STATUS_ACTIVE ? 'confirm_template' : 'pending_confirm_template'; + $event->redirect = $this->Application->GetVar($template_key.'_'.$next_template); } /**