Exemple #1
0
    def get_html(self):
        contest_data = self.get_data()
        card_content_table = TABLE(_class="bordered centered highlight",
                                   _style="line-height: 20px")
        tbody = TBODY()

        for contest in contest_data:
            tbody.append(
                TR(
                    TD(contest[0]),
                    TD(
                        IMG(_src=current.get_static_url("images/%s_small.png" %
                                                        str(contest[1])),
                            _class="parent-site-icon-small")),
                    TD(
                        A(I(_class="fa fa-external-link-square"),
                          _class=
                          "btn-floating btn-small accent-4 green view-contest",
                          _href=contest[2],
                          _target="_blank"))))

        card_content_table.append(tbody)

        card_html = BaseCard.get_html(
            self,
            **dict(card_title=self.card_title,
                   card_content=card_content_table,
                   cta_links=self.get_cta_html(),
                   card_color_class="white",
                   card_text_color_class="black-text"))
        return card_html
Exemple #2
0
def formstyle_table_inline(form, fields, *args, **kwargs):
    """
        Old Default Eden Form Style (In-Line Labels)
        - still used by IFRC
    """

    def render_row(row_id, label, widget, comment, hidden=False):

        _class = "hide" if hidden else None

        row = TR(TD(label, _class="w2p_fl"),
                 TD(widget),
                 _id=row_id,
                 _class=_class)

        if comment:
            row.append(TD(DIV(_class="tooltip",
                              _title="%s|%s" % (label, comment)),
                          _class="w2p_fc"))
        return row

    if args:
        # Old-style, single-row call:
        hidden = kwargs.get("hidden", False)
        return render_row(form, fields, args[0], args[1], hidden=hidden)
    else:
        # New-style, all-rows call:
        parent = TABLE()
        for row_id, label, widget, comment in fields:
            row = render_row(row_id, label, widget, comment)
            parent.append(row)
        return parent
def render_trending_table(caption, problems, column_name, user_id):
    """
        Create trending table from the rows
    """
    T = current.T

    table = TABLE(_class="bordered centered")
    thead = THEAD(
        TR(TH(T("Problem")), TH(T("Recent Submissions")), TH(column_name)))
    table.append(thead)
    tbody = TBODY()

    for problem in problems:
        tr = TR()
        link_class = get_link_class(problem[0], user_id)
        link_title = (" ".join(link_class.split("-"))).capitalize()

        tr.append(
            TD(
                problem_widget(problem[1]["name"], problem[0], link_class,
                               link_title)))
        tr.append(TD(problem[1]["total_submissions"]))
        tr.append(TD(len(problem[1]["users"]) + \
                     len(problem[1]["custom_users"])))
        tbody.append(tr)

    table.append(tbody)
    table = DIV(H5(caption, _class="center"), HR(), table)

    return table
def compute_trending_table(submissions_list, table_type, user_id=None):
    """
        Create trending table from the rows

        @params submission_list (Rows): Submissions to be considered
        @params table_type (String): friends / global
        @params user_id (Long): ID of signed in user else None
    """

    T = current.T
    if table_type == "friends":
        table_header = T("Trending among friends")
        column_name = T("Friends")
    else:
        table_header = T("Trending Globally")
        column_name = T("Users")

    if len(submissions_list) == 0:
        table = TABLE(_class="bordered centered")
        thead = THEAD(
            TR(TH(T("Problem")), TH(T("Recent Submissions")), TH(column_name)))
        table.append(thead)
        table.append(TBODY(TR(TD("Not enough data to show", _colspan=3))))
        return table

    # Sort the rows according to the number of users
    # who solved the problem in last PAST_DAYS
    custom_compare = lambda x: (len(x[1]["users"]) + \
                                len(x[1]["custom_users"]),
                                x[1]["total_submissions"])

    problems_dict = {}
    for submission in submissions_list:
        plink = submission.problem_link
        pname = submission.problem_name
        uid = submission.user_id
        cid = submission.custom_user_id

        if plink not in problems_dict:
            problems_dict[plink] = {
                "name": pname,
                "total_submissions": 0,
                "users": set([]),
                "custom_users": set([])
            }

        pdict = problems_dict[plink]
        pdict["total_submissions"] += 1
        if uid:
            pdict["users"].add(uid)
        else:
            pdict["custom_users"].add(cid)

    trending_problems = sorted(problems_dict.items(),
                               key=custom_compare,
                               reverse=True)

    return render_trending_table(table_header,
                                 trending_problems[:current.PROBLEMS_PER_PAGE],
                                 column_name, user_id)
Exemple #5
0
def get_day_attempts():
    ids = request.vars['ids']
    ids = ids.split(',')
    myrows = db((db.attempt_log.id.belongs(ids)) &
                (db.attempt_log.step == db.steps.id)).select()
    attempt_list = TABLE(TR(TH('Prompt'),
                            TH('My Response'),
                            TH('Score'),
                            TH('Review Level'),
                            TH('New Content'),
                            TH('Related Badges')
                            ),
                         _class='table')
    for row in myrows:
        mytags = db.steps(row['attempt_log']['step']).tags
        mybadges = [db(db.badges.tag == t).select().first().badge_name
                    for t in mytags]
        mybadges_string = ', '.join(mybadges)
        myclass = 'success' if row.attempt_log.score > 0.01 else 'warning'
        attempt_list.append(TR(TD(row.steps.prompt, _class=myclass),
                               TD(row.attempt_log.user_response,
                                  _class=myclass),
                               TD(row.attempt_log.score, _class=myclass),
                               TD(row.attempt_log.selection_category,
                                  _class=myclass),
                               TD(row.attempt_log.new_content, _class=myclass),
                               TD(mybadges_string, _class=myclass)
                               ))
    return attempt_list
