Ejemplo n.º 1
0
 def __init__(self, user, **kw):
     self.user = user
     self.wrappeduser = WrappedUser(user)
     self.permissions = kw.pop('permissions')
     self.is_moderator = kw.pop('is_moderator')
     self.mod_permissions = None
     if self.is_moderator:
         self.mod_permissons = ModeratorPermissions(self.user,
             "moderator", self.permissions, embedded=True)
     BoringPage.__init__(self, user.name, **kw)
Ejemplo n.º 2
0
 def __init__(self,
              content_id=None,
              title_msg=None,
              pagename=None,
              content=None,
              **kw):
     BoringPage.__init__(self,
                         pagename or _('about reddit'),
                         show_sidebar=False,
                         content=content,
                         **kw)
     self.content_id = content_id
     self.title_msg = title_msg
Ejemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        self.prices = {
            "gold_month_price": g.gold_month_price,
            "gold_year_price": g.gold_year_price,
        }
        self.features = []

        all_features = GoldFeature.get_all()
        for feature in all_features:
            feature.extra_classes = 'new' if feature.is_new else ''
            self.features.append(feature)

        BoringPage.__init__(self, *args, **kwargs)
Ejemplo n.º 4
0
    def __init__(self, *args, **kwargs):
        self.prices = {
            "gold_month_price": g.gold_month_price,
            "gold_year_price": g.gold_year_price,
        }
        all_features = GoldFeature.get_all()
        for feature in all_features:
            feature.extra_classes = 'new' if feature.is_new else ''
        NUM_FEATURES_ABOVE_PARTNERS = 2
        self.top_features = all_features[:NUM_FEATURES_ABOVE_PARTNERS]
        self.other_features = all_features[NUM_FEATURES_ABOVE_PARTNERS:]

        self.partners = GoldPartner.get_all()
        BoringPage.__init__(self, *args, **kwargs)
Ejemplo n.º 5
0
 def GET_button_demo_page(self):
     # no buttons for domain listings -> redirect to top level
     if isinstance(c.site, DomainSR):
         return self.redirect('/buttons')
     return BoringPage(_("reddit buttons"),
                       show_sidebar=False,
                       content=ButtonDemoPanel()).render()
Ejemplo n.º 6
0
    def GET_docs(self):
        # controllers to gather docs from.
        from r2.controllers.api import ApiController, ApiminimalController
        from r2.controllers.front import FrontController
        from r2.controllers import listingcontroller

        api_controllers = [(ApiController, '/api'),
                           (ApiminimalController, '/api'),
                           (FrontController, '')]
        for name, value in vars(listingcontroller).iteritems():
            if name.endswith('Controller'):
                api_controllers.append((value, ''))

        # merge documentation info together.
        api_docs = defaultdict(dict)
        for controller, url_prefix in api_controllers:
            for section, contents in self.docs_from_controller(
                    controller, url_prefix).iteritems():
                api_docs[section].update(contents)

        return BoringPage(_('api documentation'),
                          content=ApiHelp(api_docs=api_docs),
                          css_class="api-help",
                          show_sidebar=False,
                          show_firsttext=False).render()
Ejemplo n.º 7
0
 def GET_wiki_create(self, wp, page):
     api = c.render_style in extensions.API_TYPES
     error = c.errors.get(('WIKI_CREATE_ERROR', 'page'))
     if error:
         error = error.msg_params
     if wp[0]:
         return self.redirect(join_urls(c.wiki_base_url, wp[0].name))
     elif api:
         if error:
             self.handle_error(403, **error)
         else:
             self.handle_error(404, 'PAGE_NOT_CREATED')
     elif error:
         error_msg = ''
         if error['reason'] == 'PAGE_NAME_LENGTH':
             error_msg = _(
                 "this wiki cannot handle page names of that magnitude!  please select a page name shorter than %d characters"
             ) % error['max_length']
         elif error['reason'] == 'PAGE_CREATED_ELSEWHERE':
             error_msg = _(
                 "this page is a special page, please go into the subreddit settings and save the field once to create this special page"
             )
         elif error['reason'] == 'PAGE_NAME_MAX_SEPARATORS':
             error_msg = _(
                 'a max of %d separators "/" are allowed in a wiki page name.'
             ) % error['max_separators']
         return BoringPage(_("Wiki error"), infotext=error_msg).render()
     else:
         return WikiCreate(page=page, may_revise=True).render()
