public static void CheckControlRight(string board_id, string discussion_id, string letter_id, ref string delta_flags, DynamicTableEntity entity) { Subtype subtype = LetterConverter.GetSubtype(entity); if (subtype == Subtype.d) { Util.ThrowUnauthorizedException("不能修改的類型。"); } bool auto_unreport = false; if (SandFlags.Check(delta_flags, SandFlags.MT_PERMANENT_DELETE, 1)) { GroupStore.CheckPermanentDeleteRight(board_id, discussion_id, letter_id, entity); auto_unreport = true; } int delete_num = SandFlags.GetNumber(delta_flags, SandFlags.MT_DELETED); if (delete_num == 1 || delete_num == -1) { //bool is_undelete = SandFlags.Check(delta_flags, SandFlags.DELETED_FLAG_CHAR, -1); int user_level = GroupStore.CheckDeleteRight(board_id, discussion_id, letter_id, entity, delete_num == -1); //delta_flags = SandFlags.DELETED_FLAG_CHAR + (delete_num * user_level).ToString(); //delta_flags = SandFlags.MultiplyNumber(delta_flags, SandFlags.DELETED_FLAG_CHAR, user_level); delta_flags = SandFlags.Operate(delta_flags, new FlagOperation { type = FlagOperation.Type.Multiply, MetaTitle = SandFlags.MT_DELETED, N = user_level }); string current_flags = entity.GetFlags(); SandFlags.CheckLevel(current_flags, SandFlags.MT_DELETED, delta_flags); auto_unreport = true; } if (SandFlags.Check(delta_flags, SandFlags.MT_REPORT, 0)) { GroupStore.CheckUnreportRight(board_id); } else if (SandFlags.Check(delta_flags, SandFlags.MT_REPORT, 1)) { } else { if (auto_unreport) { delta_flags = SandFlags.Add(delta_flags, SandFlags.MT_REPORT, 0); } } }
public static void OperateFlags(this DynamicTableEntity entity, FlagOperation op) { string flags = entity.GetFlags(); //flags = SandFlags.Merge(flags, delta_flags); flags = SandFlags.Operate(flags, op); if (flags.Length > 0) { entity["flags2"] = new EntityProperty(flags); } else { entity.Properties.Remove("flags2"); } }