Exemple #6
0
def formstyle_table_inline(form, fields, *args, **kwargs):
    """
        Old Default Eden Form Style (In-Line Labels)
        - still used by IFRC
    """
    def render_row(row_id, label, widget, comment, hidden=False):

        _class = "hide" if hidden else None

        row = TR(TD(label, _class="w2p_fl"),
                 TD(widget),
                 _id=row_id,
                 _class=_class)

        if comment:
            row.append(
                TD(DIV(_class="tooltip", _title="%s|%s" % (label, comment)),
                   _class="w2p_fc"))
        return row

    if args:
        # Old-style, single-row call:
        hidden = kwargs.get("hidden", False)
        return render_row(form, fields, args[0], args[1], hidden=hidden)
    else:
        # New-style, all-rows call:
        parent = TABLE()
        for row_id, label, widget, comment in fields:
            row = render_row(row_id, label, widget, comment)
            parent.append(row)
        return parent
    def get_html(self):
        contest_data = self.get_data()
        card_content_table = TABLE(_class="bordered centered highlight",
                                   _style="line-height: 20px")
        tbody = TBODY()

        for contest in contest_data:
            try:
                start_time = datetime.datetime.strptime(
                    contest["start_time"], "%Y-%m-%dT%H:%M:%S.000Z")
                end_time = datetime.datetime.strptime(
                    contest["end_time"], "%Y-%m-%dT%H:%M:%S.000Z")

            except Exception as e:
                print "Unable to parse datetime", contest
                start_time = datetime.datetime.strptime(
                    contest["start_time"], "%Y-%m-%d %H:%M:%S %Z")
                end_time = datetime.datetime.strptime(contest["end_time"],
                                                      "%Y-%m-%d %H:%M:%S %Z")

            start_time += datetime.timedelta(minutes=330)
            end_time += datetime.timedelta(minutes=330)

            contest["start_time"] = start_time
            contest["end_time"] = end_time

            tbody.append(
                TR(
                    TD(contest["name"]),
                    TD(
                        IMG(_src=current.get_static_url(
                            "images/%s_small.png" %
                            str(contest["site"].lower())),
                            _class="parent-site-icon-small")),
                    TD(
                        A(I(_class="fa fa-external-link-square"),
                          _class=
                          "btn-floating btn-small accent-4 green view-contest",
                          _href=contest["url"],
                          _target="_blank")),
                    TD(utilities.get_reminder_button(contest))))

        card_content_table.append(tbody)

        card_html = BaseCard.get_html(
            self,
            **dict(card_title=self.card_title,
                   card_content=card_content_table,
                   cta_links=self.get_cta_html(),
                   card_color_class="white",
                   card_text_color_class="black-text"))
        return card_html
Exemple #8
0
def formstyle_table(form, fields, *args, **kwargs):
    """
        Old Default Eden Form Style (TRs not DIVs, Labels above the Inputs)
        - still used by IFRC
    """
    def render_row(row_id, label, widget, comment, hidden=False):

        row = []
        _class = "hide" if hidden else None

        # Label on the 1st row
        row.append(
            TR(
                TD(
                    label,
                    _class="w2p_fl",
                ),
                TD(""),
                _id=row_id + "1",
                _class=_class,
            ))

        # Widget & Comment on the 2nd Row
        row.append(
            TR(
                widget,
                TD(
                    comment,
                    _class="w2p_fc",
                ),
                _id=row_id,
                _class=_class,
            ))

        return tuple(row)

    if args:
        # Old-style, single-row call:
        hidden = kwargs.get("hidden", False)
        return render_row(form, fields, args[0], args[1], hidden=hidden)
    else:
        # New-style, all-rows call:
        parent = TABLE()
        for row_id, label, widget, comment in fields:
            rows = render_row(row_id, label, widget, comment)
            parent.append(rows[0])
            parent.append(rows[1])
        return parent
Exemple #9
0
    def html(self):
        """
            Produce a HTML representation of the grouped table

            @return: a TABLE instance
        """

        table = TABLE()

        self.html_render_table_header(table)

        tbody = TBODY()
        self.html_render_group(tbody, self.data)
        table.append(tbody)

        self.html_render_table_footer(table)

        return table
Exemple #10
0
    def get_html(self):
        submissions_data = self.get_data()

        card_content_table = TABLE(_class="bordered highlight")
        tbody = TBODY()

        for row in submissions_data:
            user_record = utilities.get_user_records([row[0]], "id", "id",
                                                     True)
            tr = TR(
                TD(
                    A(user_record.first_name + " " + user_record.last_name,
                      _href=URL("user",
                                "profile",
                                args=user_record.stopstalk_handle,
                                extension=False),
                      _target="_blank")))

            td = TD()
            for site in row[1]:
                if site == "total":
                    continue
                else:
                    td.append(
                        SPAN(IMG(_src=current.get_static_url(
                            "images/%s_small.png" % str(site).lower()),
                                 _class="parent-site-icon-very-small"),
                             " " + str(row[1][site]),
                             _style="padding-right: 10px;"))
            tr.append(td)
            tbody.append(tr)

        card_content_table.append(tbody)

        card_html = BaseCard.get_html(
            self,
            **dict(card_title=self.card_title,
                   card_content=card_content_table,
                   cta_links=self.get_cta_html(),
                   card_color_class="white",
                   card_text_color_class="black-text"))
        return card_html
Exemple #11
0
def formstyle_table(form, fields, *args, **kwargs):
    """
        Old Default Eden Form Style (TRs not DIVs, Labels above the Inputs)
        - still used by IFRC
    """

    def render_row(row_id, label, widget, comment, hidden=False):

        row = []
        _class = "hide" if hidden else None

        # Label on the 1st row
        row.append(TR(TD(label, _class="w2p_fl"),
                      TD(""),
                      _id = row_id + "1",
                      _class=_class))

        # Widget & Comment on the 2nd Row
        row.append(TR(widget,
                      TD(comment, _class="w2p_fc"),
                      _id=row_id,
                      _class=_class))

        return tuple(row)

    if args:
        # Old-style, single-row call:
        hidden = kwargs.get("hidden", False)
        return render_row(form, fields, args[0], args[1], hidden=hidden)
    else:
        # New-style, all-rows call:
        parent = TABLE()
        for row_id, label, widget, comment in fields:
            rows = render_row(row_id, label, widget, comment)
            parent.append(rows[0])
            parent.append(rows[1])
        return parent