Ejemplo n.º 8
0
    def GET_wiki_create(self, may_create, page, view=False):
        api = c.extension == 'json'

        if c.error and c.error['reason'] == 'PAGE_EXISTS':
            return self.redirect(join_urls(c.wiki_base_url, page))
        elif not may_create or api:
            if may_create and c.error:
                self.handle_error(403, **c.error)
            else:
                self.handle_error(404, 'PAGE_NOT_FOUND', may_create=may_create)
        elif c.error:
            error = ''
            if c.error['reason'] == 'PAGE_NAME_LENGTH':
                error = _(
                    "this wiki cannot handle page names of that magnitude!  please select a page name shorter than %d characters"
                ) % c.error['max_length']
            elif c.error['reason'] == 'PAGE_CREATED_ELSEWHERE':
                error = _(
                    "this page is a special page, please go into the subreddit settings and save the field once to create this special page"
                )
            elif c.error['reason'] == 'PAGE_NAME_MAX_SEPARATORS':
                error = _(
                    'a max of %d separators "/" are allowed in a wiki page name.'
                ) % c.error['MAX_SEPARATORS']
            return BoringPage(_("Wiki error"), infotext=error).render()
        elif view:
            return WikiNotFound().render()
        elif may_create:
            WikiPage.create(c.site, page)
            url = join_urls(c.wiki_base_url, '/edit/', page)
            return self.redirect(url)
Ejemplo n.º 9
0
    def __init__(self, *args, **kwargs):
        self.prices = {
            "gold_month_price": g.gold_month_price,
            "gold_year_price": g.gold_year_price,
        }

        self.partners = GoldPartner.get_all()
        self.categories = set()
        self.giveaways = []

        # batch-lookup the Links and Subreddits for discussions
        id36s = [p.discussion_id36 for p in self.partners if p.discussion_id36]
        links = Link._byID36(id36s, data=True)
        subreddits = Subreddit._byID([link.sr_id for link in links.values()],
                                     data=True)

        for partner in self.partners:
            if partner.category:
                self.categories.add(partner.category)

            extra_classes = partner.css_classes
            if partner.is_new:
                extra_classes.append('new')
            partner.extra_classes = ' '.join(extra_classes)

            if partner.giveaway_desc:
                self.giveaways.append('{0}: {1}'
                                      .format(partner.name,
                                              partner.giveaway_desc))

            if partner.discussion_id36:
                link = links[partner.discussion_id36]
                subreddit = subreddits[link.sr_id]
                partner.discussion_url = link.make_permalink(subreddit)
                partner.discussion_num_comments = link.num_comments
            else:
                partner.discussion_url = None
                partner.discussion_num_comments = None

        self.categories = sorted(self.categories)

        if c.user_is_loggedin:
            self.existing_codes = GoldPartnerDealCode.get_codes_for_user(c.user)
        else:
            self.existing_codes = []
        BoringPage.__init__(self, *args, **kwargs)
Ejemplo n.º 10
0
    def __init__(self, *args, **kwargs):
        self.prices = {
            "gold_month_price": g.gold_month_price,
            "gold_year_price": g.gold_year_price,
        }

        self.partners = GoldPartner.get_all()
        self.categories = set()
        self.giveaways = []

        # batch-lookup the Links and Subreddits for discussions
        id36s = [p.discussion_id36 for p in self.partners if p.discussion_id36]
        links = Link._byID36(id36s, data=True)
        subreddits = Subreddit._byID([link.sr_id for link in links.values()],
                                     data=True)

        for partner in self.partners:
            if partner.category:
                self.categories.add(partner.category)

            extra_classes = partner.css_classes
            if partner.is_new:
                extra_classes.append('new')
            partner.extra_classes = ' '.join(extra_classes)

            if partner.giveaway_desc:
                self.giveaways.append('{0}: {1}'.format(
                    partner.name, partner.giveaway_desc))

            if partner.discussion_id36:
                link = links[partner.discussion_id36]
                subreddit = subreddits[link.sr_id]
                partner.discussion_url = link.make_permalink(subreddit)
                partner.discussion_num_comments = link.num_comments
            else:
                partner.discussion_url = None
                partner.discussion_num_comments = None

        self.categories = sorted(self.categories)

        if c.user_is_loggedin:
            self.existing_codes = GoldPartnerDealCode.get_codes_for_user(
                c.user)
        else:
            self.existing_codes = []
        BoringPage.__init__(self, *args, **kwargs)
Ejemplo n.º 11
0
 def rendercontent(self, content):
     if content.startswith("<!--TEMPLATE-->"):
         return BoringPage(_("Help"),
                           content=Embed(content=content),
                           show_sidebar=None,
                           space_compress=False).render()
     else:
         return content
Ejemplo n.º 12
0
    def GET_disable(self, **kwargs):
        # **kwargs included above to swallow pylons env arguments passed in
        # due to argspec inspection of decorator **kwargs.

        return BoringPage(
            pagename=_('disabling beta'),
            content_id='beta-disable',
            content=BetaDisable(),
            show_sidebar=False,
        ).render()
