Index: branches/5.1.x/core/units/permissions/permissions_event_handler.php =================================================================== diff -u -N -r13086 -r13161 --- branches/5.1.x/core/units/permissions/permissions_event_handler.php (.../permissions_event_handler.php) (revision 13086) +++ branches/5.1.x/core/units/permissions/permissions_event_handler.php (.../permissions_event_handler.php) (revision 13161) @@ -1,6 +1,6 @@ Application->GetVar('current_group_id'); $category_id = $this->Application->GetVar('c_id'); $permissions = $this->Application->GetVar($event->getPrefixSpecial(true)); + if (isset($permissions[$group_id])) { $permissions = $permissions[$group_id]; @@ -72,9 +73,9 @@ // not inherited if (($perm_id != 0) && ($perm_value != $permissions_helper->getPermissionValue($perm_name))) { // record was found in db & new value differs from old one => UPDATE - $update_sql[] = ' UPDATE '.$object->TableName.' - SET PermissionValue = '.$perm_value.' - WHERE (PermissionId = '.$perm_id.')'; + $update_sql[$perm_id] = ' UPDATE '.$object->TableName.' + SET PermissionValue = '.$perm_value.' + WHERE (PermissionId = '.$perm_id.')'; } if ($perm_id == 0) { @@ -177,8 +178,12 @@ function UpdatePermissions(&$event, $create_sql, $update_sql, $delete_ids) { $object =& $event->getObject(); + /* @var $object kDBItem */ if ($delete_ids) { + $action = clDELETE; + $object->Load($delete_ids[count($delete_ids) - 1]); + $delete_sql = ' DELETE FROM '.$object->TableName.' WHERE '.$object->IDField.' IN ('.implode(',', $delete_ids).')'; $this->Conn->Query($delete_sql); @@ -188,16 +193,27 @@ $create_sql = ' INSERT INTO '.$object->TableName.' VALUES '.implode(',', $create_sql); $this->Conn->Query($create_sql); + + $sql = 'SELECT MIN(' . $object->IDField . ') + FROM ' . $object->TableName; + $id = $this->Conn->GetOne($sql); + + $action = clCREATE; + $object->Load($id); } if ($update_sql) { - foreach ($update_sql as $sql) { + foreach ($update_sql as $id => $sql) { $this->Conn->Query($sql); } + + $action = clUPDATE; + $object->Load($id); + $object->SetDBField('PermissionValue', $object->GetDBField('PermissionValue') ? 0 : 1); } if ($delete_ids || $create_sql || $update_sql) { - $object->setModifiedFlag(); + $object->setModifiedFlag($action); if ($event->Name == 'OnCategorySavePermissions') { $this->Application->StoreVar('PermCache_UpdateRequired', 1);