annotation_dashboard/commit

FIXED: broken user dashboard page

authorJacco van Ossenbruggen
Tue Sep 23 16:02:26 2014 +0200
committerJacco van Ossenbruggen
Tue Sep 23 16:02:26 2014 +0200
commit1b9a16b70b4831a98d7adfbb3f6ee82123df64be
tree8bb2e32a12ffdfe6072828b0b36bef36774f7d49
parent7326f1c4a488372dc22606154b2fe5d21b3e6284
Diff style: patch stat
diff --git a/applications/dashboard_user_page.pl b/applications/dashboard_user_page.pl
index d23bdc7..f29967c 100644
--- a/applications/dashboard_user_page.pl
+++ b/applications/dashboard_user_page.pl
@@ -2,6 +2,8 @@
 
 % from SWI-Prolog libraries:
 :- use_module(library(apply)).
+:- use_module(library(option)).
+:- use_module(library(settings)).
 :- use_module(library(http/http_dispatch)).
 :- use_module(library(http/http_parameters)).
 :- use_module(library(http/html_write)).
@@ -32,19 +34,22 @@ http_dashboard_user(Request) :-
 	user_page(User, []).
 
 user_page(User, Options0) :-
-	findall(Prop, user_property(User, Prop), Props),
+	findall(Prop, user_property(User, Prop), UserProps),
 	find_annotations_by_user(User, Annotations),
 	partition(is_tag, Annotations, Tags, Judgements),
 	maplist(rdf_get_annotation_target, Tags, Targets),
 	sort(Targets, Objects),
-	Options = [annotations(Annotations),
-		   judgements(Judgements),
-		   lazy(true),
-		   user(User),
-		   showTag(mine),
-		   image_link_predicate(http_mediumscale) |
-		   Options0
-		  ],
+	Extra = [annotations(Annotations),
+		 judgements(Judgements),
+		 lazy(true),
+		 user(User),
+		 targets(Objects),
+		 showTag(mine),
+		 image_link_predicate(http_mediumscale)
+		],
+	merge_options(Extra, Options0, Options),
+	find_user_stats(User, UserStats, Options),
+	merge_options(UserStats, UserProps, Props),
 	reply_html_page(
 	    [title(User),
 	     meta([name(viewport),
diff --git a/components/dashboard/show_objects.pl b/components/dashboard/show_objects.pl
index 020d237..c208d1d 100644
--- a/components/dashboard/show_objects.pl
+++ b/components/dashboard/show_objects.pl
@@ -3,49 +3,49 @@
 	  ]).
 
 :- use_module(library(apply)).
-:- use_module(library(lists)).
 :- use_module(library(option)).
 :- use_module(library(http/html_write)).
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(oa_annotation)).
 :- use_module(applications(annotation)).
 :- use_module(components(dashboard/show_annotations)).
-:- use_module(library(dashboard_util)).
 
 show_objects(Targets,Options) -->
-	{ true,
-	  option(task(Task), Options),
-	  rdf_has(Task, ann_ui:taskUI, UI),
-	  get_metafields(UI, [], MetadataFields),
-	  get_anfields(UI, [], [], AnnotationFields),
-	  NewOptions = [
-	      ui(UI),
-	      metadata_fields(MetadataFields),
-	      annotation_fields(AnnotationFields) |
-	      Options
-	  ]
+	{ get_annotion_options(Options, NewOptions)
 	},
 	html(
 	    [div([class(row)],
 		 [div([],
-		      [\annotation_page_body([targets(Targets), media_class('col-xs-6')|NewOptions])
+		      [\annotation_page_body([targets(Targets),
+					      media_class('col-xs-6')|NewOptions])
 		      ])
 		 ])
 	    ]).
+
+get_annotion_options(Options, NewOptions) :-
+	option(task(Task), Options), !,
+	rdf_has(Task, ann_ui:taskUI, UI),
+	get_metafields(UI, [], MetadataFields),
+	get_anfields(UI, [], [], AnnotationFields),
+	ExtraOptions = [
+	    ui(UI),
+	    metadata_fields(MetadataFields),
+	    annotation_fields(AnnotationFields)
+	],
+	merge_options(ExtraOptions, Options, NewOptions).
+
+get_annotion_options(Options, NewOptions) :-
+	merge_options([annotation_fields(dynamic),
+		       lazy(true)
+		      ],
+		      Options, NewOptions).
+
+
 match_target(T,A) :-
 	rdf_get_annotation_target(A,T).
 
 image_annotation:html_application_target_info(Options) -->
-	{ option(task(Task), Options),
-	  rdf_has(Task, ann_ui:taskUI, UI),
-	  get_metafields(UI, [], MetadataFields),
-	  get_anfields(UI, [], [], AnnotationFields),
-	  NewOptions = [
-	      ui(UI),
-	      metadata_fields(MetadataFields),
-	      annotation_fields(AnnotationFields) |
-	      Options
-	  ],
+	{ get_annotion_options(Options, NewOptions),
 	  option(target(Target), Options),
 	  option(annotations(A), Options, []),
 	  include(match_target(Target), A, Annotations)
diff --git a/lib/dashboard_util.pl b/lib/dashboard_util.pl
index ac517e0..b52e42c 100644
--- a/lib/dashboard_util.pl
+++ b/lib/dashboard_util.pl
@@ -10,6 +10,7 @@
 
 	    find_tasks/1,
 	    find_task_properties/4,
+	    find_user_stats/3,
 
 	    find_workers/1
 	  ]).
@@ -105,6 +106,25 @@ is_specific_target_annotation(A, T) :-
 	rdf_has(A, oa:hasTarget, T),
 	rdfs_individual_of(T, oa:'SpecificResource').
 
+find_user_stats(_User, Props, Options) :-
+	option(annotations(Annotations), Options),
+	option(judgements(Judgements), Options),
+	option(targets(Targets), Options),
+	include(is_specific_target_annotation, Annotations, SpecAnns),
+	length(Annotations, NrAnnotations),
+	length(Judgements, NrJudgements),
+	length(SpecAnns, NrSpecAnns),
+	length(Targets, NrWorkedOn),
+	NrObjAnnotations is NrAnnotations - NrSpecAnns,
+	CountProps = [ annotations(NrAnnotations),
+		       judgements(NrJudgements),
+		       spec_annotations(NrSpecAnns),
+		       obj_annotations(NrObjAnnotations),
+		       targets_worked_on(NrWorkedOn)
+		     ],
+	maplist(pmap, CountProps, Props).
+
+
 find_task_properties(Task, Props, Representative, Options) :-
 	option(filter(Filter), Options, ground),
 	find_annotations_by_task(Task, Annotations),
@@ -166,6 +186,7 @@ target_has_image(T) :-
 
 property_key_label(500, targets_untouched, 'works without tags').
 property_key_label(200, targets_total,     'works targeted').
+property_key_label(205, judgements,        'annotations this user judged').
 property_key_label(250, targets_complete,  'works completed').
 property_key_label(300, targets_worked_on, 'works with some tags').
 property_key_label(100, annotations,       'total annotations').