def test_url_creation(self):
        """urlutils - test url creation"""
        self.assertEqual(create_url('http://www.a.com/search',
                                    {'recid':3, 'of':'hb&'},
                                    escape_urlargd=True),
                         'http://www.a.com/search?of=hb%26&recid=3')

        self.assertEqual(create_url('http://www.a.com/search',
                                    {'recid':3, 'of':'hb&'},
                                    escape_urlargd=False),
                         'http://www.a.com/search?of=hb&&recid=3')
示例#2
0
    def test_url_creation(self):
        """urlutils - test url creation"""
        self.assertEqual(create_url('http://www.a.com/search',
                                    {'recid':3, 'of':'hb&'},
                                    escape_urlargd=True),
                         'http://www.a.com/search?of=hb%26&recid=3')

        self.assertEqual(create_url('http://www.a.com/search',
                                    {'recid':3, 'of':'hb&'},
                                    escape_urlargd=False),
                         'http://www.a.com/search?of=hb&&recid=3')
示例#3
0
def check_records(records):
    """
    Add INSPIRE ID if missing
    """
    _init_db()
    for record in records:
        if 'INSPIRE' in record_get_field_values(record, '035', code='9'):
            ## Has already the link. Good! Let's go on.
            continue
        doi = record_get_field_value(record, '024', ind1='7', code='a')
        arxiv = record_get_field_value(record, '037', code='a')
        query = 'doi:"%s"' % doi
        if arxiv:
            query += ' or %s' % arxiv
        inspireid = run_sql("SELECT inspireid FROM doi2inspireid WHERE doi=%s", (doi,))
        if inspireid:
            inspireid = inspireid[0][0]
        else:
            sleep(2)
            inspireid = [int(elem.strip()) for elem in urlopen(create_url("http://inspirehep.net/search", {'cc': 'HEP', 'of': 'id', 'p': query})).read().strip()[1:-1].split(',') if elem.strip()]
            if len(inspireid) == 1:
                inspireid = inspireid[0]
                try:
                    run_sql("INSERT INTO doi2inspireid(doi, inspireid, creation_date) VALUES(%s, %s, NOW())", (doi, inspireid))
                except IntegrityError, err:
                    other_doi = run_sql("SELECT doi FROM doi2inspireid WHERE inspireid=%s", (inspireid, ))[0][0]
                    record.warn("This record with doi %s is connected with INSPIRE id %s which is already connected to doi %s" % (doi, inspireid, other_doi))
                    continue
            else:
                record.warn("More than one inspire ID matches this record: %s" % inspireid)
                continue
    def test_create_example_url(self, email, login_method, robot, ip, assertion=None, timeout=None, referer=None, groups=None, nickname=None):
        """
        Create a test URL to test the robot login.

        @param email: email of the user we want to login as.
        @type email: string
        @param login_method: the login_method name as specified in CFG_EXTERNAL_AUTHENTICATION.
        @type login_method: string
        @param robot: the identifier of this robot.
        @type robot: string
        @param assertion: any further data we want to send to.
        @type: json serializable mapping
        @param ip: the IP of the user.
        @type: string
        @param timeout: timeout when the URL will expire (in seconds from the Epoch)
        @type timeout: float
        @param referer: the URL where to land after successful login.
        @type referer: string
        @param groups: the list of optional group of the user.
        @type groups: list of string
        @param nickname: the optional nickname of the user.
        @type nickname: string
        @return: the URL to login as the user.
        @rtype: string
        """
        from invenio.access_control_config import CFG_EXTERNAL_AUTHENTICATION
        from invenio.urlutils import create_url
        if assertion is None:
            assertion = {}
        assertion[self.email_attribute_name] = email
        if nickname:
            assertion[self.nickname_attribute_name] = nickname
        if groups:
            assertion[self.groups_attribute_name] = self.groups_separator.join(groups)
        if timeout is None:
            timeout = time.time() + CFG_ROBOT_URL_TIMEOUT
        assertion[self.timeout_attribute_name] = timeout
        if referer is None:
            referer = CFG_SITE_URL
        if login_method is None:
            for a_login_method, details in CFG_EXTERNAL_AUTHENTICATION.iteritems():
                if details[2]:
                    login_method = a_login_method
                    break
        robot_keys = load_robot_keys()
        assertion[self.userip_attribute_name] = ip
        assertion = json.dumps(assertion)
        if self.use_zlib:
            assertion = base64.urlsafe_b64encode(compress(assertion))
        shared_key = robot_keys[login_method][robot]
        digest = self.sign(shared_key, assertion)
        return create_url("%s%s" % (CFG_SITE_SECURE_URL, "/youraccount/robotlogin"), {
            'assertion': assertion,
            'robot': robot,
            'login_method': login_method,
            'digest': digest,
            'referer': referer})
    def test_create_example_url(self, email, login_method, robot, ip, assertion=None, timeout=None, referer=None, groups=None, nickname=None):
        """
        Create a test URL to test the robot login.

        @param email: email of the user we want to login as.
        @type email: string
        @param login_method: the login_method name as specified in CFG_EXTERNAL_AUTHENTICATION.
        @type login_method: string
        @param robot: the identifier of this robot.
        @type robot: string
        @param assertion: any further data we want to send to.
        @type: json serializable mapping
        @param ip: the IP of the user.
        @type: string
        @param timeout: timeout when the URL will expire (in seconds from the Epoch)
        @type timeout: float
        @param referer: the URL where to land after successful login.
        @type referer: string
        @param groups: the list of optional group of the user.
        @type groups: list of string
        @param nickname: the optional nickname of the user.
        @type nickname: string
        @return: the URL to login as the user.
        @rtype: string
        """
        from invenio.access_control_config import CFG_EXTERNAL_AUTHENTICATION
        from invenio.urlutils import create_url
        if assertion is None:
            assertion = {}
        assertion[self.email_attribute_name] = email
        if nickname:
            assertion[self.nickname_attribute_name] = nickname
        if groups:
            assertion[self.groups_attribute_name] = self.groups_separator.join(groups)
        if timeout is None:
            timeout = time.time() + CFG_ROBOT_URL_TIMEOUT
        assertion[self.timeout_attribute_name] = timeout
        if referer is None:
            referer = CFG_SITE_URL
        if login_method is None:
            for a_login_method, details in CFG_EXTERNAL_AUTHENTICATION.iteritems():
                if details[2]:
                    login_method = a_login_method
                    break
        robot_keys = load_robot_keys()
        assertion[self.userip_attribute_name] = ip
        assertion = json.dumps(assertion)
        if self.use_zlib:
            assertion = base64.urlsafe_b64encode(compress(assertion))
        shared_key = robot_keys[login_method][robot]
        digest = self.sign(shared_key, assertion)
        return create_url("%s%s" % (CFG_SITE_SECURE_URL, "/youraccount/robotlogin"), {
            'assertion': assertion,
            'robot': robot,
            'login_method': login_method,
            'digest': digest,
            'referer': referer})
