@@ -647,6 +647,7 @@ - (void)toggleEditMode:(BOOL)saveChanges
647647 if (saveChanges) {
648648 OTMLoginManager* loginManager = [SharedAppDelegate loginManager ];
649649 OTMUser *user = loginManager.loggedInUser ;
650+ NSMutableDictionary *writableData = [self getWritableFieldData ];
650651
651652 if (self.data [@" plot" ][@" id" ] == nil ) {
652653 // No 'id' parameter indicates that this is a new plot/tree
@@ -655,7 +656,8 @@ - (void)toggleEditMode:(BOOL)saveChanges
655656 [[AZWaitingOverlayController sharedController ] showOverlayWithTitle: @" Saving" ];
656657
657658 NSArray *pendingImageData = [self stripPendingImageData ];
658- [[[OTMEnvironment sharedEnvironment ] api ] addPlotWithOptionalTree: data user: user callback: ^(id json, NSError *err){
659+ [[[OTMEnvironment sharedEnvironment ] api ] addPlotWithOptionalTree: writableData user: user
660+ callback: ^(id json, NSError *err){
659661
660662 [[AZWaitingOverlayController sharedController ] hideOverlay ];
661663
@@ -678,7 +680,7 @@ - (void)toggleEditMode:(BOOL)saveChanges
678680 [[AZWaitingOverlayController sharedController ] showOverlayWithTitle: @" Saving" ];
679681
680682 NSArray *pendingImageData = [self stripPendingImageData ];
681- [[[OTMEnvironment sharedEnvironment ] api ] updatePlotAndTree: data user: user callback: ^(id json, NSError *err){
683+ [[[OTMEnvironment sharedEnvironment ] api ] updatePlotAndTree: writableData user: user callback: ^(id json, NSError *err){
682684
683685 [[AZWaitingOverlayController sharedController ] hideOverlay ];
684686
@@ -715,6 +717,30 @@ - (void)toggleEditMode:(BOOL)saveChanges
715717 [self resetHeaderPosition ];
716718}
717719
720+ - (NSMutableDictionary *)getWritableFieldData {
721+ NSMutableDictionary *writableData = [[NSMutableDictionary alloc ] init ];
722+ NSDictionary *fieldData = [[OTMEnvironment sharedEnvironment ] fieldData ];
723+
724+ for (NSString *model in @[@" plot" , @" tree" ]) {
725+ NSDictionary *modelData = self.data [model];
726+
727+ if (modelData != nil ) {
728+ NSMutableDictionary *writableModelData = [[NSMutableDictionary alloc ] init ];
729+
730+ for (NSString *key in modelData) {
731+ NSString *fieldKey = [NSString stringWithFormat: @" %@ .%@ " , model, key];
732+ NSDictionary *field = fieldData[fieldKey];
733+
734+ if (field != nil && ([key isEqualToString: @" id" ] || [field[@" can_write" ] boolValue ])) {
735+ writableModelData[key] = modelData[key];
736+ }
737+ }
738+ writableData[model] = writableModelData;
739+ }
740+ }
741+ return writableData;
742+ }
743+
718744- (void )addNewUdf : (NSNotification *)notification
719745{
720746 NSDictionary *notificationData = (NSDictionary *)[notification object ];
0 commit comments