Ejemplo n.º 13
0
    def GET_docs(self, mode):
        # controllers to gather docs from.
        from r2.controllers.api import ApiController, ApiminimalController
        from r2.controllers.apiv1.user import APIv1UserController
        from r2.controllers.apiv1.gold import APIv1GoldController
        from r2.controllers.apiv1.scopes import APIv1ScopesController
        from r2.controllers.captcha import CaptchaController
        from r2.controllers.front import FrontController
        from r2.controllers.wiki import WikiApiController, WikiController
        from r2.controllers.multi import MultiApiController
        from r2.controllers import listingcontroller

        api_controllers = [
            (APIv1UserController, '/api/v1'),
            (APIv1GoldController, '/api/v1'),
            (APIv1ScopesController, '/api/v1'),
            (ApiController, '/api'),
            (ApiminimalController, '/api'),
            (WikiApiController, '/api/wiki'),
            (WikiController, '/wiki'),
            (MultiApiController, '/api/multi'),
            (CaptchaController, ''),
            (FrontController, ''),
        ]
        for name, value in vars(listingcontroller).iteritems():
            if name.endswith('Controller'):
                api_controllers.append((value, ''))

        # bring in documented plugin controllers
        api_controllers.extend(g.plugins.get_documented_controllers())

        # merge documentation info together.
        api_docs = defaultdict(dict)
        oauth_index = defaultdict(set)
        for controller, url_prefix in api_controllers:
            controller_docs = self.docs_from_controller(controller, url_prefix,
                                                        mode == 'oauth')
            for section, contents in controller_docs.iteritems():
                api_docs[section].update(contents)
                for variant, method_dict in contents.iteritems():
                    for method, docs in method_dict.iteritems():
                        for scope in docs['oauth_scopes']:
                            oauth_index[scope].add((section, variant, method))

        return BoringPage(
            _('api documentation'),
            content=ApiHelp(
                api_docs=api_docs,
                oauth_index=oauth_index,
                mode=mode,
            ),
            css_class="api-help",
            show_sidebar=False,
            show_infobar=False
        ).render()
Ejemplo n.º 14
0
    def __init__(self, *args, **kwargs):
        self.prices = {"gold_month_price": g.gold_month_price, "gold_year_price": g.gold_year_price}
        self.top_features = []
        self.other_features = []
        self.top_partners = []

        all_features = GoldFeature.get_all()
        for feature in all_features:
            feature.extra_classes = "new" if feature.is_new else ""
            if feature.is_top:
                self.top_features.append(feature)
            else:
                self.other_features.append(feature)

        all_partners = GoldPartner.get_all()
        for partner in all_partners:
            if partner.is_top:
                self.top_partners.append(partner)

        BoringPage.__init__(self, *args, **kwargs)
Ejemplo n.º 15
0
 def GET_edit(self, meetup):
     return BoringPage(pagename='Edit Meetup',
                       content=EditMeetup(
                           meetup,
                           title=meetup.title,
                           description=meetup.description,
                           location=meetup.location,
                           latitude=meetup.latitude,
                           longitude=meetup.longitude,
                           timestamp=int(meetup.timestamp * 1000),
                           tzoffset=meetup.tzoffset)).render()
Ejemplo n.º 16
0
    def __init__(self, *args, **kwargs):
        self.prices = {
            "gold_month_price": g.gold_month_price,
            "gold_year_price": g.gold_year_price,
        }
        self.top_features = []
        self.other_features = []
        self.top_partners = []

        all_features = GoldFeature.get_all()
        for feature in all_features:
            feature.extra_classes = 'new' if feature.is_new else ''
            if feature.is_top:
                self.top_features.append(feature)
            else:
                self.other_features.append(feature)

        all_partners = GoldPartner.get_all()
        for partner in all_partners:
            if partner.is_top:
                self.top_partners.append(partner)

        BoringPage.__init__(self, *args, **kwargs)
Ejemplo n.º 17
0
    def GET_show(self, meetup, sort, num_comments):
        article = Link._byID(meetup.assoc_link)

        # figure out number to show based on the menu
        user_num = c.user.pref_num_comments or g.num_comments
        num = g.max_comments if num_comments == 'true' else user_num

        builder = CommentBuilder(article, CommentSortMenu.operator(sort), None,
                                 None)
        listing = NestedListing(builder,
                                num=num,
                                parent_name=article._fullname)
        displayPane = PaneStack()

        # insert reply box only for logged in user
        if c.user_is_loggedin:
            displayPane.append(CommentReplyBox())
            displayPane.append(CommentReplyBox(link_name=article._fullname))

        # finally add the comment listing
        displayPane.append(listing.listing())

        sort_menu = CommentSortMenu(default=sort, type='dropdown2')
        nav_menus = [
            sort_menu,
            NumCommentsMenu(article.num_comments, default=num_comments)
        ]

        content = CommentListing(
            content=displayPane,
            num_comments=article.num_comments,
            nav_menus=nav_menus,
        )

        # Update last viewed time, and return the previous last viewed time.  Actually tracked on the article
        lastViewed = None
        if c.user_is_loggedin:
            clicked = article._getLastClickTime(c.user)
            lastViewed = clicked._date if clicked else None
            article._click(c.user)

        res = ShowMeetup(meetup=meetup,
                         content=content,
                         fullname=article._fullname,
                         lastViewed=lastViewed)

        return BoringPage(pagename=meetup.title,
                          content=res,
                          body_class='meetup').render()