示例#6
0
 def invenio_url_for(endpoint, **values):
     try:
         return url_for(endpoint, **values)
     except BuildError:
         if endpoint.startswith('http://') or endpoint.startswith(
                 'https://'):
             return endpoint
         if endpoint.startswith('.'):
             endpoint = request.blueprint + endpoint
         return create_url('/' + '/'.join(endpoint.split('.')), values,
                           False).decode('utf-8')
def check_records(records):
    """
    Add INSPIRE ID if missing
    """
    _init_db()
    for record in records:
        if 'INSPIRE' in record_get_field_values(record, '035', code='9'):
            ## Has already the link. Good! Let's go on.
            continue
        doi = record_get_field_value(record, '024', ind1='7', code='a')
        arxiv = record_get_field_value(record, '037', code='a')
        query = 'doi:"%s"' % doi
        if arxiv:
            query += ' or %s' % arxiv
        inspireid = run_sql("SELECT inspireid FROM doi2inspireid WHERE doi=%s",
                            (doi, ))
        if inspireid:
            inspireid = inspireid[0][0]
        else:
            sleep(2)
            inspireid = [
                int(elem.strip()) for elem in urlopen(
                    create_url("http://inspirehep.net/search", {
                        'cc': 'HEP',
                        'of': 'id',
                        'p': query
                    })).read().strip()[1:-1].split(',') if elem.strip()
            ]
            if len(inspireid) == 1:
                inspireid = inspireid[0]
                try:
                    run_sql(
                        "INSERT INTO doi2inspireid(doi, inspireid, creation_date) VALUES(%s, %s, NOW())",
                        (doi, inspireid))
                except IntegrityError, err:
                    other_doi = run_sql(
                        "SELECT doi FROM doi2inspireid WHERE inspireid=%s",
                        (inspireid, ))[0][0]
                    record.warn(
                        "This record with doi %s is connected with INSPIRE id %s which is already connected to doi %s"
                        % (doi, inspireid, other_doi))
                    continue
            else:
                record.warn(
                    "More than one inspire ID matches this record: %s" %
                    inspireid)
                continue
    def tmpl_display_inbox(self, messages, infos=[], warnings=[], nb_messages=0, no_quota=0, ln=CFG_SITE_LANG):
        """
        Displays a list of messages, with the appropriate links and buttons
        @param messages: a list of tuples:
                         [(message_id,
                           user_from_id,
                           user_from_nickname,
                           subject,
                           sent_date,
                           status=]
        @param infos: a list of informations to print on top of page
        @param warnings: a list of warnings to display
        @param nb_messages: number of messages user has
        @param no_quota: 1 if user has no quota (admin) or 0 else.
        @param ln: language of the page.
        @return: the list in HTML format
        """
        _ = gettext_set_language(ln)
        dummy = 0
        inbox = self.tmpl_warning(warnings, ln)
        inbox += self.tmpl_infobox(infos, ln)
        if not(no_quota):
            inbox += self.tmpl_quota(nb_messages, ln)
        inbox += """
<table class="mailbox">
  <thead class="mailboxheader">
    <tr class="inboxheader">
      <td>%s</td>
      <td>%s</td>
      <td>%s</td>
      <td>%s</td>
    </tr>
  </thead>
  <tfoot>
    <tr style="height:0px;">
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  </tfoot>
  <tbody class="mailboxbody">""" % (_("Subject"),
                                    _("Sender"),
                                    _("Date"),
                                    _("Action"))
        if len(messages) == 0:
            inbox += """
    <tr class="mailboxrecord" style="height: 100px;">
      <td colspan="4" style="text-align: center;">
        <b>%s</b>
      </td>
    </tr>""" %(_("No messages"),)
        for (msgid, id_user_from, user_from_nick,
             subject, sent_date, status) in messages:
            if not(subject):
                subject = _("No subject")
            subject_link = create_html_link(
                                CFG_SITE_URL + '/yourmessages/display_msg',
                                {'msgid': msgid, 'ln': ln},
                                escape_html(subject))
            if user_from_nick:
                from_link = '%s'% (user_from_nick)
            else:
                from_link = get_user_info(id_user_from, ln)[2]
            action_link = create_html_link(CFG_SITE_URL + '/yourmessages/write',
                                           {'msg_reply_id': msgid, 'ln': ln},
                                           _("Reply"))
            action_link += ' '
            action_link += create_html_link(CFG_SITE_URL + '/yourmessages/delete',
                                            {'msgid': msgid, 'ln': ln},
                                            _("Delete"))
            s_date = convert_datetext_to_dategui(sent_date, ln)
            stat_style = ''
            if (status == CFG_WEBMESSAGE_STATUS_CODE['NEW']):
                stat_style = ' style="font-weight:bold"'
            inbox += """
    <tr class="mailboxrecord">
      <td%s>%s</td>
      <td>%s</td>
      <td>%s</td>
      <td>%s</td>
    </tr>""" %(stat_style, subject_link, from_link, s_date, action_link)
        inbox += """
    <tr class="mailboxfooter">
      <td colspan="2">
        <form name="newMessage" action="%(url_new)s" method="post">
          <input type="submit" name="del_all" value="%(write_label)s" class="formbutton" />
        </form>
      </td>
      <td>&nbsp;</td>
      <td>
        <form name="deleteAll" action="%(url_delete_all)s" method="post">
          <input type="submit" name="del_all" value="%(delete_all_label)s" class="formbutton" />
        </form>
      </td>
    </tr>
  </tbody>
</table>""" % {'url_new': create_url(CFG_SITE_URL + '/yourmessages/write',
                                     {'ln': ln}),
               'url_delete_all': create_url(CFG_SITE_URL + '/yourmessages/delete_all',
                                            {'ln': ln}),
               'write_label': _("Write new message"),
               'delete_all_label': _("Delete All")}
        return inbox
    def tmpl_display_msg(self,
                         msg_id="",
                         msg_from_id="",
                         msg_from_nickname="",
                         msg_sent_to="",
                         msg_sent_to_group="",
                         msg_subject="",
                         msg_body="",
                         msg_sent_date="",
                         msg_received_date=datetext_default,
                         ln=CFG_SITE_LANG):
        """
        Displays a given message
        @param msg_id: id of the message
        @param msg_from_id: id of user who sent the message
        @param msg_from_nickname: nickname of the user who sent the message
        @param msg_sent_to: list of users who received the message
                            (comma separated string)
        @param msg_sent_to_group: list of groups who received the message
                                  (comma separated string)
        @param msg_subject: subject of the message
        @param msg_body: body of the message
        @param msg_sent_date: date at which the message was sent
        @param msg_received_date: date at which the message had to be received
                                  (if this argument != 0000-00-00 => reminder
        @param ln: language of the page
        @return: the message in HTML format
        """

        # load the right message language
        _ = gettext_set_language(ln)

        sent_to_link = ''
        tos = msg_sent_to.split(CFG_WEBMESSAGE_SEPARATOR)
        if (tos):
            for to in tos[0:-1]:
                to_display = to
                if to.isdigit():
                    (dummy, to, to_display) = get_user_info(int(to), ln)
                sent_to_link += create_html_link(CFG_SITE_URL + '/yourmessages/write',
                                                 {'msg_to': to, 'ln': ln},
                                                 escape_html(to_display))
                sent_to_link += CFG_WEBMESSAGE_SEPARATOR
            to_display = tos[-1]
            to = tos[-1]
            if to.isdigit():
                (dummy, to, to_display) = get_user_info(int(to), ln)
            sent_to_link += create_html_link(CFG_SITE_URL + '/yourmessages/write',
                                             {'msg_to': to, 'ln': ln},
                                             escape_html(to_display))
        group_to_link = ""
        groups = msg_sent_to_group.split(CFG_WEBMESSAGE_SEPARATOR)
        if (groups):
            for group in groups[0:-1]:
                group_to_link += create_html_link(
                                    CFG_SITE_URL + '/yourmessages/write',
                                    {'msg_to_group': group, 'ln': ln},
                                    escape_html(group))
                group_to_link += CFG_WEBMESSAGE_SEPARATOR
            group_to_link += create_html_link(
                                CFG_SITE_URL + '/yourmessages/write',
                                {'msg_to_group': groups[-1], 'ln': ln},
                                escape_html(groups[-1]))
        # format the msg so that the '>>' chars give vertical lines
        final_body = email_quoted_txt2html(msg_body)

        out = """
<table class="mailbox" style="width: 70%%;">
  <thead class="mailboxheader">
    <tr>
      <td class="inboxheader" colspan="2">
        <table class="messageheader">
          <tr>
            <td class="mailboxlabel">%(from_label)s</td>
            <td>%(from_link)s</td>
          </tr>
          <tr>
            <td class="mailboxlabel">%(subject_label)s</td>
            <td style="width: 100%%;">%(subject)s</td>
          </tr>
          <tr>
            <td class="mailboxlabel">%(sent_label)s</td>
            <td>%(sent_date)s</td>
          </tr>"""
        if (msg_received_date != datetext_default):
            out += """
          <tr>
            <td class="mailboxlabel">%(received_label)s</td>
            <td>%(received_date)s</td>
          </tr>"""
        out += """
          <tr>
            <td class="mailboxlabel">%(sent_to_label)s</td>
            <td>%(sent_to)s</td>
          </tr>"""
        if (msg_sent_to_group != ""):
            out += """
          <tr>
            <td class="mailboxlabel">%(groups_label)s</td>
            <td>%(sent_to_group)s</td>
          </tr>"""
        out += """
        </table>
      </td>
    </tr>
  </thead>
  <tfoot>
    <tr>
      <td></td>
      <td></td>
    </tr>
  </tfoot>
  <tbody class="mailboxbody">
    <tr class="mailboxrecord">
      <td colspan="2">%(body)s</td>
    </tr>
    <tr class="mailboxfooter">
      <td>
        <form name="reply" action="%(reply_url)s" method="post">
          <input class="formbutton" name="reply" value="%(reply_but_label)s" type="submit" />
        </form>
      </td>
      <td>
        <form name="deletemsg" action="%(delete_url)s" method="post">
          <input class="formbutton" name="delete" value="%(delete_but_label)s" type="submit" />
        </form>
      </td>
    </tr>
  </tbody>
</table>
        """
        if msg_from_nickname:
            msg_from_display = msg_from_nickname
        else:
            msg_from_display = get_user_info(msg_from_id, ln)[2]
            msg_from_nickname = msg_from_id

        return out % {'from_link': create_html_link(
                                        CFG_SITE_URL + '/yourmessages/write',
                                        {'msg_to': msg_from_nickname,
                                         'ln': ln},
                                        msg_from_display),
                     'reply_url': create_url(CFG_SITE_URL + '/yourmessages/write',
                                             {'msg_reply_id': msg_id,
                                             'ln':  ln}),
                     'delete_url': create_url(CFG_SITE_URL + '/yourmessages/delete',
                                             {'msgid': msg_id,
                                             'ln':  ln}),
                     'sent_date' : convert_datetext_to_dategui(msg_sent_date, ln),
                     'received_date': convert_datetext_to_dategui(msg_received_date, ln),
                     'sent_to': sent_to_link,
                     'sent_to_group': group_to_link,
                     'subject' : msg_subject,
                     'body' : final_body,
                     'reply_to': msg_from_id,
                     'ln': ln,
                     'from_label':_("From:"),
                     'subject_label':_("Subject:"),
                     'sent_label': _("Sent on:"),
                     'received_label':_("Received on:"),
                     'sent_to_label': _("Sent to:"),
                     'groups_label': _("Sent to groups:"),
                     'reply_but_label':_("REPLY"),
                     'delete_but_label': _("DELETE")}