Exemple #12
0
    def pdf(self, r, **attr):
        """
            Generate the PDF

            Args:
                r: the S3Request instance
                attr: controller attributes
        """

        T = current.T

        db = current.db
        s3db = current.s3db

        # Look up the report organisation
        logo = None
        org_id, org_label = self.get_report_organisation(r)
        if org_id:
            # Look up the root organisation's logo
            otable = s3db.org_organisation
            rotable = otable.with_alias("root_organisation")
            join = rotable.on(rotable.id == otable.root_organisation)
            field = rotable.logo
            row = db(otable.id == org_id).select(
                field,
                join=join,
                limitby=(0, 1),
            ).first()
            if row and row.logo:
                if field.uploadfolder:
                    path = field.uploadfolder
                else:
                    path = os.path.join(current.request.folder, 'uploads')
                logo = os.path.join(path, row.logo)

        # Look up the report programme
        prog_id, prog_label = self.get_report_programme(r)

        # Extract the HR records
        data, pictures = self.extract(r.resource)

        # Construct the header
        title = T("Official Volunteer List")
        header = TABLE(_class="no-grid", )
        trow = TR()
        if logo:
            trow.append(
                TD(
                    IMG(_src=logo, _width="80"),
                    _rowspan=3 if prog_id else 2,
                ))
        trow.append(TD(H4(title), _colspan=3))
        header.append(trow)
        if org_id:
            header.append(TR(TD(H5(org_label), _colspan=3)))
        if prog_id:
            header.append(TR(TD(prog_label, _colspan=3)))
        header.append(TR(TD()))

        # Should we show the branch column?
        branches = set(row["_row"]["hrm_human_resource.organisation_id"]
                       for row in data.rows)
        if org_id:
            show_branch = len(branches) > 1
            org_repr = s3db.org_OrganisationRepresent(
                show_link=False,
                parent=False,
                acronym=True,
            )
        else:
            show_branch = True
            org_repr = r.table.organisation_id.represent
        org_repr.bulk(list(branches))

        # Construct the table header
        labels = TR(
            TH(T("Picture")),
            TH(T("Name")),
            TH(T("Last Name")),
            TH(T("National ID")),
            TH(T("Volunteer ID")),
            TH(T("Signature")),
        )
        if not prog_id:
            labels.insert(1, TH(T("Program")))
        if show_branch:
            labels.insert(1, TH(T("Branch")))

        # Build the table
        body = TABLE(labels, _class="repeat-header shrink-to-fit")

        # Add the data rows
        for row in data.rows:

            raw = row._row

            # Picture
            picture = pictures.get(raw["pr_person.pe_id"])
            if picture:
                picture = IMG(
                    _src=picture,
                    _width=80,
                )
            else:
                picture = ""

            # Name
            name = s3_format_fullname(
                fname=raw["pr_person.first_name"],
                mname=raw["pr_person.middle_name"],
                lname="",
                truncate=False,
            )

            # Build the row
            trow = TR(
                TD(picture),
                TD(name),
                TD(row["pr_person.last_name"]),
                TD(row["pr_national_id_identity.value"]),
                TD(row["hrm_human_resource.code"]),
                TD(),
            )
            if not prog_id:
                trow.insert(1, TD(row["hrm_programme_hours.programme_id"]))
            if show_branch:
                trow.insert(
                    1, TD(org_repr(raw["hrm_human_resource.organisation_id"])))
            body.append(trow)

        footer = DIV()

        from s3.codecs.pdf import EdenDocTemplate, S3RL_PDF

        doc = EdenDocTemplate(title=title)
        printable_width = doc.printable_width

        get_html_flowable = S3RL_PDF().get_html_flowable

        header_flowable = get_html_flowable(header, printable_width)
        body_flowable = get_html_flowable(body, printable_width)
        footer_flowable = get_html_flowable(footer, printable_width)

        # Build the PDF
        doc.build(
            header_flowable,
            body_flowable,
            footer_flowable,
        )
        filename = "siglist.pdf"

        # Return the generated PDF
        response = current.response
        response.headers["Content-Type"] = contenttype(".pdf")
        disposition = "attachment; filename=\"%s\"" % filename
        response.headers["Content-disposition"] = disposition

        return doc.output.getvalue()
def render_table(submissions, duplicates=[]):
    """
        Create the HTML table from submissions

        @param submissions (Dict): Dictionary of submissions to display
        @param duplicates (List): List of duplicate user ids

        @return (TABLE):  HTML TABLE containing all the submissions
    """

    status_dict = {"AC": "Accepted",
                   "WA": "Wrong Answer",
                   "TLE": "Time Limit Exceeded",
                   "MLE": "Memory Limit Exceeded",
                   "RE": "Runtime Error",
                   "CE": "Compile Error",
                   "SK": "Skipped",
                   "HCK": "Hacked",
                   "OTH": "Others"}

    table = TABLE(_class="striped centered")
    table.append(THEAD(TR(TH("User Name"),
                          TH("Site"),
                          TH("Site Handle"),
                          TH("Time of submission"),
                          TH("Problem"),
                          TH("Language"),
                          TH("Status"),
                          TH("Points"),
                          TH("View/Download Code"))))

    tbody = TBODY()
    for submission in submissions:
        span = SPAN()

        if submission.user_id:
            person_id = submission.user_id
        else:
            person_id = submission.custom_user_id

            # Check if the given custom_user is a duplicate
            # We need to do this because there might be a case
            # when a duplicate custom_user is created and then
            # his name or institute is changed
            for duplicate in duplicates:
                if duplicate[1] == person_id and duplicate[0]:
                    person_id = current.db.custom_friend(duplicate[0])
                    break

            span = SPAN(_class="orange tooltipped",
                        data={"position": "right",
                              "delay": "50",
                              "tooltip": "Custom User"},
                        _style="cursor: pointer; " + \
                                "float:right; " + \
                                "height:10px; " + \
                                "width:10px; " + \
                                "border-radius: 50%;")

        tr = TR()
        append = tr.append
        append(TD(DIV(span,
                      A(person_id.first_name + " " + person_id.last_name,
                        _href=URL("user", "profile",
                                  args=person_id.stopstalk_handle,
                                  extension=False),
                        _target="_blank"))))
        append(TD(submission.site))
        append(TD(A(submission.site_handle,
                    _href=get_link(submission.site,
                                   submission.site_handle),
                    _target="_blank")))
        append(TD(submission.time_stamp))
        append(TD(A(submission.problem_name,
                    _href=URL("problems",
                              "index",
                              vars={"pname": submission.problem_name,
                                    "plink": submission.problem_link},
                              extension=False),
                    _target="_blank")))
        append(TD(submission.lang))
        append(TD(IMG(_src=URL("static",
                               "images/" + submission.status + ".jpg",
                               extension=False),
                      _title=status_dict[submission.status],
                      _alt=status_dict[submission.status],
                      _style="height: 25px; width: 25px;")))
        append(TD(submission.points))

        if submission.view_link:
            if current.auth.is_logged_in():
                td = TD(A("View",
                          _href=submission.view_link,
                          _class="btn waves-light waves-effect",
                          _style="background-color: #FF5722",
                          _target="_blank"), " ")
                if submission.site != "HackerEarth":
                    td.append(A("Download",
                                _class="download-submission-button btn waves-light waves-effect",
                                _style="background-color: #2196F3",
                                _target="_blank",
                                data={"view-link": submission.view_link,
                                      "site": submission.site}))
                append(td)
            else:
                append(TD(A("View",
                            _class="btn tooltipped disabled",
                            _style="background-color: #FF5722",
                            _target="_blank",
                            data={"position": "bottom",
                                  "delay": "50",
                                  "tooltip": "Login to View"}),
                          " ",
                          A("Download",
                            _class="btn tooltipped disabled",
                            _style="background-color: #2196F3",
                            _target="_blank",
                            data={"position": "bottom",
                                  "delay": "50",
                                  "tooltip": "Login to Download"})))
        else:
            append(TD())

        tbody.append(tr)
    table.append(tbody)

    return table
