def delete_linkbacks_on_blacklist(): """ Delete all rejected, broken and pending linkbacks whose URL on in the blacklist """ linkbacks = list(get_all_linkbacks(status=CFG_WEBLINKBACK_STATUS['PENDING'])) linkbacks.extend(list(get_all_linkbacks(status=CFG_WEBLINKBACK_STATUS['REJECTED']))) linkbacks.extend(list(get_all_linkbacks(status=CFG_WEBLINKBACK_STATUS['BROKEN']))) for linkback in linkbacks: if infix_exists_for_url_in_list(linkback[1], CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST']): remove_linkback(linkback[0])
def test_create_linkback2(self): """weblinkback - create linkback with URL title""" recid = 42 argd = {'url': 'URL', 'title': 'My title', 'excerpt': CFG_WEBLINKBACK_SUBSCRIPTION_DEFAULT_ARGUMENT_NAME, 'blog_name': 'Test Blog', 'id': CFG_WEBLINKBACK_SUBSCRIPTION_DEFAULT_ARGUMENT_NAME, 'source': CFG_WEBLINKBACK_SUBSCRIPTION_DEFAULT_ARGUMENT_NAME, } linkbackid = create_trackback(recid, argd['url'], argd['title'], argd['excerpt'], argd['blog_name'], argd['id'], argd['source'], self.user_info) self.assertEqual(10 + self._max_id_lnkENTRY, linkbackid) linkback = get_all_linkbacks(recid=recid)[5] self.assertEqual(linkbackid, linkback[0]) self.assertEqual(argd['url'], linkback[1]) self.assertEqual(recid, linkback[2]) self.assertEqual(CFG_WEBLINKBACK_TYPE['TRACKBACK'], linkback[4]) self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback[5]) url = CFG_SITE_URL + '/%s/42/linkbacks/' % CFG_SITE_RECORD expected_texts = ('Linkbacks to review: 6', 'Linkbacks: 0') for text in expected_texts: self.assertEqual([], test_web_page_content(url, username='******', expected_text=text)) approve_linkback(linkbackid, self.user_info) linkback = get_all_linkbacks(recid=recid)[5] self.assertEqual(linkbackid, linkback[0]) self.assertEqual(argd['url'], linkback[1]) self.assertEqual(recid, linkback[2]) self.assertEqual(CFG_WEBLINKBACK_TYPE['TRACKBACK'], linkback[4]) self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback[5]) url_titles = self.get_all_from_table("lnkENTRYURLTITLE") self.assertEqual(1, len(url_titles)) self.assertEqual(argd['url'], url_titles[0][1]) self.assertEqual(argd['title'], url_titles[0][2]) self.assertEqual(1, url_titles[0][3]) self.assertEqual(argd['title'], get_url_title(argd['url'])) self.assertEqual(0, len(get_urls_and_titles(CFG_WEBLINKBACK_PAGE_TITLE_STATUS['OLD']))) self.assertEqual(0, len(get_urls_and_titles(CFG_WEBLINKBACK_PAGE_TITLE_STATUS['NEW']))) self.assertEqual(1, len(get_urls_and_titles(CFG_WEBLINKBACK_PAGE_TITLE_STATUS['MANUALLY_SET']))) url = CFG_SITE_URL + '/%s/42/linkbacks/' % CFG_SITE_RECORD expected_texts = ('Linkbacks to review: 5', 'Linkbacks: 1') for text in expected_texts: self.assertEqual([], test_web_page_content(url, username='******', expected_text=text))
def send_pending_linkbacks_notification(linkback_type): """ Send notification emails to all linkback moderators for all pending linkbacks @param linkback_type: of CFG_WEBLINKBACK_LIST_TYPE """ pending_linkbacks = get_all_linkbacks( linkback_type=CFG_WEBLINKBACK_TYPE['TRACKBACK'], status=CFG_WEBLINKBACK_STATUS['PENDING']) if pending_linkbacks: pending_count = len(pending_linkbacks) cutoff_text = '' if pending_count > CFG_WEBLINKBACK_MAX_LINKBACKS_IN_EMAIL: cutoff_text = ' (Printing only the first %s requests)' % CFG_WEBLINKBACK_MAX_LINKBACKS_IN_EMAIL content = """There are %(count)s new %(linkback_type)s requests which you should approve or reject%(cutoff)s: """ % { 'count': pending_count, 'linkback_type': linkback_type, 'cutoff': cutoff_text } for pending_linkback in pending_linkbacks[ 0:CFG_WEBLINKBACK_MAX_LINKBACKS_IN_EMAIL]: content += """ For %(recordURL)s from %(origin_url)s. """ % { 'recordURL': generate_redirect_url(pending_linkback[2]), 'origin_url': pending_linkback[1] } for email in acc_get_authorized_emails('moderatelinkbacks'): send_email(CFG_SITE_ADMIN_EMAIL, email, 'Pending ' + linkback_type + ' requests', content)
def send_pending_linkbacks_notification(linkback_type): """ Send notification emails to all linkback moderators for all pending linkbacks @param linkback_type: of CFG_WEBLINKBACK_LIST_TYPE """ pending_linkbacks = get_all_linkbacks(linkback_type=CFG_WEBLINKBACK_TYPE['TRACKBACK'], status=CFG_WEBLINKBACK_STATUS['PENDING']) if pending_linkbacks: pending_count = len(pending_linkbacks) cutoff_text = '' if pending_count > CFG_WEBLINKBACK_MAX_LINKBACKS_IN_EMAIL: cutoff_text = ' (Printing only the first %s requests)' % CFG_WEBLINKBACK_MAX_LINKBACKS_IN_EMAIL content = """There are %(count)s new %(linkback_type)s requests which you should approve or reject%(cutoff)s: """ % {'count': pending_count, 'linkback_type': linkback_type, 'cutoff': cutoff_text} for pending_linkback in pending_linkbacks[0:CFG_WEBLINKBACK_MAX_LINKBACKS_IN_EMAIL]: content += """ For %(recordURL)s from %(origin_url)s. """ % {'recordURL': generate_redirect_url(pending_linkback[2]), 'origin_url': pending_linkback[1]} for email in acc_get_authorized_emails('moderatelinkbacks'): send_email(CFG_SITE_ADMIN_EMAIL, email, 'Pending ' + linkback_type + ' requests', content)
def test_reject_linkback(self): """weblinkback - reject linkback""" linkback = get_all_linkbacks(recid=42)[1] linkbackid = linkback[0] linkback_status = linkback[5] self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_status) reject_linkback(linkbackid, self.user_info) linkback = get_all_linkbacks(recid=42)[1] linkback_status = linkback[5] self.assertEqual(CFG_WEBLINKBACK_STATUS['REJECTED'], linkback_status) url = CFG_SITE_URL + '/%s/42/linkbacks/' % CFG_SITE_RECORD expected_texts = ('Linkbacks to review: 4', 'Linkbacks: 0') for text in expected_texts: self.assertEqual([], test_web_page_content(url, username='******', expected_text=text))
def test_approve_linkback(self): """weblinkback - approve linkback""" linkback = get_all_linkbacks(41)[0] linkbackid = linkback[0] linkback_status = linkback[5] self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_status) approve_linkback(linkbackid, self.user_info) linkback = get_all_linkbacks(recid=41)[0] linkback_status = linkback[5] self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback_status) url = CFG_SITE_URL + '/%s/41/linkbacks/' % CFG_SITE_RECORD expected_texts = ('Linkbacks to review: 3', 'Linkbacks: 1') for text in expected_texts: self.assertEqual([], test_web_page_content(url, username='******', expected_text=text))
def perform_request_display_record_linbacks(req, recid, show_admin, weblinkback_templates, ln): # pylint: disable=W0613 """ Display linkbacks of a record @param recid @param argd @param show_admin: True, False --> show admin parts to approve/reject linkbacks pending requests @param weblinkback_templates: template object reference """ out = weblinkback_templates.tmpl_linkbacks_general(recid=recid, ln=ln) if show_admin: pending_linkbacks = get_all_linkbacks(recid, CFG_WEBLINKBACK_STATUS['PENDING'], CFG_WEBLINKBACK_ORDER_BY_INSERTION_TIME['DESC']) out += weblinkback_templates.tmpl_linkbacks_admin(pending_linkbacks=pending_linkbacks, recid=recid, ln=ln) approved_linkbacks = get_all_linkbacks(recid, CFG_WEBLINKBACK_STATUS['APPROVED'], CFG_WEBLINKBACK_ORDER_BY_INSERTION_TIME['DESC']) out += weblinkback_templates.tmpl_linkbacks(approved_linkbacks=approved_linkbacks, ln=ln) return out
def test_get_all_linkbacks1(self): """weblinkback - get all linkbacks for lnkENTRY and with a certain status""" self.assertEqual(0, len(get_all_linkbacks(recid=5, status=CFG_WEBLINKBACK_STATUS['PENDING']))) self.assertEqual(4, len(get_all_linkbacks(recid=41, status=CFG_WEBLINKBACK_STATUS['PENDING']))) self.assertEqual(0, len(get_all_linkbacks(recid=41, status=CFG_WEBLINKBACK_STATUS['INSERTED']))) self.assertEqual(5, len(get_all_linkbacks(recid=42, status=CFG_WEBLINKBACK_STATUS['PENDING']))) self.assertEqual(0, len(get_all_linkbacks(recid=42, status=CFG_WEBLINKBACK_STATUS['APPROVED']))) url = CFG_SITE_URL + '/%s/41/linkbacks/' % CFG_SITE_RECORD expected_texts = ('Linkbacks to review: 4', 'Linkbacks: 0', 'URL1', 'URL2', 'URL3', 'URL4') for text in expected_texts: self.assertEqual([], test_web_page_content(url, username='******', expected_text=text)) url = CFG_SITE_URL + '/%s/42/linkbacks/' % CFG_SITE_RECORD expected_texts = ('Linkbacks to review: 5', 'Linkbacks: 0', 'URL5', 'URL6', 'URL7', 'URL8', 'URL1') for text in expected_texts: self.assertEqual([], test_web_page_content(url, username='******', expected_text=text))
def perform_request_display_linkbacks(status, return_code, ln=CFG_SITE_LANG): """ Display linkbacks @param status: of CFG_WEBLINKBACK_STATUS, currently only CFG_WEBLINKBACK_STATUS['PENDING'] is supported """ _ = gettext_set_language(ln) if status == CFG_WEBLINKBACK_STATUS['PENDING']: linkbacks = get_all_linkbacks(status=status, order=CFG_WEBLINKBACK_ORDER_BY_INSERTION_TIME['DESC']) entries = [] for (linkbackid, origin_url, recid, additional_properties, linkback_type, linkback_status, insert_time) in linkbacks: # pylint: disable=W0612 moderation_prefix = '<a href="moderatelinkback?action=%%s&linkbackid=%s&ln=%s">%%s</a>' % (linkbackid, ln) entries.append((linkback_type, format_record(recID=recid, of='hs', ln=ln), '<a href="%s">%s</a>' % (cgi.escape(origin_url), cgi.escape(get_url_title(origin_url))), convert_datetext_to_dategui(str(insert_time)), moderation_prefix % (CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION['APPROVE'], 'Approve') + " / " + moderation_prefix % (CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION['REJECT'], 'Reject'))) header = ['Linkback type', 'Record', 'Origin', 'Submitted on', ''] error_message = "" if return_code != CFG_WEBLINKBACK_ACTION_RETURN_CODE['OK']: error_message = _("Unknown error") if return_code == CFG_WEBLINKBACK_ACTION_RETURN_CODE['INVALID_ACTION']: error_message = _("Invalid action") error_message_html = "" if error_message != "": error_message_html = "<dt><b><font color=red>" + error_message + "</font></b></dt>" + "<br>" out = """ <dl> %(error_message)s <dt>%(heading)s</dt> <dd>%(description)s</dd> </dl> """ % {'heading': _("Pending linkbacks"), 'description': _("these linkbacks are not visible to users, they must be approved or rejected."), 'error_message': error_message_html} if entries: out += tupletotable(header=header, tuple=entries, highlight_rows_p=True, alternate_row_colors_p=True) else: out += "<i>There are no %s linkbacks.</i>" % status.lower() return addadminbox('<b>%s</b>'% _("Reduce the amount of currently pending linkback requests"), [out]) else: return "<i>%s</i>" % _('Currently only pending linkbacks are supported.')
def tmpl_admin_index(self, ln): """ Index page of admin interface """ _ = gettext_set_language(ln) out = '<ol>' pending_linkback_count = len(get_all_linkbacks(status=CFG_WEBLINKBACK_STATUS['PENDING'])) stat_pending_text = "" if pending_linkback_count > 0: stat_pending_text = ' <span class="moreinfo"> (' if pending_linkback_count == 1: stat_pending_text += "%s pending linkback request" % pending_linkback_count elif pending_linkback_count > 1: stat_pending_text += "%s pending linkback requests"% pending_linkback_count stat_pending_text += ')</span>' out += '<li><a href="%(siteURL)s/admin/weblinkback/weblinkbackadmin.py/linkbacks?ln=%(ln)s&status=%(status)s">%(label)s</a>%(stat)s</li>' % \ {'siteURL': CFG_SITE_URL, 'ln': ln, 'status': CFG_WEBLINKBACK_STATUS['PENDING'], 'label': _("Pending Linkbacks"), 'stat': stat_pending_text} out += '<li><a href="%(siteURL)s/linkbacks?ln=%(ln)s">%(label)s</a></li>' % \ {'siteURL': CFG_SITE_URL, 'ln': ln, 'label': _("Recent Linkbacks")} out += '<li><a href="%(siteURL)s/admin/weblinkback/weblinkbackadmin.py/lists?ln=%(ln)s&returncode=%(returnCode)s">%(label)s</a></li>' % \ {'siteURL': CFG_SITE_URL, 'ln': ln, 'returnCode': CFG_WEBLINKBACK_ACTION_RETURN_CODE['OK'], 'label': _("Linkback Whitelist/Blacklist Manager")} out += '</ol>' from invenio.bibrankadminlib import addadminbox return addadminbox('<b>%s</b>'% _("Menu"), [out])
def tmpl_admin_index(self, ln): """ Index page of admin interface """ _ = gettext_set_language(ln) out = '<ol>' pending_linkback_count = len( get_all_linkbacks(status=CFG_WEBLINKBACK_STATUS['PENDING'])) stat_pending_text = "" if pending_linkback_count > 0: stat_pending_text = ' <span class="moreinfo"> (' if pending_linkback_count == 1: stat_pending_text += "%s pending linkback request" % pending_linkback_count elif pending_linkback_count > 1: stat_pending_text += "%s pending linkback requests" % pending_linkback_count stat_pending_text += ')</span>' out += '<li><a href="%(siteURL)s/admin/weblinkback/weblinkbackadmin.py/linkbacks?ln=%(ln)s&status=%(status)s">%(label)s</a>%(stat)s</li>' % \ {'siteURL': CFG_SITE_URL, 'ln': ln, 'status': CFG_WEBLINKBACK_STATUS['PENDING'], 'label': _("Pending Linkbacks"), 'stat': stat_pending_text} out += '<li><a href="%(siteURL)s/linkbacks?ln=%(ln)s">%(label)s</a></li>' % \ {'siteURL': CFG_SITE_URL, 'ln': ln, 'label': _("Recent Linkbacks")} out += '<li><a href="%(siteURL)s/admin/weblinkback/weblinkbackadmin.py/lists?ln=%(ln)s&returncode=%(returnCode)s">%(label)s</a></li>' % \ {'siteURL': CFG_SITE_URL, 'ln': ln, 'returnCode': CFG_WEBLINKBACK_ACTION_RETURN_CODE['OK'], 'label': _("Linkback Whitelist/Blacklist Manager")} out += '</ol>' from invenio.bibrankadminlib import addadminbox return addadminbox('<b>%s</b>' % _("Menu"), [out])
def perform_request_display_linkbacks(status, return_code, ln=CFG_SITE_LANG): """ Display linkbacks @param status: of CFG_WEBLINKBACK_STATUS, currently only CFG_WEBLINKBACK_STATUS['PENDING'] is supported """ _ = gettext_set_language(ln) if status == CFG_WEBLINKBACK_STATUS['PENDING']: linkbacks = get_all_linkbacks( status=status, order=CFG_WEBLINKBACK_ORDER_BY_INSERTION_TIME['DESC']) entries = [] for (linkbackid, origin_url, recid, additional_properties, linkback_type, linkback_status, insert_time) in linkbacks: # pylint: disable=W0612 moderation_prefix = '<a href="moderatelinkback?action=%%s&linkbackid=%s&ln=%s">%%s</a>' % ( linkbackid, ln) entries.append(( linkback_type, format_record(recID=recid, of='hs', ln=ln), '<a href="%s">%s</a>' % (cgi.escape(origin_url), cgi.escape( get_url_title(origin_url))), convert_datetext_to_dategui(str(insert_time)), moderation_prefix % (CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION['APPROVE'], 'Approve') + " / " + moderation_prefix % (CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION['REJECT'], 'Reject'))) header = ['Linkback type', 'Record', 'Origin', 'Submitted on', ''] error_message = "" if return_code != CFG_WEBLINKBACK_ACTION_RETURN_CODE['OK']: error_message = _("Unknown error") if return_code == CFG_WEBLINKBACK_ACTION_RETURN_CODE[ 'INVALID_ACTION']: error_message = _("Invalid action") error_message_html = "" if error_message != "": error_message_html = "<dt><b><font color=red>" + error_message + "</font></b></dt>" + "<br>" out = """ <dl> %(error_message)s <dt>%(heading)s</dt> <dd>%(description)s</dd> </dl> """ % { 'heading': _("Pending linkbacks"), 'description': _("these linkbacks are not visible to users, they must be approved or rejected." ), 'error_message': error_message_html } if entries: out += tupletotable(header=header, tuple=entries, highlight_rows_p=True, alternate_row_colors_p=True) else: out += "<i>There are no %s linkbacks.</i>" % status.lower() return addadminbox( '<b>%s</b>' % _("Reduce the amount of currently pending linkback requests"), [out]) else: return "<i>%s</i>" % _( 'Currently only pending linkbacks are supported.')
def test_get_all_linkbacks2(self): """weblinkback - get all linkbacks with a certain status""" self.assertEqual(9, len(get_all_linkbacks(status=CFG_WEBLINKBACK_STATUS['PENDING']))) self.assertEqual(0, len(get_all_linkbacks(status=CFG_WEBLINKBACK_STATUS['APPROVED'])))