示例#10
0
    def tmpl_write(self,
                   msg_to="", msg_to_group="",
                   msg_id=0,
                   msg_subject="", msg_body="",
                   msg_send_year=0, msg_send_month=0, msg_send_day=0,
                   warnings=[],
                   search_results_list=[],
                   search_pattern="",
                   results_field=CFG_WEBMESSAGE_RESULTS_FIELD['NONE'],
                   ln=CFG_SITE_LANG):
        """
        Displays a writing message form with optional prefilled fields
        @param msg_to: nick of the user (prefills the To: field)
        @param msg_subject: subject of the message (prefills the Subject: field)
        @param msg_body: body of the message (prefills the Message: field)
        @param msg_send_year: prefills to year field
        @param msg_send_month: prefills the month field
        @param msg_send_day: prefills the day field
        @param warnings: display warnings on top of page
        @param search_results_list: list of tuples. (user/groupname, is_selected)
        @param search_pattern: pattern used for searching
        @param results_field: 'none', 'user' or 'group', see CFG_WEBMESSAGE_RESULTS_FIELD
        @param ln: language of the form
        @return: the form in HTML format
        """
        _ = gettext_set_language(ln)
        write_box = self.tmpl_warning(warnings)

        # escape forbidden character
        msg_to = escape_html(msg_to)
        msg_to_group = escape_html(msg_to_group)
        msg_subject = escape_html(msg_subject)
        search_pattern = escape_html(search_pattern)

        to_select = self.tmpl_user_or_group_search(search_results_list,
                                                   search_pattern,
                                                   results_field,
                                                   ln)
        if msg_id:
            msg_subject = _("Re:") + " " + msg_subject
            msg_body = email_quote_txt(msg_body)
        write_box += """
<form name="write_message" action="%(url_form)s" method="post">
  <div style="float: left; vertical-align:text-top; margin-right: 10px;">
    <table class="mailbox">
      <thead class="mailboxheader">
        <tr>
          <td class="inboxheader" colspan="2">
            <table class="messageheader">
              <tr>
                <td class="mailboxlabel">%(to_label)s</td>
                <td class="mailboxlabel">%(users_label)s</td>
                <td style="width:100%%;">
                  <input class="mailboxinput" type="text" name="msg_to_user" value="%(to_users)s" />
                </td>
              </tr>
              <tr>
                <td class="mailboxlabel">&nbsp;</td>
                <td class="mailboxlabel">%(groups_label)s</td>
                <td style="width:100%%;">
                  <input class="mailboxinput" type="text" name="msg_to_group" value="%(to_groups)s" />
                </td>
              </tr>
              <tr>
                <td class="mailboxlabel">&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
              </tr>
              <tr>
                <td class="mailboxlabel">%(subject_label)s</td>
                <td colspan="2">
                  <input class="mailboxinput" type="text" name="msg_subject" value="%(subject)s" />
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </thead>
      <tfoot>
        <tr>
          <td style="height:0px" colspan="2"></td>
        </tr>
      </tfoot>
      <tbody class="mailboxbody">
        <tr>
          <td class="mailboxlabel">%(message_label)s</td>
          <td>
            <textarea name="msg_body" rows="10" cols="50">"""
        write_box_part2 = """
          </td>
        </tr>
        <tr>
          <td class="mailboxlabel">%(send_later_label)s</td>
          <td>
            %(day_field)s
            %(month_field)s
            %(year_field)s
          </td>
        </tr>
        <tr class="mailboxfooter">
          <td colspan="2" class="mailboxfoot">
            <input type="submit" name="send_button" value="%(send_label)s" class="formbutton"/>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
  <div style="vertical-align:top; margin-left: 5px; float: left;">
    %(to_select)s
  </div>
</form>
"""
        write_box += "%(body)s</textarea>" + write_box_part2
        day_field = create_day_selectbox('msg_send_day',
                                          msg_send_day, ln)
        month_field = create_month_selectbox('msg_send_month',
                                              msg_send_month, ln)
        year_field = create_year_selectbox('msg_send_year', -1, 10,
                                            msg_send_year, ln)
        write_box = write_box % {'url_form': create_url(
                                                CFG_SITE_URL + '/yourmessages/send',
                                                {'ln': ln}),
                                 'to_users' : msg_to,
                                 'to_groups': msg_to_group,
                                 'subject' : msg_subject,
                                 'body' : msg_body,
                                 'ln': ln,
                                 'day_field': day_field,
                                 'month_field': month_field,
                                 'year_field': year_field,
                                 'to_select': to_select,
                                 'send_later_label': _("Send later?"),
                                 'to_label': _("To:"),
                                 'users_label': _("Users"),
                                 'groups_label': _("Groups"),
                                 'subject_label': _("Subject:"),
                                 'message_label': _("Message:"),
                                 'send_label': _("SEND")}
        return write_box