def render_table(submissions, duplicates=[]):
    """
        Create the HTML table from submissions

        @param submissions (Dict): Dictionary of submissions to display
        @param duplicates (List): List of duplicate user ids

        @return (TABLE):  HTML TABLE containing all the submissions
    """

    status_dict = {"AC": "Accepted",
                   "WA": "Wrong Answer",
                   "TLE": "Time Limit Exceeded",
                   "MLE": "Memory Limit Exceeded",
                   "RE": "Runtime Error",
                   "CE": "Compile Error",
                   "SK": "Skipped",
                   "HCK": "Hacked",
                   "PS": "Partially Solved",
                   "OTH": "Others"}

    table = TABLE(_class="bordered centered")
    table.append(THEAD(TR(TH("Name"),
                          TH("Site Profile"),
                          TH("Time of submission"),
                          TH("Problem"),
                          TH("Language"),
                          TH("Status"),
                          TH("Points"),
                          TH("View/Download Code"))))

    tbody = TBODY()
    # Dictionary to optimize lookup for solved and unsolved problems
    # Multiple lookups in the main set is bad
    plink_to_class = {}

    for submission in submissions:
        span = SPAN()

        if submission.user_id:
            person_id = submission.user_id
        else:
            person_id = submission.custom_user_id

            # Check if the given custom_user is a duplicate
            # We need to do this because there might be a case
            # when a duplicate custom_user is created and then
            # his name or institute is changed
            for duplicate in duplicates:
                if duplicate[1] == person_id and duplicate[0]:
                    person_id = current.db.custom_friend(duplicate[0])
                    break

            span = SPAN(_class="orange tooltipped",
                        data={"position": "right",
                              "delay": "50",
                              "tooltip": "Custom User"},
                        _style="cursor: pointer; " + \
                                "float:right; " + \
                                "height:10px; " + \
                                "width:10px; " + \
                                "border-radius: 50%;")

        tr = TR()
        append = tr.append
        append(TD(DIV(span,
                      A(person_id.first_name + " " + person_id.last_name,
                        _href=URL("user", "profile",
                                  args=person_id.stopstalk_handle,
                                  extension=False),
                        _target="_blank"))))
        append(TD(A(IMG(_src=URL("static",
                                 "images/" + \
                                 submission.site.lower() + \
                                 "_small.png"),
                        _style="height: 30px; width: 30px;"),
                    _href=current.get_profile_url(submission.site,
                                                  submission.site_handle),
                    _target="_blank")))

        append(TD(submission.time_stamp, _class="stopstalk-timestamp"))

        link_class = ""
        plink = submission.problem_link
        if plink_to_class.has_key(plink):
            link_class = plink_to_class[plink]
        else:
            if plink in current.solved_problems:
                link_class = "solved-problem"
            elif plink in current.unsolved_problems:
                link_class = "unsolved-problem"
            else:
                # This will prevent from further lookups
                link_class = "unattempted-problem"
            plink_to_class[plink] = link_class

        link_title = (" ".join(link_class.split("-"))).capitalize()

        append(TD(A(submission.problem_name,
                    _href=URL("problems",
                              "index",
                              vars={"pname": submission.problem_name,
                                    "plink": submission.problem_link},
                              extension=False),
                    _class=link_class,
                    _title=link_title,
                    _target="_blank")))
        append(TD(submission.lang))
        append(TD(IMG(_src=URL("static",
                               "images/" + submission.status + ".jpg",
                               extension=False),
                      _title=status_dict[submission.status],
                      _alt=status_dict[submission.status],
                      _style="height: 25px; width: 25px;")))
        append(TD(submission.points))

        if submission.view_link:
            submission_data = {"view-link": submission.view_link,
                               "site": submission.site}
            button_class = "btn waves-light waves-effect"
            if current.auth.is_logged_in():
                if submission.site != "HackerEarth":
                    td = TD(BUTTON("View",
                                   _class="view-submission-button " + button_class,
                                   _style="background-color: #FF5722",
                                   data=submission_data),
                            " ",
                            BUTTON("Download",
                                   _class="download-submission-button " + \
                                          button_class,
                                   _style="background-color: #2196F3",
                                   data=submission_data))
                else:
                    td = TD(A("View",
                              _href=submission.view_link,
                              _class="btn waves-light waves-effect",
                              _style="background-color: #FF5722",
                              _target="_blank"))
                append(td)
            else:
                append(TD(BUTTON("View",
                                 _class="btn tooltipped disabled",
                                 _style="background-color: #FF5722",
                                 data={"position": "bottom",
                                       "delay": "50",
                                       "tooltip": "Login to View"}),
                          " ",
                          BUTTON("Download",
                                 _class="btn tooltipped disabled",
                                 _style="background-color: #2196F3",
                                 data={"position": "bottom",
                                       "delay": "50",
                                       "tooltip": "Login to Download"})))
        else:
            append(TD())

        tbody.append(tr)
    table.append(tbody)

    return table
