:- module(yaz_new_user, []). :- use_module(library(http/http_dispatch)). :- use_module(library(http/http_parameters)). :- use_module(library(http/http_path)). :- use_module(library(http/html_write)). :- use_module(library(http/html_head)). :- use_module(library(http/js_write)). :- use_module(library(http/http_json)). :- use_module(library(http/json)). :- use_module(user(user_db)). :- use_module(library(semweb/rdf_db)). :- use_module(components(yaz_page)). :- use_module(applications(yaz_game)). :- use_module(library(user_process)). :- use_module(library(yui3)). :- http_handler(root(p1), http_yaz_p1, []). :- http_handler(root(p2), http_yaz_p2, []). video(1, 'http://nos.nl/uitzending/32556-nos-journaal-1000-uur.html'). % video(1, % 'http://nos.nl/video/217191-het-nieuws-in-60-seconden-1430-uur.html'). video(2, 'http://www.openbeelden.nl/media/17674/Nederlandse_ontwikkelingshulp_voor_Indonesiƫ__sanering_waterhuishouding'). % video(3, % 'http://www.openbeelden.nl/media/17260/Indische_tentoonstelling_voor_de_Nederlandse_jeugd'). %% http_yaz_start(+Request) % % Emit game starting page for new users. http_yaz_p1(Request) :- http_parameters(Request, [ user(User, [optional(true), descritpion('Name of new user')]) ]), ( var(User) -> html_page(http_yaz_p1, []) ; current_user(User) -> html_page(http_yaz_p1, [user(User), message('name already exists')]) ; video(1, Video), http_link_to_id(http_yaz_game, [url(Video)], Game), password_hash(presto, PW), user_add(User, [realname(User),password(PW),allow([read(_,_),write(_,_)])]), login(User), throw(http_reply(moved_temporary(Game))) ). http_yaz_p2(Request) :- http_parameters(Request, [ user(User, [optional(true), descritpion('Name of new user')]) ]), ( var(User) -> html_page(http_yaz_p2, []) ; current_user(User) -> html_page(http_yaz_p2, [user(User), message('name already exists')]) ; video(2, Video), http_link_to_id(http_yaz_game, [url(Video)], Game), password_hash(presto, PW), user_add(User, [realname(User),password(PW),allow([read(_,_),write(_,_)])]), login(User), throw(http_reply(moved_temporary(Game))) ). html_page(F, Options) :- option(user(User), Options, ''), option(message(Message), Options, ''), reply_html_page([ title(['YAZ - new user']) ], [ \html_requires(css('yaz.css')), div('style="text-align:center;margin-top:20%"', [ h3('Enter your name:'), form(action(location_by_id(F)), [ input([type(text),name(user),value(User)]) ]), div([style='color:red;size:smalller'], Message) ]) ]). /******************************* * Admin * *******************************/ :- http_handler(yaz(admin), http_yaz_admin, []). http_yaz_admin(Request) :- http_parameters(Request, [ start(Game, [optional(true), descritpion('Id of game to start')]) ]), start_game(Game), GameObj = game(G, Video, Time, Players), findall(GameObj, waiting_game(G, Video, Time, Players), Games), reply_html_page(yaz, [ title(['YAZ - game admin']) ], [ \html_requires(css('game.css')), \html_games(Games) ]). start_game(G) :- nonvar(G), !, start_user_process(G). start_game(_G). html_games([]) --> !. html_games([game(Game, Video, Time, Players)|Gs]) --> html([hr([]), div(class(runninggame), [ h3(class(game), Game), div(class(videourl), Video), ul(class('game-players'), \html_players(Players, 0)), \html_start_link(Game, Time) ]) ]), html_games(Gs). html_players([], _) --> !. html_players([p(_P, Name, Score)|Ps], N) --> { N1 is N+1 }, html(li(class(player), [ span(class(count), [N1, '.']), span(class(name),Name), span(class(score), Score) ])), html_players(Ps, N1). html_start_link(Game, 0) --> !, { http_link_to_id(http_yaz_admin, [start(Game)], Link) }, html(a(href(Link), start)). html_start_link(_Game, Time) --> !, html(['started at: ', Time]). waiting_game(Game, Video, Time, Players) :- rdf(Game, rdf:type, pprime:'Game'), rdf(Game, opmv:used, Video), ( rdf(Game, opmv:wasStartedAt, Time) -> true ; Time = 0 ), findall(p(P,N,S), active_player(Game, P, N, S), Players), Players = [_|_].