示例#11
0
    def tmpl_create_userinfobox(self, ln, url_referer, guest, username,
                                submitter, referee, admin, usebaskets,
                                usemessages, usealerts, usegroups, useloans,
                                usestats):
        """
        Displays the user block.

        Generates a URL to login via OpenAIRE portal (robot login).

        Parameters:

          - 'ln' *string* - The language to display the interface in

          - 'url_referer' *string* - URL of the page being displayed

          - 'guest' *boolean* - If the user is guest

          - 'username' *string* - The username (nickname or email)

          - 'submitter' *boolean* - If the user is submitter

          - 'referee' *boolean* - If the user is referee

          - 'admin' *boolean* - If the user is admin

          - 'usebaskets' *boolean* - If baskets are enabled for the user

          - 'usemessages' *boolean* - If messages are enabled for the user

          - 'usealerts' *boolean* - If alerts are enabled for the user

          - 'usegroups' *boolean* - If groups are enabled for the user

          - 'useloans' *boolean* - If loans are enabled for the user

          - 'usestats' *boolean* - If stats are enabled for the user

        @note: with the update of CSS classes (cds.cds ->
            invenio.css), the variables useloans etc are not used in
            this function, since they are in the menus.  But we keep
            them in the function signature for backwards
            compatibility.
        """

        # load the right message language
        _ = gettext_set_language(ln)

        invenio_loginurl = url_referer or '%s/youraccount/display?ln=%s' % (
            CFG_SITE_SECURE_URL, ln)
        loginurl = create_url(
            CFG_OPENAIRE_PORTAL_URL, {
                "option": "com_openaire",
                "view": "login",
                "return": encodestring(invenio_loginurl)
            })
        invenio_logouturl = "%s/youraccount/logout?ln=%s" % (
            CFG_SITE_SECURE_URL, ln)
        logouturl = create_url(
            CFG_OPENAIRE_PORTAL_URL, {
                "option": "com_openaire",
                "view": "logout",
                "return": encodestring(invenio_logouturl)
            })

        out = """<img src="/img/user-icon-1-20x20.gif" border="0" alt=""/> """
        if guest:
            out += """%(guest_msg)s ::
                   <a class="userinfo" href="%(loginurl)s">%(login)s</a>""" % {
                'loginurl': escape(loginurl, True),
                'guest_msg': escape(_("guest")),
                'login': escape(_('login'))
            }
        else:
            out += """
               <a class="userinfo" href="%(sitesecureurl)s/youraccount/display?ln=%(ln)s">%(username)s</a> :: """ % {
                'sitesecureurl': escape(CFG_SITE_SECURE_URL, True),
                'ln': escape(ln, True),
                'username': escape(username)
            }
            out += """<a class="userinfo" href="%(logouturl)s">%(logout)s</a>""" % {
                'logouturl': escape(logouturl, True),
                'logout': escape(_("logout")),
            }
        return out