def render_table(submissions, duplicates=[], user_id=None):
    """
        Create the HTML table from submissions

        @param submissions (Dict): Dictionary of submissions to display
        @param duplicates (List): List of duplicate user ids

        @return (TABLE):  HTML TABLE containing all the submissions
    """

    T = current.T
    status_dict = {
        "AC": "Accepted",
        "WA": "Wrong Answer",
        "TLE": "Time Limit Exceeded",
        "MLE": "Memory Limit Exceeded",
        "RE": "Runtime Error",
        "CE": "Compile Error",
        "SK": "Skipped",
        "HCK": "Hacked",
        "PS": "Partially Solved",
        "OTH": "Others"
    }

    table = TABLE(_class="bordered centered submissions-table")
    table.append(
        THEAD(
            TR(TH(T("Name")),
               TH(T("Site Profile")), TH(T("Time of submission")),
               TH(T("Problem")), TH(T("Language")), TH(T("Status")),
               TH(T("Points")), TH(T("View/Download Code")))))

    tbody = TBODY()
    # Dictionary to optimize lookup for solved and unsolved problems
    # Multiple lookups in the main set is bad
    plink_to_class = {}

    for submission in submissions:
        span = SPAN()

        if submission.user_id:
            person_id = submission.user_id
        else:
            person_id = submission.custom_user_id

            # Check if the given custom_user is a duplicate
            # We need to do this because there might be a case
            # when a duplicate custom_user is created and then
            # his name or institute is changed
            for duplicate in duplicates:
                if duplicate[1] == person_id and duplicate[0]:
                    person_id = current.db.custom_friend(duplicate[0])
                    break

            span = SPAN(_class="orange tooltipped",
                        data={"position": "right",
                              "delay": "50",
                              "tooltip": T("Custom User")},
                        _style="cursor: pointer; " + \
                                "float:right; " + \
                                "height:10px; " + \
                                "width:10px; " + \
                                "border-radius: 50%;")

        tr = TR()
        append = tr.append
        append(
            TD(
                DIV(
                    span,
                    A(person_id.first_name + " " + person_id.last_name,
                      _href=URL("user",
                                "profile",
                                args=person_id.stopstalk_handle,
                                extension=False),
                      _class="submission-user-name",
                      _target="_blank"))))
        append(TD(A(IMG(_src=current.get_static_url("images/" + \
                                            submission.site.lower() + \
                                            "_small.png"),
                        _style="height: 30px; width: 30px;"),
                    _class="submission-site-profile",
                    _href=current.get_profile_url(submission.site,
                                                  submission.site_handle),
                    _target="_blank")))

        append(TD(submission.time_stamp, _class="stopstalk-timestamp"))

        link_class = ""
        plink = submission.problem_link
        if plink_to_class.has_key(plink):
            link_class = plink_to_class[plink]
        else:
            link_class = get_link_class(plink, user_id)
            plink_to_class[plink] = link_class

        link_title = (" ".join(link_class.split("-"))).capitalize()

        append(
            TD(
                problem_widget(submission.problem_name,
                               submission.problem_link, link_class,
                               link_title)))
        append(TD(submission.lang))
        append(
            TD(
                IMG(_src=current.get_static_url("images/" + submission.status +
                                                ".jpg"),
                    _title=status_dict[submission.status],
                    _alt=status_dict[submission.status],
                    _class="status-icon")))
        append(TD(submission.points))

        if submission.view_link:
            submission_data = {
                "view-link": submission.view_link,
                "site": submission.site
            }
            button_class = "btn waves-light waves-effect"
            if current.auth.is_logged_in():
                if submission.site != "HackerEarth":
                    td = TD(BUTTON(T("View"),
                                   _class="view-submission-button " + button_class,
                                   _style="background-color: #FF5722",
                                   data=submission_data),
                            " ",
                            BUTTON(T("Download"),
                                   _class="download-submission-button " + \
                                          button_class,
                                   _style="background-color: #2196F3",
                                   data=submission_data))
                else:
                    td = TD(
                        A(T("View"),
                          _href=submission.view_link,
                          _class="btn waves-light waves-effect",
                          _style="background-color: #FF5722",
                          _target="_blank"))
                append(td)
            else:
                append(
                    TD(
                        BUTTON(T("View"),
                               _class="btn tooltipped disabled",
                               _style="background-color: #FF5722",
                               data={
                                   "position": "bottom",
                                   "delay": "50",
                                   "tooltip": T("Login to View")
                               }), " ",
                        BUTTON(T("Download"),
                               _class="btn tooltipped disabled",
                               _style="background-color: #2196F3",
                               data={
                                   "position": "bottom",
                                   "delay": "50",
                                   "tooltip": T("Login to Download")
                               })))
        else:
            append(TD())

        tbody.append(tr)
    table.append(tbody)

    return table
Exemple #16
0
    def pdf(self, r, **attr):
        """
            Generate the PDF

            @param r: the S3Request instance
            @param attr: controller attributes
        """

        T = current.T

        db = current.db
        s3db = current.s3db

        # Look up the report organisation
        logo = None
        org_id, org_label = self.get_report_organisation(r)
        if org_id:
            # Look up the root organisation's logo
            otable = s3db.org_organisation
            rotable = otable.with_alias("root_organisation")
            join = rotable.on(rotable.id == otable.root_organisation)
            field = rotable.logo
            row = db(otable.id == org_id).select(field,
                                                 join = join,
                                                 limitby = (0, 1),
                                                 ).first()
            if row and row.logo:
                if field.uploadfolder:
                    path = field.uploadfolder
                else:
                    path = os.path.join(current.request.folder, 'uploads')
                logo = os.path.join(path, row.logo)

        # Look up the report programme
        prog_id, prog_label = self.get_report_programme(r)

        # Extract the HR records
        data, pictures = self.extract(r.resource)

        # Construct the header
        title = T("Official Volunteer List")
        header = TABLE(_class = "no-grid",
                       )
        trow = TR()
        if logo:
            trow.append(TD(IMG(_src=logo, _width="80"),
                           _rowspan = 3 if prog_id else 2,
                           ))
        trow.append(TD(H4(title), _colspan = 3))
        header.append(trow)
        if org_id:
            header.append(TR(TD(H5(org_label), _colspan = 3)))
        if prog_id:
            header.append(TR(TD(prog_label, _colspan = 3)))
        header.append(TR(TD()))

        # Should we show the branch column?
        branches = set(row["_row"]["hrm_human_resource.organisation_id"] for row in data.rows)
        if org_id:
            show_branch = len(branches) > 1
            org_repr = s3db.org_OrganisationRepresent(show_link = False,
                                                      parent = False,
                                                      acronym = True,
                                                      )
        else:
            show_branch = True
            org_repr = r.table.organisation_id.represent
        org_repr.bulk(list(branches))

        # Construct the table header
        labels = TR(TH(T("Picture")),
                    TH(T("Name")),
                    TH(T("Last Name")),
                    TH(T("National ID")),
                    TH(T("Volunteer ID")),
                    TH(T("Signature")),
                    )
        if not prog_id:
            labels.insert(1, TH(T("Program")))
        if show_branch:
            labels.insert(1, TH(T("Branch")))

        # Build the table
        body = TABLE(labels, _class="repeat-header shrink-to-fit")

        # Add the data rows
        for row in data.rows:

            raw = row._row

            # Picture
            picture = pictures.get(raw["pr_person.pe_id"])
            if picture:
                picture = IMG(_src=picture,
                              _width=80,
                              )
            else:
                picture = ""

            # Name
            name = s3_format_fullname(fname = raw["pr_person.first_name"],
                                      mname = raw["pr_person.middle_name"],
                                      lname = "",
                                      truncate = False,
                                      )

            # Build the row
            trow = TR(TD(picture),
                      TD(name),
                      TD(row["pr_person.last_name"]),
                      TD(row["pr_national_id_identity.value"]),
                      TD(row["hrm_human_resource.code"]),
                      TD(),
                      )
            if not prog_id:
                trow.insert(1, TD(row["hrm_programme_hours.programme_id"]))
            if show_branch:
                trow.insert(1, TD(org_repr(raw["hrm_human_resource.organisation_id"])))
            body.append(trow)

        footer = DIV()

        from s3.codecs.pdf import EdenDocTemplate, S3RL_PDF

        doc = EdenDocTemplate(title=title)
        printable_width = doc.printable_width

        get_html_flowable = S3RL_PDF().get_html_flowable

        header_flowable = get_html_flowable(header, printable_width)
        body_flowable = get_html_flowable(body, printable_width)
        footer_flowable = get_html_flowable(footer, printable_width)

        # Build the PDF
        doc.build(header_flowable,
                  body_flowable,
                  footer_flowable,
                  )
        filename = "siglist.pdf"

        # Return the generated PDF
        response = current.response
        response.headers["Content-Type"] = contenttype(".pdf")
        disposition = "attachment; filename=\"%s\"" % filename
        response.headers["Content-disposition"] = disposition

        return doc.output.getvalue()