Ejemplo n.º 18
0
    def GET_beta(self, name):
        user_exempt = beta_user_exempt(c.user)

        if name != g.beta_name or (g.beta_require_admin and not user_exempt):
            abort(404)

        content = BetaSettings(
            beta_name=g.beta_name,
            beta_title=g.beta_title,
            description_md=g.beta_description_md[0],
            feedback_sr=g.beta_feedback_sr,
            enabled=c.beta,
            require_gold=g.beta_require_gold and not user_exempt,
            has_gold=c.user_is_loggedin and c.user.gold,
        )

        return BoringPage(
            pagename=g.beta_title,
            content_id='beta-settings',
            content=content,
            show_sidebar=False,
        ).render()
Ejemplo n.º 19
0
    def GET_docs(self, mode):
        # controllers to gather docs from.
        from r2.controllers.api import ApiController, ApiminimalController
        from r2.controllers.apiv1 import APIv1Controller
        from r2.controllers.front import FrontController
        from r2.controllers import listingcontroller

        api_controllers = [(APIv1Controller, '/api/v1'),
                           (ApiController, '/api'),
                           (ApiminimalController, '/api'),
                           (FrontController, '')]
        for name, value in vars(listingcontroller).iteritems():
            if name.endswith('Controller'):
                api_controllers.append((value, ''))

        # merge documentation info together.
        api_docs = defaultdict(dict)
        oauth_index = defaultdict(set)
        for controller, url_prefix in api_controllers:
            controller_docs = self.docs_from_controller(
                controller, url_prefix, mode == 'oauth')
            for section, contents in controller_docs.iteritems():
                api_docs[section].update(contents)
                for variant, method_dict in contents.iteritems():
                    for method, docs in method_dict.iteritems():
                        for scope in docs['oauth_scopes']:
                            oauth_index[scope].add((section, variant, method))

        return BoringPage(_('api documentation'),
                          content=ApiHelp(
                              api_docs=api_docs,
                              oauth_index=oauth_index,
                              mode=mode,
                          ),
                          css_class="api-help",
                          show_sidebar=False,
                          show_firsttext=False).render()
Ejemplo n.º 20
0
 def GET_button_demo_page(self):
     return BoringPage(_("Reddit buttons"),
                       show_sidebar=False,
                       content=ButtonDemoPanel()).render()
Ejemplo n.º 21
0
 def __init__(self, **kwargs):
     BoringPage.__init__(self,
         pagename=_("reddit meetups"),
         show_sidebar=False,
         **kwargs
     )
Ejemplo n.º 22
0
 def GET_socialite_demo_page(self):
     return BoringPage(_("Socialite toolbar"),
                       show_sidebar=False,
                       content=Socialite()).render()
Ejemplo n.º 23
0
 def GET_iphonebookmarklets(self):
     return BoringPage(_("submit"),
                       title="submit to reddit",
                       show_sidebar=False,
                       content=Bookmarklets()).render()
Ejemplo n.º 24
0
 def __init__(self, content_id=None, title_msg=None, pagename=None, content=None, **kw):
     BoringPage.__init__(self, pagename or _('about reddit'), show_sidebar=False, content=content, **kw)
     self.content_id = content_id
     self.title_msg = title_msg
Ejemplo n.º 25
0
 def GET_bookmarklets(self):
     return BoringPage(_("bookmarklets"),
                       show_sidebar=False,
                       content=Bookmarklets()).render()
Ejemplo n.º 26
0
 def GET_widget_demo_page(self):
     return BoringPage(_("reddit widget"),
                       show_sidebar=False,
                       content=WidgetDemoPanel()).render()
Ejemplo n.º 27
0
 def GET_new(self, *a, **kw):
     return BoringPage(pagename='New Meetup',
                       content=NewMeetup(*a, **kw)).render()
Ejemplo n.º 28
0
 def __init__(self, **kwargs):
     BoringPage.__init__(self,
                         pagename=_("reddit meetups"),
                         show_sidebar=False,
                         **kwargs)