示例#12
0
    def tmpl_display_inbox(self,
                           messages,
                           infos=[],
                           warnings=[],
                           nb_messages=0,
                           no_quota=0,
                           ln=CFG_SITE_LANG):
        """
        Displays a list of messages, with the appropriate links and buttons
        @param messages: a list of tuples:
                         [(message_id,
                           user_from_id,
                           user_from_nickname,
                           subject,
                           sent_date,
                           status=]
        @param infos: a list of informations to print on top of page
        @param warnings: a list of warnings to display
        @param nb_messages: number of messages user has
        @param no_quota: 1 if user has no quota (admin) or 0 else.
        @param ln: language of the page.
        @return: the list in HTML format
        """
        _ = gettext_set_language(ln)
        dummy = 0
        inbox = self.tmpl_warning(warnings, ln)
        inbox += self.tmpl_infobox(infos, ln)
        if not (no_quota):
            inbox += self.tmpl_quota(nb_messages, ln)
        inbox += """
<table class="mailbox">
  <thead class="mailboxheader">
    <tr class="inboxheader">
      <td>%s</td>
      <td>%s</td>
      <td>%s</td>
      <td>%s</td>
    </tr>
  </thead>
  <tfoot>
    <tr style="height:0px;">
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  </tfoot>
  <tbody class="mailboxbody">""" % (_("Subject"), _("Sender"), _("Date"),
                                    _("Action"))
        if len(messages) == 0:
            inbox += """
    <tr class="mailboxrecord" style="height: 100px;">
      <td colspan="4" style="text-align: center;">
        <b>%s</b>
      </td>
    </tr>""" % (_("No messages"), )
        for (msgid, id_user_from, user_from_nick, subject, sent_date,
             status) in messages:
            if not (subject):
                subject = _("No subject")
            subject_link = create_html_link(
                CFG_SITE_URL + '/yourmessages/display_msg', {
                    'msgid': msgid,
                    'ln': ln
                }, escape_html(subject))
            if user_from_nick:
                from_link = '%s' % (user_from_nick)
            else:
                from_link = get_user_info(id_user_from, ln)[2]
            action_link = create_html_link(
                CFG_SITE_URL + '/yourmessages/write', {
                    'msg_reply_id': msgid,
                    'ln': ln
                }, _("Reply"))
            action_link += ' '
            action_link += create_html_link(
                CFG_SITE_URL + '/yourmessages/delete', {
                    'msgid': msgid,
                    'ln': ln
                }, _("Delete"))
            s_date = convert_datetext_to_dategui(sent_date, ln)
            stat_style = ''
            if (status == CFG_WEBMESSAGE_STATUS_CODE['NEW']):
                stat_style = ' style="font-weight:bold"'
            inbox += """
    <tr class="mailboxrecord">
      <td%s>%s</td>
      <td>%s</td>
      <td>%s</td>
      <td>%s</td>
    </tr>""" % (stat_style, subject_link, from_link, s_date, action_link)
        inbox += """
    <tr class="mailboxfooter">
      <td colspan="2">
        <form name="newMessage" action="%(url_new)s" method="post">
          <input type="submit" name="del_all" value="%(write_label)s" class="formbutton" />
        </form>
      </td>
      <td>&nbsp;</td>
      <td>
        <form name="deleteAll" action="%(url_delete_all)s" method="post">
          <input type="submit" name="del_all" value="%(delete_all_label)s" class="formbutton" />
        </form>
      </td>
    </tr>
  </tbody>
</table>""" % {
            'url_new':
            create_url(CFG_SITE_URL + '/yourmessages/write', {'ln': ln}),
            'url_delete_all':
            create_url(CFG_SITE_URL + '/yourmessages/delete_all', {'ln': ln}),
            'write_label':
            _("Write new message"),
            'delete_all_label':
            _("Delete All")
        }
        return inbox