def render_table(submissions, duplicates=[]):
    """
        Create the HTML table from submissions
    """

    status_dict = {"AC": "Accepted",
                   "WA": "Wrong Answer",
                   "TLE": "Time Limit Exceeded",
                   "MLE": "Memory Limit Exceeded",
                   "RE": "Runtime Error",
                   "CE": "Compile Error",
                   "SK": "Skipped",
                   "HCK": "Hacked",
                   "OTH": "Others"}

    table = TABLE(_class="striped centered")
    table.append(THEAD(TR(TH("User Name"),
                          TH("Site"),
                          TH("Site Handle"),
                          TH("Time of submission"),
                          TH("Problem"),
                          TH("Language"),
                          TH("Status"),
                          TH("Points"),
                          TH("View Code"))))

    tbody = TBODY()
    for submission in submissions:
        tr = TR()
        append = tr.append
        span = SPAN()

        if submission.user_id:
            person_id = submission.user_id
        else:
            person_id = submission.custom_user_id

            # Check if the given custom_user is a duplicate
            # We need to do this because there might be a case
            # when a duplicate custom_user is created and then
            # his name or institute is changed
            for f in duplicates:
                if f[1] == person_id and f[0] != None:
                    person_id = current.db.custom_friend(f[0])
                    break
            span = SPAN(_class="orange tooltipped",
                        data={"position": "right",
                              "delay": "50",
                              "tooltip": "Custom User"},
                        _style="cursor: pointer; " + \
                                "float:right; " + \
                                "height:10px; " + \
                                "width:10px; " + \
                                "border-radius: 50%;")

        append(TD(DIV(span,
                      A(person_id.first_name + " " + person_id.last_name,
                        _href=URL("user", "profile",
                                  args=[person_id.stopstalk_handle],
                                  extension=False),
                        _target="_blank"))))
        append(TD(submission.site))
        append(TD(A(submission.site_handle,
                    _href=get_link(submission.site,
                                   submission.site_handle),
                    _target="_blank")))
        append(TD(submission.time_stamp))
        append(TD(A(submission.problem_name,
                    _href=URL("problems",
                              "index",
                              vars={"pname": submission.problem_name,
                                    "plink": submission.problem_link},
                              extension=False),
                    _target="_blank")))
        append(TD(submission.lang))
        append(TD(IMG(_src=URL("static",
                               "images/" + submission.status + ".jpg",
                               extension=False),
                      _title=status_dict[submission.status],
                      _alt=status_dict[submission.status],
                      _style="height: 25px; width: 25px;")))
        append(TD(submission.points))

        if submission.view_link:
            append(TD(A("View",
                        _href=submission.view_link,
                        _class="btn waves-light waves-effect",
                        _style="background-color: #FF5722",
                        _target="_blank")))
        else:
            append(TD())

        tbody.append(tr)
    table.append(tbody)
    return table
Exemple #18
0
def render_user_editorials_table(user_editorials,
                                 user_id=None,
                                 logged_in_user_id=None,
                                 read_editorial_class=""):
    """
        Render User editorials table

        @param user_editorials (Rows): Rows object of the editorials
        @param user_id (Number): For which user is the listing happening
        @param logged_in_user_id (Number): Which use is logged in
        @param read_editorial_class (String): HTML class for GA tracking

        @return (HTML): HTML table representing the user editorials
    """

    db = current.db
    atable = db.auth_user
    ptable = db.problem
    T = current.T

    user_ids = set([x.user_id for x in user_editorials])
    users = db(atable.id.belongs(user_ids)).select()
    user_mappings = {}
    for user in users:
        user_mappings[user.id] = user

    query = (ptable.id.belongs([x.problem_id for x in user_editorials]))
    problem_records = db(query).select(ptable.id, ptable.name, ptable.link)
    precords = {}
    for precord in problem_records:
        precords[precord.id] = {"name": precord.name, "link": precord.link}

    table = TABLE(_class="centered user-editorials-table")
    thead = THEAD(
        TR(TH(T("Problem")), TH(T("Editorial By")), TH(T("Added on")),
           TH(T("Votes")), TH()))
    tbody = TBODY()
    color_mapping = {"accepted": "green", "rejected": "red", "pending": "blue"}

    for editorial in user_editorials:
        if logged_in_user_id != 1 and user_id != editorial.user_id and editorial.verification != "accepted":
            continue

        user = user_mappings[editorial.user_id]
        record = precords[editorial.problem_id]
        number_of_votes = len(
            editorial.votes.split(",")) if editorial.votes else 0
        link_class = get_link_class(record["link"], logged_in_user_id)
        link_title = (" ".join(link_class.split("-"))).capitalize()
        tr = TR(
            TD(
                problem_widget(record["name"], record["link"], link_class,
                               link_title)))

        if logged_in_user_id is not None and \
           (editorial.user_id == logged_in_user_id or
            logged_in_user_id == 1):
            tr.append(TD(A(user.first_name + " " + user.last_name,
                         _href=URL("user",
                                   "profile",
                                   args=user.stopstalk_handle)),
                         " ",
                         DIV(editorial.verification.capitalize(),
                             _class="verification-badge " + \
                                    color_mapping[editorial.verification])))
        else:
            tr.append(
                TD(
                    A(user.first_name + " " + user.last_name,
                      _href=URL("user", "profile",
                                args=user.stopstalk_handle))))

        tr.append(TD(editorial.added_on))
        vote_class = ""
        if logged_in_user_id is not None and \
           str(logged_in_user_id) in set(editorial.votes.split(",")):
            vote_class = "red-text"
        tr.append(
            TD(
                DIV(SPAN(I(_class="fa fa-heart " + vote_class),
                         _class="love-editorial",
                         data={"id": editorial.id}),
                    " ",
                    DIV(number_of_votes,
                        _class="love-count",
                        _style="margin-left: 5px;"),
                    _style="display: inline-flex;")))

        actions_td = TD(
            A(I(_class="fa fa-eye fa-2x"),
              _href=URL("problems",
                        "read_editorial",
                        args=editorial.id,
                        extension=False),
              _class="btn btn-primary tooltipped " + read_editorial_class,
              _style="background-color: #13AA5F;",
              data={
                  "position": "bottom",
                  "delay": 40,
                  "tooltip": T("Read Editorial")
              }))
        if logged_in_user_id is not None and \
           (user.id == logged_in_user_id or logged_in_user_id == 1) and \
           editorial.verification != "accepted":
            actions_td.append(
                BUTTON(
                    I(_class="fa fa-trash fa-2x"),
                    _style="margin-left: 2%;",
                    _class="btn btn-primary red tooltipped delete-editorial",
                    data={
                        "position": "bottom",
                        "delay": 40,
                        "tooltip": T("Delete Editorial"),
                        "id": editorial.id
                    }))
        tr.append(actions_td)

        tbody.append(tr)

    table.append(thead)
    table.append(tbody)

    return table
