adamc@1009:
adamc@1009:
adamc@1022: and all () =
adamc@1022: checkOnPc;
adamc@1022: listPapers (SELECT paper.Id, paper.{{map fst M.paper}} FROM paper)
adamc@1022:
adamc@1022: and your () =
adamc@1022: me <- getLogin;
adamc@1022: listPapers (sql_query {Rows = sql_query1 {Distinct = False,
adamc@1022: From = O.joinYourPaper (sql_from_table [#Paper] paper),
adamc@1022: Where = (WHERE TRUE),
adamc@1022: GroupBy = sql_subset_all [_],
adamc@1022: Having = (WHERE TRUE),
adamc@1022: SelectFields = sql_subset [[Paper = ([Id = _] ++ map fst M.paper, _)]
adamc@1022: ++ map (fn ts => ([], ts))
adamc@1022: O.yourPaperTables],
adamc@1022: SelectExps = {}},
adamc@1022: OrderBy = sql_order_by_Nil [_],
adamc@1022: Limit = sql_no_limit,
adamc@1022: Offset = sql_no_offset})
adamc@1022:
adamc@1009: and one id =
adamc@1012: let
adamc@1012: fun newReview r =
adamc@1012: me <- getLogin;
adamc@1012: checkPaper id;
adamc@1012: dml (insert review ({Paper = sql_inject id, User = sql_inject me.Id}
adamc@1012: ++ ensql M.review r M.reviewFolder));
adamc@1012: one id
adamc@1009:
adamc@1012: fun saveReview r =
adamc@1012: me <- getLogin;
adamc@1012: checkPaper id;
adamc@1012: dml (update [map fst M.review] ! (ensql M.review r M.reviewFolder)
adamc@1012: review (WHERE T.Paper = {[id]} AND T.User = {[me.Id]}));
adamc@1012: one id
adamc@1012: in
adamc@1012: me <- getLogin;
adamc@1012: checkPaper id;
adamc@1012: ro <- oneOrNoRows (SELECT paper.{{map fst M.paper}}, octet_length(paper.Document) AS N
adamc@1012: FROM paper
adamc@1012: WHERE paper.Id = {[id]});
adamc@1012: authors <- queryX (SELECT user.Nam
adamc@1012: FROM authorship
adamc@1012: JOIN user ON authorship.User = user.Id
adamc@1012: WHERE authorship.Paper = {[id]})
adamc@1012: (fn r =>
{[r.User.Nam]}
);
adamc@1012: myReview <- oneOrNoRows1 (SELECT review.{{map fst M.review}}
adamc@1012: FROM review
adamc@1012: WHERE review.User = {[me.Id]}
adamc@1012: AND review.Paper = {[id]});
adamc@1012: case ro of
adamc@1012: None => error Paper not found!
adamc@1012: | Some r => return
adamc@1012:
adamc@1012: else
adamc@1012: Download paper ({[r.N]} bytes)}
adamc@1011:
adamc@1012:
adamc@1011:
adamc@1012: {case myReview of
adamc@1012: None =>
adamc@1012:
Add Your Review
adamc@1012:
adamc@1012:
adamc@1012:
adamc@1012: | Some myReview =>
adamc@1012:
Edit Your Review
adamc@1012:
adamc@1012:
adamc@1012: }
adamc@1012:
adamc@1012: end
adamc@1009:
adamc@1009: and download id =
adamc@1009: checkPaper id;
adamc@1009: ro <- oneOrNoRows (SELECT paper.Document
adamc@1009: FROM paper
adamc@1009: WHERE paper.Id = {[id]});
adamc@1009: case ro of
adamc@1009: None => error Paper not found!
adamc@1009: | Some r => returnBlob r.Paper.Document (blessMime "application/pdf")
adamc@1009:
adamc@1001: end