示例#13
0
    def tmpl_display_msg(self,
                         msg_id="",
                         msg_from_id="",
                         msg_from_nickname="",
                         msg_sent_to="",
                         msg_sent_to_group="",
                         msg_subject="",
                         msg_body="",
                         msg_sent_date="",
                         msg_received_date=datetext_default,
                         ln=CFG_SITE_LANG):
        """
        Displays a given message
        @param msg_id: id of the message
        @param msg_from_id: id of user who sent the message
        @param msg_from_nickname: nickname of the user who sent the message
        @param msg_sent_to: list of users who received the message
                            (comma separated string)
        @param msg_sent_to_group: list of groups who received the message
                                  (comma separated string)
        @param msg_subject: subject of the message
        @param msg_body: body of the message
        @param msg_sent_date: date at which the message was sent
        @param msg_received_date: date at which the message had to be received
                                  (if this argument != 0000-00-00 => reminder
        @param ln: language of the page
        @return: the message in HTML format
        """

        # load the right message language
        _ = gettext_set_language(ln)

        sent_to_link = ''
        tos = msg_sent_to.split(CFG_WEBMESSAGE_SEPARATOR)
        if (tos):
            for to in tos[0:-1]:
                to_display = to
                if to.isdigit():
                    (dummy, to, to_display) = get_user_info(int(to), ln)
                sent_to_link += create_html_link(
                    CFG_SITE_URL + '/yourmessages/write', {
                        'msg_to': to,
                        'ln': ln
                    }, escape_html(to_display))
                sent_to_link += CFG_WEBMESSAGE_SEPARATOR
            to_display = tos[-1]
            to = tos[-1]
            if to.isdigit():
                (dummy, to, to_display) = get_user_info(int(to), ln)
            sent_to_link += create_html_link(
                CFG_SITE_URL + '/yourmessages/write', {
                    'msg_to': to,
                    'ln': ln
                }, escape_html(to_display))
        group_to_link = ""
        groups = msg_sent_to_group.split(CFG_WEBMESSAGE_SEPARATOR)
        if (groups):
            for group in groups[0:-1]:
                group_to_link += create_html_link(
                    CFG_SITE_URL + '/yourmessages/write', {
                        'msg_to_group': group,
                        'ln': ln
                    }, escape_html(group))
                group_to_link += CFG_WEBMESSAGE_SEPARATOR
            group_to_link += create_html_link(
                CFG_SITE_URL + '/yourmessages/write', {
                    'msg_to_group': groups[-1],
                    'ln': ln
                }, escape_html(groups[-1]))
        # format the msg so that the '>>' chars give vertical lines
        final_body = email_quoted_txt2html(msg_body)

        out = """
<table class="mailbox" style="width: 70%%;">
  <thead class="mailboxheader">
    <tr>
      <td class="inboxheader" colspan="2">
        <table class="messageheader">
          <tr>
            <td class="mailboxlabel">%(from_label)s</td>
            <td>%(from_link)s</td>
          </tr>
          <tr>
            <td class="mailboxlabel">%(subject_label)s</td>
            <td style="width: 100%%;">%(subject)s</td>
          </tr>
          <tr>
            <td class="mailboxlabel">%(sent_label)s</td>
            <td>%(sent_date)s</td>
          </tr>"""
        if (msg_received_date != datetext_default):
            out += """
          <tr>
            <td class="mailboxlabel">%(received_label)s</td>
            <td>%(received_date)s</td>
          </tr>"""
        out += """
          <tr>
            <td class="mailboxlabel">%(sent_to_label)s</td>
            <td>%(sent_to)s</td>
          </tr>"""
        if (msg_sent_to_group != ""):
            out += """
          <tr>
            <td class="mailboxlabel">%(groups_label)s</td>
            <td>%(sent_to_group)s</td>
          </tr>"""
        out += """
        </table>
      </td>
    </tr>
  </thead>
  <tfoot>
    <tr>
      <td></td>
      <td></td>
    </tr>
  </tfoot>
  <tbody class="mailboxbody">
    <tr class="mailboxrecord">
      <td colspan="2">%(body)s</td>
    </tr>
    <tr class="mailboxfooter">
      <td>
        <form name="reply" action="%(reply_url)s" method="post">
          <input class="formbutton" name="reply" value="%(reply_but_label)s" type="submit" />
        </form>
      </td>
      <td>
        <form name="deletemsg" action="%(delete_url)s" method="post">
          <input class="formbutton" name="delete" value="%(delete_but_label)s" type="submit" />
        </form>
      </td>
    </tr>
  </tbody>
</table>
        """
        if msg_from_nickname:
            msg_from_display = msg_from_nickname
        else:
            msg_from_display = get_user_info(msg_from_id, ln)[2]
            msg_from_nickname = msg_from_id

        return out % {
            'from_link':
            create_html_link(CFG_SITE_URL + '/yourmessages/write', {
                'msg_to': msg_from_nickname,
                'ln': ln
            }, msg_from_display),
            'reply_url':
            create_url(CFG_SITE_URL + '/yourmessages/write', {
                'msg_reply_id': msg_id,
                'ln': ln
            }),
            'delete_url':
            create_url(CFG_SITE_URL + '/yourmessages/delete', {
                'msgid': msg_id,
                'ln': ln
            }),
            'sent_date':
            convert_datetext_to_dategui(msg_sent_date, ln),
            'received_date':
            convert_datetext_to_dategui(msg_received_date, ln),
            'sent_to':
            sent_to_link,
            'sent_to_group':
            group_to_link,
            'subject':
            msg_subject,
            'body':
            final_body,
            'reply_to':
            msg_from_id,
            'ln':
            ln,
            'from_label':
            _("From:"),
            'subject_label':
            _("Subject:"),
            'sent_label':
            _("Sent on:"),
            'received_label':
            _("Received on:"),
            'sent_to_label':
            _("Sent to:"),
            'groups_label':
            _("Sent to groups:"),
            'reply_but_label':
            _("REPLY"),
            'delete_but_label':
            _("DELETE")
        }