Exemple #19
0
def render_table(submissions):
    """
        Create the HTML table from submissions
    """

    status_dict = {"AC": "Accepted",
                   "WA": "Wrong Answer",
                   "TLE": "Time Limit Exceeded",
                   "MLE": "Memory Limit Exceeded",
                   "RE": "Runtime Error",
                   "CE": "Compile Error",
                   "SK": "Skipped",
                   "HCK": "Hacked",
                   "OTH": "Others"}

    table = TABLE(_class="striped centered")
    table.append(THEAD(TR(TH("User Name"),
                          TH("Site"),
                          TH("Site Handle"),
                          TH("Time of submission"),
                          TH("Problem"),
                          TH("Language"),
                          TH("Status"),
                          TH("Points"),
                          TH("View Code"))))

    tbody = TBODY()
    for submission in submissions:
        tr = TR()
        append = tr.append

        person_id = submission.custom_user_id
        if submission.user_id:
            person_id = submission.user_id

        append(TD(A(person_id.first_name + " " + person_id.last_name,
                    _href=URL("user", "profile",
                              args=[submission.stopstalk_handle]),
                    _target="_blank")))
        append(TD(submission.site))
        append(TD(A(submission.site_handle,
                    _href=get_link(submission.site,
                                   submission.site_handle),
                    _target="_blank")))
        append(TD(submission.time_stamp))
        append(TD(A(submission.problem_name,
                    _href=URL("problems",
                              "index",
                              vars={"pname": submission.problem_name,
                                    "plink": submission.problem_link}),
                    _target="_blank")))
        append(TD(submission.lang))
        append(TD(IMG(_src=URL("static",
                               "images/" + submission.status + ".jpg"),
                      _title=status_dict[submission.status],
                      _style="height: 25px; width: 25px;")))
        append(TD(submission.points))

        if submission.view_link:
            append(TD(A("View",
                        _href=submission.view_link,
                        _class="btn waves-light waves-effect",
                        _style="background-color: #FF5722",
                        _target="_blank")))
        else:
            append(TD())

        tbody.append(tr)
    table.append(tbody)
    return table
def render_table(submissions, duplicates=[]):
    """
        Create the HTML table from submissions
    """

    status_dict = {
        "AC": "Accepted",
        "WA": "Wrong Answer",
        "TLE": "Time Limit Exceeded",
        "MLE": "Memory Limit Exceeded",
        "RE": "Runtime Error",
        "CE": "Compile Error",
        "SK": "Skipped",
        "HCK": "Hacked",
        "OTH": "Others"
    }

    table = TABLE(_class="striped centered")
    table.append(
        THEAD(
            TR(TH("User Name"), TH("Site"), TH("Site Handle"),
               TH("Time of submission"), TH("Problem"), TH("Language"),
               TH("Status"), TH("Points"), TH("View Code"))))

    tbody = TBODY()
    for submission in submissions:
        tr = TR()
        append = tr.append
        span = SPAN()

        if submission.user_id:
            person_id = submission.user_id
        else:
            person_id = submission.custom_user_id

            # Check if the given custom_user is a duplicate
            # We need to do this because there might be a case
            # when a duplicate custom_user is created and then
            # his name or institute is changed
            for f in duplicates:
                if f[1] == person_id and f[0] != None:
                    person_id = current.db.custom_friend(f[0])
                    break
            span = SPAN(_class="orange tooltipped",
                        data={"position": "right",
                              "delay": "50",
                              "tooltip": "Custom User"},
                        _style="cursor: pointer; " + \
                                "float:right; " + \
                                "height:10px; " + \
                                "width:10px; " + \
                                "border-radius: 50%;")

        append(
            TD(
                DIV(
                    span,
                    A(person_id.first_name + " " + person_id.last_name,
                      _href=URL("user",
                                "profile",
                                args=[person_id.stopstalk_handle],
                                extension=False),
                      _target="_blank"))))
        append(TD(submission.site))
        append(
            TD(
                A(submission.site_handle,
                  _href=get_link(submission.site, submission.site_handle),
                  _target="_blank")))
        append(TD(submission.time_stamp))
        append(
            TD(
                A(submission.problem_name,
                  _href=URL("problems",
                            "index",
                            vars={
                                "pname": submission.problem_name,
                                "plink": submission.problem_link
                            },
                            extension=False),
                  _target="_blank")))
        append(TD(submission.lang))
        append(
            TD(
                IMG(_src=URL("static",
                             "images/" + submission.status + ".jpg",
                             extension=False),
                    _title=status_dict[submission.status],
                    _alt=status_dict[submission.status],
                    _style="height: 25px; width: 25px;")))
        append(TD(submission.points))

        if submission.view_link:
            append(
                TD(
                    A("View",
                      _href=submission.view_link,
                      _class="btn waves-light waves-effect",
                      _style="background-color: #FF5722",
                      _target="_blank")))
        else:
            append(TD())

        tbody.append(tr)
    table.append(tbody)
    return table
