Index: branches/unlabeled/unlabeled-1.64.2/kernel/units/general/cat_event_handler.php =================================================================== diff -u -r5869 -r5921 --- branches/unlabeled/unlabeled-1.64.2/kernel/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 5869) +++ branches/unlabeled/unlabeled-1.64.2/kernel/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 5921) @@ -17,7 +17,9 @@ 'OnExportBegin' => Array('self' => 'view|advanced:export'), 'OnSaveSettings' => Array('self' => 'add|edit|advanced:import'), 'OnBeforeDeleteOriginal' => Array('self' => 'edit|advanced:approve'), - + + 'OnCancelAction' => Array( 'self' => true), + ); $this->permMapping = array_merge($this->permMapping, $permissions); } @@ -55,15 +57,15 @@ else { $selected_ids = $this->Application->RecallVar($event->getPrefixSpecial().'_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_value = true; $perm_helper =& $this->Application->recallObject('PermissionsHelper'); foreach ($items as $item_id => $item_data) { @@ -73,14 +75,14 @@ break; } } - + if (!$perm_value) { $event->status = erPERM_FAIL; } - + return $perm_value; } - + return parent::CheckPermission($event); } @@ -327,7 +329,7 @@ WHERE PermissionName = "'.$this->Application->getUnitOption($event->Prefix, 'PermItemPrefix').'.VIEW"'; $view_perm = $this->Conn->GetOne($sql); } - + $object->addFilter('perm_filter', 'perm.PermId = '.$view_perm); if ( !$this->Application->IsAdmin() ) @@ -339,14 +341,14 @@ } $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'); $except_types = $event->getEventParam('except'); $type_clauses = $this->getTypeClauses($event); @@ -445,9 +447,9 @@ function prepareObject(&$object, &$event) { $this->prepareItemStatuses($event); - + $object->addCalculatedField('CachedNavbar', 'l'.$this->Application->GetVar('m_lang').'_CachedNavbar'); - + if ($event->Special == 'export' || $event->Special == 'import') { $this->prepareExportColumns($event); @@ -1646,9 +1648,9 @@ function OnProcessSelected(&$event) { $selected_ids = $this->Application->GetVar('selected_ids'); - + $dst_field = $this->Application->RecallVar('dst_field'); - + if ($dst_field == 'ItemCategory') { // Item Edit -> Categories Tab -> New Categories $object =& $event->getObject(); @@ -1657,7 +1659,7 @@ $object->assignToCategory($category_id); } } - + if ($dst_field == 'ImportCategory') { // Tools -> Import -> Item Import -> Select Import Category $this->Application->StoreVar('ImportCategory', $selected_ids['c']); @@ -1673,7 +1675,7 @@ $this->finalizePopup($event); } - + /** * Saves Import/Export settings to session * @@ -1731,7 +1733,7 @@ $object->SetDBField($cached_field, $this->Conn->GetOne($sql)); } } - + /** * Saves item beeing edited into temp table * @@ -1743,55 +1745,55 @@ $use_pending_editing = $this->Application->getUnitOption($event->Prefix, 'UsePendingEditing'); if ($event->status == erSUCCESS && $use_pending_editing) { // decision: clone or not clone - + $object =& $event->getObject(); if ($object->GetID() == 0 || $object->GetDBField('OrgId') > 0) { // new items or cloned items shouldn't be cloned again return true; } $perm_helper =& $this->Application->recallObject('PermissionsHelper'); if ($perm_helper->ModifyCheckPermission($object->GetDBField('CreatedById'), $object->GetDBField('CategoryId'), $event->Prefix) == 2) { - + // 1. clone original item $temp_handler =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); $cloned_ids = $temp_handler->CloneItems($event->Prefix, $event->Special, Array($object->GetID()), null, null, null, true); $ci_table = $this->Application->GetTempName(TABLE_PREFIX.'CategoryItems'); - + // 2. delete record from CategoryItems (about cloned item) that was automatically created during call of Create method of kCatDBItem $sql = 'SELECT ResourceId FROM '.$object->TableName.' WHERE '.$object->IDField.' = '.$cloned_ids[0]; $clone_resource_id = $this->Conn->GetOne($sql); - + $sql = 'DELETE FROM '.$ci_table.' WHERE ItemResourceId = '.$clone_resource_id.' AND PrimaryCat = 1'; $this->Conn->Query($sql); - + // 3. copy main item categoryitems to cloned item $sql = ' INSERT INTO '.$ci_table.' (CategoryId, ItemResourceId, PrimaryCat, ItemPrefix, Filename) SELECT CategoryId, '.$clone_resource_id.' AS ItemResourceId, PrimaryCat, ItemPrefix, Filename FROM '.$ci_table.' WHERE ItemResourceId = '.$object->GetDBField('ResourceId'); $this->Conn->Query($sql); - + // 4. put cloned id to OrgId field of item being cloned $sql = 'UPDATE '.$object->TableName.' SET OrgId = '.$object->GetID().' WHERE '.$object->IDField.' = '.$cloned_ids[0]; $this->Conn->Query($sql); - + // 5. substitute id of item being cloned with clone id $this->Application->SetVar($event->getPrefixSpecial().'_id', $cloned_ids[0]); $selected_ids = explode(',', $this->Application->RecallVar($event->getPrefixSpecial().'_selected_ids')); $selected_ids[ array_search($object->GetID(), $selected_ids) ] = $cloned_ids[0]; $this->Application->StoreVar($event->getPrefixSpecial().'_selected_ids', implode(',', $selected_ids)); - + // 6. delete original item from temp table $temp_handler->DeleteItems($event->Prefix, $event->Special, Array($object->GetID())); } } } - + /** * Sets default expiration based on module setting * @@ -1800,23 +1802,23 @@ function OnPreCreate(&$event) { parent::OnPreCreate($event); - + if ($event->status == erSUCCESS) { $object =& $event->getObject(); $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 * @@ -1828,11 +1830,11 @@ 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);