示例#14
0
    def tmpl_write(self,
                   msg_to="",
                   msg_to_group="",
                   msg_id=0,
                   msg_subject="",
                   msg_body="",
                   msg_send_year=0,
                   msg_send_month=0,
                   msg_send_day=0,
                   warnings=[],
                   search_results_list=[],
                   search_pattern="",
                   results_field=CFG_WEBMESSAGE_RESULTS_FIELD['NONE'],
                   ln=CFG_SITE_LANG):
        """
        Displays a writing message form with optional prefilled fields
        @param msg_to: nick of the user (prefills the To: field)
        @param msg_subject: subject of the message (prefills the Subject: field)
        @param msg_body: body of the message (prefills the Message: field)
        @param msg_send_year: prefills to year field
        @param msg_send_month: prefills the month field
        @param msg_send_day: prefills the day field
        @param warnings: display warnings on top of page
        @param search_results_list: list of tuples. (user/groupname, is_selected)
        @param search_pattern: pattern used for searching
        @param results_field: 'none', 'user' or 'group', see CFG_WEBMESSAGE_RESULTS_FIELD
        @param ln: language of the form
        @return: the form in HTML format
        """
        _ = gettext_set_language(ln)
        write_box = self.tmpl_warning(warnings)

        # escape forbidden character
        msg_to = escape_html(msg_to)
        msg_to_group = escape_html(msg_to_group)
        msg_subject = escape_html(msg_subject)
        search_pattern = escape_html(search_pattern)

        to_select = self.tmpl_user_or_group_search(search_results_list,
                                                   search_pattern,
                                                   results_field, ln)
        if msg_id:
            msg_subject = _("Re:") + " " + msg_subject
            msg_body = email_quote_txt(msg_body)
        write_box += """
<form name="write_message" action="%(url_form)s" method="post">
  <div style="float: left; vertical-align:text-top; margin-right: 10px;">
    <table class="mailbox">
      <thead class="mailboxheader">
        <tr>
          <td class="inboxheader" colspan="2">
            <table class="messageheader">
              <tr>
                <td class="mailboxlabel">%(to_label)s</td>
                <td class="mailboxlabel">%(users_label)s</td>
                <td style="width:100%%;">
                  <input class="mailboxinput" type="text" name="msg_to_user" value="%(to_users)s" />
                </td>
              </tr>
              <tr>
                <td class="mailboxlabel">&nbsp;</td>
                <td class="mailboxlabel">%(groups_label)s</td>
                <td style="width:100%%;">
                  <input class="mailboxinput" type="text" name="msg_to_group" value="%(to_groups)s" />
                </td>
              </tr>
              <tr>
                <td class="mailboxlabel">&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
              </tr>
              <tr>
                <td class="mailboxlabel">%(subject_label)s</td>
                <td colspan="2">
                  <input class="mailboxinput" type="text" name="msg_subject" value="%(subject)s" />
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </thead>
      <tfoot>
        <tr>
          <td style="height:0px" colspan="2"></td>
        </tr>
      </tfoot>
      <tbody class="mailboxbody">
        <tr>
          <td class="mailboxlabel">%(message_label)s</td>
          <td>
            <textarea name="msg_body" rows="10" cols="50">"""
        write_box_part2 = """
          </td>
        </tr>
        <tr>
          <td class="mailboxlabel">%(send_later_label)s</td>
          <td>
            %(day_field)s
            %(month_field)s
            %(year_field)s
          </td>
        </tr>
        <tr class="mailboxfooter">
          <td colspan="2" class="mailboxfoot">
            <input type="submit" name="send_button" value="%(send_label)s" class="formbutton"/>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
  <div style="vertical-align:top; margin-left: 5px; float: left;">
    %(to_select)s
  </div>
</form>
"""
        write_box += "%(body)s</textarea>" + write_box_part2
        day_field = create_day_selectbox('msg_send_day', msg_send_day, ln)
        month_field = create_month_selectbox('msg_send_month', msg_send_month,
                                             ln)
        year_field = create_year_selectbox('msg_send_year', -1, 10,
                                           msg_send_year, ln)
        write_box = write_box % {
            'url_form': create_url(CFG_SITE_URL + '/yourmessages/send',
                                   {'ln': ln}),
            'to_users': msg_to,
            'to_groups': msg_to_group,
            'subject': msg_subject,
            'body': msg_body,
            'ln': ln,
            'day_field': day_field,
            'month_field': month_field,
            'year_field': year_field,
            'to_select': to_select,
            'send_later_label': _("Send later?"),
            'to_label': _("To:"),
            'users_label': _("Users"),
            'groups_label': _("Groups"),
            'subject_label': _("Subject:"),
            'message_label': _("Message:"),
            'send_label': _("SEND")
        }
        return write_box
    def tmpl_create_userinfobox(self, ln, url_referer, guest, username, submitter, referee, admin, usebaskets, usemessages, usealerts, usegroups, useloans, usestats):
        """
        Displays the user block.

        Generates a URL to login via OpenAIRE portal (robot login).

        Parameters:

          - 'ln' *string* - The language to display the interface in

          - 'url_referer' *string* - URL of the page being displayed

          - 'guest' *boolean* - If the user is guest

          - 'username' *string* - The username (nickname or email)

          - 'submitter' *boolean* - If the user is submitter

          - 'referee' *boolean* - If the user is referee

          - 'admin' *boolean* - If the user is admin

          - 'usebaskets' *boolean* - If baskets are enabled for the user

          - 'usemessages' *boolean* - If messages are enabled for the user

          - 'usealerts' *boolean* - If alerts are enabled for the user

          - 'usegroups' *boolean* - If groups are enabled for the user

          - 'useloans' *boolean* - If loans are enabled for the user

          - 'usestats' *boolean* - If stats are enabled for the user

        @note: with the update of CSS classes (cds.cds ->
            invenio.css), the variables useloans etc are not used in
            this function, since they are in the menus.  But we keep
            them in the function signature for backwards
            compatibility.
        """

        # load the right message language
        _ = gettext_set_language(ln)

        invenio_loginurl = url_referer or '%s/youraccount/display?ln=%s' % (CFG_SITE_SECURE_URL, ln)
        loginurl = create_url(CFG_OPENAIRE_PORTAL_URL, {"option": "com_openaire", "view": "login", "return": encodestring(invenio_loginurl)})
        invenio_logouturl = "%s/youraccount/logout?ln=%s" % (CFG_SITE_SECURE_URL, ln)
        logouturl = create_url(CFG_OPENAIRE_PORTAL_URL, {"option": "com_openaire", "view": "logout", "return": encodestring(invenio_logouturl)})

        out = """<img src="/img/user-icon-1-20x20.gif" border="0" alt=""/> """
        if guest:
            out += """%(guest_msg)s ::
                   <a class="userinfo" href="%(loginurl)s">%(login)s</a>""" % {
                     'loginurl': escape(loginurl, True),
                     'guest_msg' : escape(_("guest")),
                     'login' : escape(_('login'))
                   }
        else:
            out += """
               <a class="userinfo" href="%(sitesecureurl)s/youraccount/display?ln=%(ln)s">%(username)s</a> :: """ % {
                    'sitesecureurl' : escape(CFG_SITE_SECURE_URL, True),
                    'ln' : escape(ln, True),
                    'username' : escape(username)
               }
            out += """<a class="userinfo" href="%(logouturl)s">%(logout)s</a>""" % {
                    'logouturl': escape(logouturl, True),
                    'logout' : escape(_("logout")),
                }
        return out