Exemple #21
0
    def formatted(self, retry=False):
        """
            Formatted version of this report

            @param retry: add retry-action for sending to CWA

            @returns: a FORM containing
                      - the QR-code
                      - human-readable report details
                      - actions to download PDF, or retry sending to CWA
        """

        T = current.T
        table = current.s3db.disease_case_diagnostics

        # Personal Details
        data_repr = TABLE()
        data = self.data
        if not any(k in data for k in ("fn", "ln", "dob")):
            data_repr.append(
                TR(
                    TD(T("Person Tested")),
                    TD(T("anonymous"), _class="cwa-data"),
                ))
        else:
            labels = {
                "fn": T("First Name"),
                "ln": T("Last Name"),
                "dob": T("Date of Birth"),
            }
            for k in ("ln", "fn", "dob"):
                value = data[k]
                if k == "dob":
                    value = self.to_local_dtfmt(value)
                data_repr.append(
                    TR(
                        TD(labels.get(k)),
                        TD(value, _class="cwa-data"),
                    ))

        # Test Station, date and result
        field = table.site_id
        if field.represent:
            data_repr.append(
                TR(
                    TD(field.label),
                    TD(
                        field.represent(self.site_id),
                        _class="cwa-data",
                    ),
                ))
        field = table.probe_date
        if field.represent:
            data_repr.append(
                TR(
                    TD(field.label),
                    TD(
                        field.represent(self.probe_date),
                        _class="cwa-data",
                    ),
                ))
        field = table.result
        if field.represent:
            data_repr.append(
                TR(
                    TD(field.label),
                    TD(
                        field.represent(self.result),
                        _class="cwa-data",
                    ),
                ))

        # Details
        details = DIV(
            H5(T("Details")),
            data_repr,
            _class="cwa-details",
        )

        # QR Code
        title = T("Code for %(app)s") % CWA
        qrcode = DIV(
            s3_qrcode_represent(self.get_link(), show_value=False),
            DIV(title, _class="cwa-qrcode-title"),
            _class="cwa-qrcode",
        )
        if retry:
            qrcode.add_class("hide")

        # Form buttons
        buttons = [
            BUTTON(
                T("Download PDF"),
                _class="tiny primary button cwa-pdf",
                _type="button",
            ),
        ]
        if retry:
            buttons[0].add_class("hide")
            buttons.append(
                BUTTON(
                    T("Retry sending to %(app)s") % CWA,
                    _class="tiny alert button cwa-retry",
                    _type="button",
                ))

        # Generate form key
        formurl = URL(
            c="disease",
            f="case_diagnostics",
            args=[self.result_id],
        )
        formkey = uuid.uuid4().hex

        # Store form key in session
        session = current.session
        keyname = "_formkey[testresult/%s]" % self.result_id
        session[keyname] = session.get(keyname, [])[-9:] + [formkey]

        form = FORM(
            DIV(
                DIV(
                    details,
                    qrcode,
                    _class="small-12 columns",
                ),
                _class="row form-row",
            ),
            DIV(
                DIV(
                    buttons,
                    _class="small-12 columns",
                ),
                _class="row form-row",
            ),
            hidden={
                "formurl": formurl,
                "cwadata": json.dumps(self.data),
                "_formkey": formkey,
            },
        )

        return form
Exemple #22
0
def drk_org_rheader(r, tabs=None):
    """ ORG custom resource headers """

    if r.representation != "html":
        # Resource headers only used in interactive views
        return None

    from s3 import s3_rheader_resource, s3_rheader_tabs, S3ResourceHeader
    from .uioptions import get_ui_options

    s3db = current.s3db

    tablename, record = s3_rheader_resource(r)
    if tablename != r.tablename:
        resource = s3db.resource(tablename, id=record.id)
    else:
        resource = r.resource

    rheader = None
    rheader_fields = []

    if record:
        T = current.T
        record_id = record.id

        ui_options = get_ui_options()
        is_admin = current.auth.s3_has_role("ADMIN")

        if tablename == "org_organisation":

            table = resource.table

            if record.root_organisation == record_id:
                branch = False
            else:
                branch = True

            # Custom tabs
            tabs = [(T("Basic Details"), None),
                    (T("Branches"), "branch"),
                    (T("Facilities"), "facility"),
                    (T("Staff & Volunteers"), "human_resource"),
                    #(T("Projects"), "project"),
                    (T("Counseling Themes"), "response_theme"),
                    ]

            if is_admin or ui_options.get("response_themes_needs"):
                # Ability to manage org-specific need types
                # as they are used in themes:
                tabs.append((T("Counseling Reasons"), "need"))

            if not branch and \
               (is_admin or \
                ui_options.get("case_document_templates") and \
                current.auth.s3_has_role("ORG_ADMIN")):
                tabs.append((T("Document Templates"), "document"))

            rheader_tabs = s3_rheader_tabs(r, tabs)

            # Custom header
            from gluon import TABLE, TR, TH, TD
            rheader = DIV()

            # Name
            record_data = TABLE(TR(TH("%s: " % table.name.label),
                                   record.name,
                                   ),
                                )

            # Parent Organisation
            if branch:
                btable = s3db.org_organisation_branch
                query = (btable.branch_id == record_id) & \
                        (btable.organisation_id == table.id)
                row = current.db(query).select(table.id,
                                               table.name,
                                               limitby = (0, 1),
                                               ).first()
                if row:
                    record_data.append(TR(TH("%s: " % T("Branch of")),
                                          A(row.name, _href=URL(args=[row.id, "read"])),
                                          ))

            # Website as link
            if record.website:
                record_data.append(TR(TH("%s: " % table.website.label),
                                      A(record.website, _href=record.website)))

            logo = s3db.org_organisation_logo(record)
            if logo:
                rheader.append(TABLE(TR(TD(logo),
                                        TD(record_data),
                                        )))
            else:
                rheader.append(record_data)

            rheader.append(rheader_tabs)
            return rheader

        elif tablename == "org_facility":

            if not tabs:
                tabs = [(T("Basic Details"), None),
                        ]

            rheader_fields = [["name", "email"],
                              ["organisation_id", "phone1"],
                              ["location_id", "phone2"],
                              ]

        rheader = S3ResourceHeader(rheader_fields, tabs)(r,
                                                         table=resource.table,
                                                         record=record,
                                                         )
    return rheader
Exemple #23
0
def render_table(submissions):
    """
        Create the HTML table from submissions
    """

    status_dict = {
        "AC": "Accepted",
        "WA": "Wrong Answer",
        "TLE": "Time Limit Exceeded",
        "MLE": "Memory Limit Exceeded",
        "RE": "Runtime Error",
        "CE": "Compile Error",
        "SK": "Skipped",
        "HCK": "Hacked",
        "OTH": "Others"
    }

    table = TABLE(_class="striped centered")
    table.append(
        THEAD(
            TR(TH("User Name"), TH("Site"), TH("Site Handle"),
               TH("Time of submission"), TH("Problem"), TH("Language"),
               TH("Status"), TH("Points"), TH("View Code"))))

    tbody = TBODY()
    for submission in submissions:
        tr = TR()
        append = tr.append

        person_id = submission.custom_user_id
        if submission.user_id:
            person_id = submission.user_id

        append(
            TD(
                A(person_id.first_name + " " + person_id.last_name,
                  _href=URL("user",
                            "profile",
                            args=[submission.stopstalk_handle]),
                  _target="_blank")))
        append(TD(submission.site))
        append(
            TD(
                A(submission.site_handle,
                  _href=get_link(submission.site, submission.site_handle),
                  _target="_blank")))
        append(TD(submission.time_stamp))
        append(
            TD(
                A(submission.problem_name,
                  _href=URL("problems",
                            "index",
                            vars={
                                "pname": submission.problem_name,
                                "plink": submission.problem_link
                            }),
                  _target="_blank")))
        append(TD(submission.lang))
        append(
            TD(
                IMG(_src=URL("static", "images/" + submission.status + ".jpg"),
                    _title=status_dict[submission.status],
                    _style="height: 25px; width: 25px;")))
        append(TD(submission.points))

        if submission.view_link:
            append(
                TD(
                    A("View",
                      _href=submission.view_link,
                      _class="btn waves-light waves-effect",
                      _style="background-color: #FF5722",
                      _target="_blank")))
        else:
            append(TD())

        tbody.append(tr)
    table.append(tbody)
    return table