forked from MapComplete/MapComplete
		
	Feature: include username of the person closing a maproulette note
This commit is contained in:
		
							parent
							
								
									c26b9ae7f7
								
							
						
					
					
						commit
						b47d0f8c6a
					
				
					 4 changed files with 14 additions and 10 deletions
				
			
		| 
						 | 
					@ -1,9 +1,12 @@
 | 
				
			||||||
import Constants from "../Models/Constants"
 | 
					import Constants from "../Models/Constants"
 | 
				
			||||||
 | 
					import { SpecialVisualizationState } from "../UI/SpecialVisualization"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface MaprouletteTask {
 | 
					export interface MaprouletteTask {
 | 
				
			||||||
    name: string
 | 
					    name: string
 | 
				
			||||||
    description: string
 | 
					    description: string
 | 
				
			||||||
    instruction: string
 | 
					    instruction: string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class Maproulette {
 | 
					export default class Maproulette {
 | 
				
			||||||
    public static readonly defaultEndpoint = "https://maproulette.org/api/v2"
 | 
					    public static readonly defaultEndpoint = "https://maproulette.org/api/v2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +27,7 @@ export default class Maproulette {
 | 
				
			||||||
        4: "Deleted",
 | 
					        4: "Deleted",
 | 
				
			||||||
        5: "Already fixed",
 | 
					        5: "Already fixed",
 | 
				
			||||||
        6: "Too_Hard",
 | 
					        6: "Too_Hard",
 | 
				
			||||||
        9: "Disabled",
 | 
					        9: "Disabled"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    public static singleton = new Maproulette()
 | 
					    public static singleton = new Maproulette()
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
| 
						 | 
					@ -78,6 +81,7 @@ export default class Maproulette {
 | 
				
			||||||
    async closeTask(
 | 
					    async closeTask(
 | 
				
			||||||
        taskId: number,
 | 
					        taskId: number,
 | 
				
			||||||
        status = Maproulette.STATUS_FIXED,
 | 
					        status = Maproulette.STATUS_FIXED,
 | 
				
			||||||
 | 
					        state: SpecialVisualizationState,
 | 
				
			||||||
        options?: {
 | 
					        options?: {
 | 
				
			||||||
            comment?: string
 | 
					            comment?: string
 | 
				
			||||||
            tags?: string
 | 
					            tags?: string
 | 
				
			||||||
| 
						 | 
					@ -86,13 +90,16 @@ export default class Maproulette {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ): Promise<void> {
 | 
					    ): Promise<void> {
 | 
				
			||||||
        console.log("Maproulette: setting", `${this.endpoint}/task/${taskId}/${status}`, options)
 | 
					        console.log("Maproulette: setting", `${this.endpoint}/task/${taskId}/${status}`, options)
 | 
				
			||||||
 | 
					        options ??= {}
 | 
				
			||||||
 | 
					        const userdetails = state.osmConnection.userDetails.data
 | 
				
			||||||
 | 
					        options.tags = `MapComplete MapComplete:${state.theme.id}; userid: ${userdetails?.uid}; username: ${userdetails?.name}`
 | 
				
			||||||
        const response = await fetch(`${this.endpoint}/task/${taskId}/${status}`, {
 | 
					        const response = await fetch(`${this.endpoint}/task/${taskId}/${status}`, {
 | 
				
			||||||
            method: "PUT",
 | 
					            method: "PUT",
 | 
				
			||||||
            headers: {
 | 
					            headers: {
 | 
				
			||||||
                "Content-Type": "application/json",
 | 
					                "Content-Type": "application/json",
 | 
				
			||||||
                apiKey: this.apiKey,
 | 
					                apiKey: this.apiKey
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            body: options !== undefined ? JSON.stringify(options) : undefined,
 | 
					            body: JSON.stringify(options)
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        if (response.status !== 204) {
 | 
					        if (response.status !== 204) {
 | 
				
			||||||
            console.log(`Failed to close task: ${response.status}`)
 | 
					            console.log(`Failed to close task: ${response.status}`)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,8 +38,7 @@
 | 
				
			||||||
  async function apply() {
 | 
					  async function apply() {
 | 
				
			||||||
    const maproulette_id = tags.data[maproulette_id_key] ?? tags.data.mr_taskId ?? tags.data.id
 | 
					    const maproulette_id = tags.data[maproulette_id_key] ?? tags.data.mr_taskId ?? tags.data.id
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      await Maproulette.singleton.closeTask(Number(maproulette_id), Number(statusToSet), {
 | 
					      await Maproulette.singleton.closeTask(Number(maproulette_id), Number(statusToSet), state, {
 | 
				
			||||||
        tags: `MapComplete MapComplete:${state.theme.id}`,
 | 
					 | 
				
			||||||
        comment: feedback,
 | 
					        comment: feedback,
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      tags.data["mr_taskStatus"] = Maproulette.STATUS_MEANING[Number(statusToSet)]
 | 
					      tags.data["mr_taskStatus"] = Maproulette.STATUS_MEANING[Number(statusToSet)]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,6 @@ export interface PointImportFlowArguments extends ImportFlowArguments {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
 | 
					export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
 | 
				
			||||||
    public readonly startCoordinate: [number, number]
 | 
					    public readonly startCoordinate: [number, number]
 | 
				
			||||||
    private readonly _originalFeature: Feature<Point>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(
 | 
					    constructor(
 | 
				
			||||||
        state: SpecialVisualizationState,
 | 
					        state: SpecialVisualizationState,
 | 
				
			||||||
| 
						 | 
					@ -29,7 +28,6 @@ export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
 | 
				
			||||||
        originalFeatureTags: UIEventSource<Record<string, string>>
 | 
					        originalFeatureTags: UIEventSource<Record<string, string>>
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
        super(state, args, tagsToApply, originalFeatureTags)
 | 
					        super(state, args, tagsToApply, originalFeatureTags)
 | 
				
			||||||
        this._originalFeature = originalFeature
 | 
					 | 
				
			||||||
        this.startCoordinate = GeoOperations.centerpointCoordinates(originalFeature)
 | 
					        this.startCoordinate = GeoOperations.centerpointCoordinates(originalFeature)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,7 +78,7 @@ export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
 | 
				
			||||||
            originalFeatureTags.ping()
 | 
					            originalFeatureTags.ping()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let maproulette_id = originalFeatureTags.data[this.args.maproulette_id]
 | 
					        const maproulette_id = originalFeatureTags.data[this.args.maproulette_id]
 | 
				
			||||||
        if (maproulette_id !== undefined) {
 | 
					        if (maproulette_id !== undefined) {
 | 
				
			||||||
            if (this.state.featureSwitchIsTesting.data) {
 | 
					            if (this.state.featureSwitchIsTesting.data) {
 | 
				
			||||||
                console.log(
 | 
					                console.log(
 | 
				
			||||||
| 
						 | 
					@ -90,7 +88,7 @@ export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                console.log("Marking maproulette task as fixed")
 | 
					                console.log("Marking maproulette task as fixed")
 | 
				
			||||||
                await Maproulette.singleton.closeTask(Number(maproulette_id))
 | 
					                await Maproulette.singleton.closeTask(Number(maproulette_id), Maproulette.STATUS_FIXED, this.state)
 | 
				
			||||||
                originalFeatureTags.data["mr_taskStatus"] = "Fixed"
 | 
					                originalFeatureTags.data["mr_taskStatus"] = "Fixed"
 | 
				
			||||||
                originalFeatureTags.ping()
 | 
					                originalFeatureTags.ping()
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@ export default class TagApplyButton implements AutoAction, SpecialVisualization
 | 
				
			||||||
            const maproulette_id = tags.data[maproulette_id_key]
 | 
					            const maproulette_id = tags.data[maproulette_id_key]
 | 
				
			||||||
            const maproulette_feature = state.indexedFeatures.featuresById.data.get(maproulette_id)
 | 
					            const maproulette_feature = state.indexedFeatures.featuresById.data.get(maproulette_id)
 | 
				
			||||||
            const maproulette_task_id = Number(maproulette_feature.properties.mr_taskId)
 | 
					            const maproulette_task_id = Number(maproulette_feature.properties.mr_taskId)
 | 
				
			||||||
            await Maproulette.singleton.closeTask(maproulette_task_id, Maproulette.STATUS_FIXED, {
 | 
					            await Maproulette.singleton.closeTask(maproulette_task_id, Maproulette.STATUS_FIXED, state, {
 | 
				
			||||||
                comment: "Tags are copied onto " + targetId + " with MapComplete",
 | 
					                comment: "Tags are copied onto " + targetId + " with MapComplete",
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
            maproulette_feature.properties["mr_taskStatus"] = "Fixed"
 | 
					            maproulette_feature.properties["mr_taskStatus"] = "Fixed"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue