コード例 #1
0
ファイル: helpers.py プロジェクト: darkwing/zamboni
def market_tile(context, product, link=True, src=""):
    request = context["request"]
    if product.is_webapp():
        classes = ["product", "mkt-tile"]
        purchased = request.amo_user and product.pk in request.amo_user.purchase_ids()

        is_dev = product.has_author(request.amo_user)
        is_reviewer = acl.check_reviewer(request)
        receipt_type = "developer" if is_dev or is_reviewer else None
        product_dict = product_as_dict(request, product, purchased=purchased, receipt_type=receipt_type)
        product_dict["prepareNavPay"] = reverse("bluevia.prepare_pay", args=[product.app_slug])

        data_attrs = {
            "product": json.dumps(product_dict, cls=JSONEncoder),
            "manifest_url": product.get_manifest_url(),
            "src": src,
        }
        if product.is_premium() and product.premium:
            classes.append("premium")
        c = dict(request=request, product=product, data_attrs=data_attrs, classes=" ".join(classes), link=link)
        t = env.get_template("site/tiles/app.html")
        return jinja2.Markup(t.render(c))

    elif product.is_persona():
        classes = ["product", "mkt-tile", "arrow"]
        product_dict = product_as_dict_theme(request, product)
        data_attrs = {"product": json.dumps(product_dict, cls=JSONEncoder), "src": src}
        c = dict(product=product, data_attrs=data_attrs, classes=" ".join(classes), link=link)
        t = env.get_template("site/tiles/theme.html")
        return jinja2.Markup(t.render(c))
コード例 #2
0
ファイル: helpers.py プロジェクト: ominds/zamboni
def market_tile(context, product, src=''):
    request = context['request']
    if product.is_webapp():
        classes = ['product', 'mkt-tile', 'arrow']
        product_dict = product_as_dict(request, product)
        data_attrs = {
            'product': json.dumps(product_dict, cls=JSONEncoder),
            'manifestUrl': product.manifest_url,
            'src': src
        }
        if product.is_premium() and product.premium:
            classes.append('premium')
        c = dict(product=product, data_attrs=data_attrs,
                 classes=' '.join(classes))
        t = env.get_template('site/tiles/app.html')
        return jinja2.Markup(t.render(c))

    elif product.is_persona():
        classes = ['product', 'mkt-tile', 'arrow']
        product_dict = product_as_dict_theme(request, product)
        data_attrs = {
            'product': json.dumps(product_dict, cls=JSONEncoder),
            'src': src
        }
        c = dict(product=product, data_attrs=data_attrs,
                 classes=' '.join(classes))
        t = env.get_template('site/tiles/theme.html')
        return jinja2.Markup(t.render(c))
コード例 #3
0
ファイル: helpers.py プロジェクト: JohnTheBeloved/zamboni
def report_menu(context, request, report, obj=None):
    """Reports Menu. navigation for the various statistic reports."""
    if obj:
        if isinstance(obj, Addon):
            has_privs = False
            if (request.user.is_authenticated() and (
                acl.action_allowed(request, 'Stats', 'View') or
                obj.has_author(request.amo_user))):
                has_privs = True
            t = env.get_template('stats/addon_report_menu.html')
            if obj.is_webapp() and waffle.switch_is_active('marketplace'):
                t = env.get_template('appstats/app_report_menu.html')
            c = {
                'addon': obj,
                'has_privs': has_privs
            }
            return jinja2.Markup(t.render(c))
        if isinstance(obj, Collection):
            t = env.get_template('stats/collection_report_menu.html')
            c = {
                'collection': obj,
            }
            return jinja2.Markup(t.render(c))

    t = env.get_template('stats/global_report_menu.html')
    return jinja2.Markup(t.render())
コード例 #4
0
ファイル: utils.py プロジェクト: Nolski/olympia
def send_html_mail_jinja(subject, html_template, text_template, context,
                         *args, **kwargs):
    """Sends HTML mail using a Jinja template with autoescaping turned off."""
    # Get a jinja environment so we can override autoescaping for text emails.
    with no_jinja_autoescape():
        html_template = env.get_template(html_template)
        text_template = env.get_template(text_template)
    msg = send_mail(subject, text_template.render(context),
                    html_message=html_template.render(context), *args,
                    **kwargs)
    return msg
コード例 #5
0
ファイル: helpers.py プロジェクト: pombredanne/zamboni
def dev_agreement(context):
    lang = context["request"].LANG
    if lang in settings.AMO_LANGUAGES:
        try:
            template = env.get_template("dev-agreement/%s.html" % lang)
        except jinja2.TemplateNotFound:
            pass
        else:
            return jinja2.Markup(template.render())
    template = env.get_template("dev-agreement/en-US.html")
    return jinja2.Markup(template.render())
コード例 #6
0
ファイル: helpers.py プロジェクト: spasovski/zamboni
def get_doc_template(context, template):
    lang = getattr(context["request"], "LANG", "en-US")
    if lang in settings.AMO_LANGUAGES:
        try:
            template = env.get_template("%s/%s.html" % (template, lang))
        except jinja2.TemplateNotFound:
            pass
        else:
            return jinja2.Markup(template.render())
    template = env.get_template("%s/en-US.html" % template)
    return jinja2.Markup(template.render())
コード例 #7
0
ファイル: helpers.py プロジェクト: clouserw/zamboni
def get_doc_template(context, template):
    lang = getattr(context['request'], 'LANG', 'en-US')
    if lang in settings.AMO_LANGUAGES:
        try:
            template = env.get_template('%s/%s.html' % (template, lang))
        except jinja2.TemplateNotFound:
            pass
        else:
            return jinja2.Markup(template.render())
    template = env.get_template('%s/en-US.html' % template)
    return jinja2.Markup(template.render())
コード例 #8
0
ファイル: utils.py プロジェクト: robhudson/zamboni
def send_html_mail_jinja(subject, html_template, text_template, context, *args, **kwargs):
    """Sends HTML mail using a Jinja template with autoescaping turned off."""
    autoescape_orig = env.autoescape
    env.autoescape = False

    html_template = env.get_template(html_template)
    text_template = env.get_template(text_template)

    msg = send_mail(subject, text_template.render(context), html_message=html_template.render(context), *args, **kwargs)

    env.autoescape = autoescape_orig

    return msg
コード例 #9
0
ファイル: helpers.py プロジェクト: ddurst/olympia
def collection_widgets(context, collection, condensed=False):
    """Displays collection widgets"""
    c = dict(context.items())
    if collection:
        c.update({"condensed": condensed, "c": collection})
        t = env.get_template("bandwagon/collection_widgets.html").render(c)
        return jinja2.Markup(t)
コード例 #10
0
ファイル: helpers.py プロジェクト: mccammos/zamboni
def addon_sharing(context, addon):
    t = env.get_template('sharing/addon_sharing.html')

    # prepare services
    opts = {}
    for service in sharing.SERVICES_LIST:
        service_opts = {}
        if service == EMAIL and not context['request'].user.is_authenticated():
            service_opts['url'] = '/users/login' # TODO reverse URL
            service_opts['target'] = ''
        else:
            service_opts['url'] = '/addon/share/{id}?service={name}'.format(
                id=addon.id, name=service.shortname)
            service_opts['target'] = '_blank'
        opts[service] = service_opts

    # all shares for this add-on: not evaluated, but cached against
    all_shares = ServiceBase.all_shares(addon)

    data = {
        'request': context['request'],
        'user': context['request'].user,
        'addon': addon,
        'services': sharing.SERVICES_LIST,
        'service_opts': opts,
        'email_service': EMAIL,
        'all_shares': all_shares
    }
    return jinja2.Markup(t.render(**data))
コード例 #11
0
ファイル: helpers.py プロジェクト: unghost/zamboni
def platform_list(product):
    platforms = product.platforms
    if platforms:
        t = env.get_template('detail/helpers/platform_list.html')
        return jinja2.Markup(t.render({
            'platforms': platforms,
            'all_platforms': mkt.PLATFORM_TYPES.values()}))
コード例 #12
0
ファイル: helpers.py プロジェクト: aspes/zamboni
def impala_breadcrumbs(context, items=list(), add_default=True, crumb_size=40):
    """
    show a list of breadcrumbs. If url is None, it won't be a link.
    Accepts: [(url, label)]
    """
    if add_default:
        if context.get('WEBAPPS'):
            base_title = _('Apps Marketplace')
        else:
            base_title = page_name(context['request'].APP)
        crumbs = [(urlresolvers.reverse('home'), base_title)]
    else:
        crumbs = []

    # add user-defined breadcrumbs
    if items:
        try:
            crumbs += items
        except TypeError:
            crumbs.append(items)

    crumbs = [(url, truncate(label, crumb_size)) for (url, label) in crumbs]
    c = {'breadcrumbs': crumbs, 'has_home': add_default}
    t = env.get_template('amo/impala/breadcrumbs.html').render(c)
    return jinja2.Markup(t)
コード例 #13
0
ファイル: helpers.py プロジェクト: darkwing/zamboni
def market_button(context, product, receipt_type=None):
    request = context["request"]
    if product.is_webapp():
        purchased = False
        classes = ["button", "product"]
        data_attrs = {"manifest_url": product.get_manifest_url(), "is_packaged": json.dumps(product.is_packaged)}

        # Handle premium apps.
        if product.is_premium() and product.premium:
            # User has purchased app.
            purchased = request.amo_user and product.pk in request.amo_user.purchase_ids()

            # App authors are able to install their apps free of charge.
            if not purchased and request.check_ownership(product, require_author=True):
                purchased = True

            classes.append("premium")
            if waffle.switch_is_active("disabled-payments"):
                classes.append("disabled")

        if purchased:
            label = _("Install")
        else:
            label = product.get_price()

        # Free apps and purchased apps get active install buttons.
        if not product.is_premium() or purchased:
            classes.append("install")

        c = dict(product=product, label=label, purchased=purchased, data_attrs=data_attrs, classes=" ".join(classes))
        t = env.get_template("site/helpers/webapp_button.html")
    return jinja2.Markup(t.render(c))
コード例 #14
0
ファイル: helpers.py プロジェクト: Akamad007/kitsune
def personal_dashboard_tabs(context, active_tab):
    """Render the tabs for the user/group dashboard."""
    c = {'dashboards': personal_dashboards(context['request']),
         'user': context['request'].user,
         'active_tab': active_tab}
    t = env.get_template('dashboards/includes/personal_tabs.html').render(**c)
    return jinja2.Markup(t)
コード例 #15
0
ファイル: helpers.py プロジェクト: beenishkhan/zamboni
def form_field(
    field,
    label=None,
    tag="div",
    req=None,
    opt=False,
    hint=False,
    some_html=False,
    cc_startswith=None,
    cc_maxlength=None,
    grid=False,
    **attrs
):
    c = dict(
        field=field,
        label=label,
        tag=tag,
        req=req,
        opt=opt,
        hint=hint,
        some_html=some_html,
        cc_startswith=cc_startswith,
        cc_maxlength=cc_maxlength,
        grid=grid,
        attrs=attrs,
    )
    t = env.get_template("site/helpers/simple_field.html").render(**c)
    return jinja2.Markup(t)
コード例 #16
0
ファイル: helpers.py プロジェクト: aricha/zamboni
def progress(request, addon, step):
    if addon and not addon.is_webapp():
        return NotImplementedError

    steps = list(mkt.APP_STEPS)
    if waffle.switch_is_active('iarc'):
        # TODO: uncomment next_steps to mkt/constants/submit.
        steps[3] = ('next_steps', _('Next Steps'))

    completed = []

    # TODO: Hide "Developer Account" step if user already read Dev Agreement.
    #if request.amo_user.read_dev_agreement:
    #    steps = del_by_key(steps, 'terms')

    if addon:
        try:
            completed = addon.appsubmissionchecklist.get_completed()
        except AppSubmissionChecklist.DoesNotExist:
            pass

    # We don't yet have a checklist yet if we just read the Dev Agreement.
    if not completed and step and step != 'terms':
        completed = ['terms']

    c = dict(steps=steps, current=step, completed=completed)
    t = env.get_template('submit/helpers/progress.html').render(**c)
    return jinja2.Markup(t)
コード例 #17
0
ファイル: helpers.py プロジェクト: MaxMillion/zamboni
def device_list(product):
    device_types = product.device_types
    if device_types:
        t = env.get_template('detail/helpers/device_list.html')
        return jinja2.Markup(t.render({
            'device_types': device_types,
            'all_device_types': DEVICE_TYPES.values()}))
コード例 #18
0
ファイル: helpers.py プロジェクト: AALEKH/zamboni
def tag_link(tag, min_count, max_count, min_level=1):
    """create the tag cloud link with the poper tagLevel class"""
    factor = max(range_convert(tag.num_addons, 0, max_count, 1, 10),
                 min_level)
    t = env.get_template('tags/tag_link.html').render({'factor': factor,
                                                       'tag': tag})
    return jinja2.Markup(t)
コード例 #19
0
ファイル: helpers.py プロジェクト: sjhewitt/zamboni
def market_button(context, product, receipt_type=None):
    request = context["request"]
    if product.is_webapp():
        faked_purchase = False
        purchased = request.amo_user and product.pk in request.amo_user.purchase_ids()
        # App authors are able to install their apps free of charge.
        if not purchased and request.check_ownership(product, require_author=True):
            purchased = faked_purchase = True
        classes = ["button", "product"]
        label = product.get_price()
        product_dict = product_as_dict(request, product, purchased=purchased, receipt_type=receipt_type)
        data_attrs = {"product": json.dumps(product_dict, cls=JSONEncoder), "manifestUrl": product.manifest_url}
        if product.is_premium() and product.premium:
            classes.append("premium")
        if not product.is_premium() or purchased:
            classes.append("install")
            label = _("Install")
        c = dict(
            product=product,
            label=label,
            purchased=purchased,
            faked_purchase=faked_purchase,
            data_attrs=data_attrs,
            classes=" ".join(classes),
        )
        t = env.get_template("site/helpers/webapp_button.html")
    return jinja2.Markup(t.render(c))
コード例 #20
0
ファイル: helpers.py プロジェクト: dbialer/zamboni
def progress(request, addon, step):
    if addon and not addon.is_webapp():
        return NotImplementedError

    steps = list(mkt.APP_STEPS)
    completed = []

    # TODO: Hide "Developer Account" step if user already read Dev Agreement.
    #if request.amo_user.read_dev_agreement:
    #    steps = del_by_key(steps, 'terms')

    if addon:
        try:
            completed = addon.appsubmissionchecklist.get_completed()
        except AppSubmissionChecklist.DoesNotExist:
            pass

    # We don't yet have a checklist yet if we just read the Dev Agreement.
    if not completed and step and step != 'terms':
        completed = ['terms']

    if waffle.switch_is_active('disable-payments'):
        steps = del_by_key(steps, 'payments')

    # Payments step was skipped, so remove it.
    elif step == 'done' and 'payments' not in completed:
        steps = del_by_key(steps, 'payments')

    c = dict(steps=steps, current=step, completed=completed)
    t = env.get_template('submit/helpers/progress.html').render(**c)
    return jinja2.Markup(t)
コード例 #21
0
def market_button(context, product, receipt_type=None, classes=None):
    request = context['request']
    if product.is_webapp():
        purchased = False
        classes = (classes or []) + ['button', 'product']
        reviewer = receipt_type == 'reviewer'
        data_attrs = {'manifest_url': product.get_manifest_url(reviewer),
                      'is_packaged': json.dumps(product.is_packaged)}

        # Handle premium apps.
        if product.is_premium() and product.premium:
            # User has purchased app.
            purchased = (request.amo_user and
                         product.pk in request.amo_user.purchase_ids())

            # App authors are able to install their apps free of charge.
            if (not purchased and
                    request.check_ownership(product, require_author=True)):
                purchased = True

        if purchased:
            label = _('Install')
        else:
            label = product.get_price()

        # Free apps and purchased apps get active install buttons.
        if not product.is_premium() or purchased:
            classes.append('install')

        c = dict(product=product, label=label, purchased=purchased,
                 data_attrs=data_attrs, classes=' '.join(classes))
        t = env.get_template('site/helpers/webapp_button.html')
    return jinja2.Markup(t.render(c))
コード例 #22
0
ファイル: helpers.py プロジェクト: lauraxt/zamboni
def market_button(context, product, receipt_type=None):
    request = context['request']
    if product.is_webapp():
        faked_purchase = False
        purchased = (request.amo_user and
                     product.pk in request.amo_user.purchase_ids())
        # App authors are able to install their apps free of charge.
        if (not purchased and
            request.check_ownership(product, require_author=True)):
            purchased = faked_purchase = True
        classes = ['button', 'product']
        label = product.get_price()
        data_attrs = {
            'manifestUrl': product.manifest_url
        }
        if product.is_premium() and product.premium:
            classes.append('premium')
            if waffle.switch_is_active('disabled-payments'):
                classes.append('disabled')
        if not product.is_premium() or purchased:
            classes.append('install')
            label = _('Install')
        c = dict(product=product, label=label, purchased=purchased,
                 faked_purchase=faked_purchase, data_attrs=data_attrs,
                 classes=' '.join(classes))
        t = env.get_template('site/helpers/webapp_button.html')
    return jinja2.Markup(t.render(c))
コード例 #23
0
ファイル: helpers.py プロジェクト: gkoberger/zamboni
def promo_slider(context, products, feature=False):
    c = {
        'products': products,
        'feature': feature,
    }
    t = env.get_template('site/promo_slider.html')
    return jinja2.Markup(t.render(c))
コード例 #24
0
ファイル: cron.py プロジェクト: bebef1987/zamboni
def mail_pending_refunds():
    # First find all the pending refunds and the addons for them.
    pending = dict((Refund.objects.filter(status=amo.REFUND_PENDING)
                                  .values_list('contribution__addon_id')
                                  .annotate(Count('id'))))
    if not pending:
        log.info('No refunds to email')
        return
    log.info('Mailing pending refunds: %s refunds found' % len(pending))

    # Find all owners of those addons.
    users = (AddonUser.objects.filter(role=amo.AUTHOR_ROLE_OWNER,
                                      addon__in=pending.keys())
                              .values_list('addon_id', 'user__email'))

    # Group up the owners. An owner could have more than one addon and each
    # addon can have more than one owner.
    owners = {}
    for addon_id, email in users:
        owners.setdefault(email, [])
        owners[email].append(addon_id)

    # Send the emails out.
    for owner, addon_ids in owners.items():
        log.info('Sending refund emails to: %s about %s' %
                 (email, ', '.join([str(i) for i in addon_ids])))
        addons = Addon.objects.filter(pk__in=addon_ids)
        ctx = {'addons': addons, 'refunds': pending}
        send_mail('Pending refund requests at the Mozilla Marketplace',
                  env.get_template('market/emails/refund-nag.txt').render(ctx),
                  from_email=settings.NOBODY_EMAIL,
                  recipient_list=[owner])
コード例 #25
0
ファイル: helpers.py プロジェクト: mnoorenberghe/zamboni
def market_button(context, product):
    request = context['request']
    if product.is_webapp():
        faked_purchase = False
        purchased = (request.amo_user and
                     product.pk in request.amo_user.purchase_ids())
        is_dev = request.check_ownership(product, require_owner=False,
                                         ignore_disabled=True)
        if (not purchased and is_dev or product.is_pending() and
            (context['is_reviewer'] or context['is_admin'])):
            purchased = faked_purchase = True
        classes = ['button', 'product']
        label = product.get_price()
        product_dict = product_as_dict(request, product, purchased=purchased)
        data_attrs = {
            'product': json.dumps(product_dict, cls=JSONEncoder),
            'manifestUrl': product.manifest_url
        }
        if product.is_premium() and product.premium:
            classes.append('premium')
        if not product.is_premium() or purchased:
            classes.append('install')
            label = _('Install')
        c = dict(product=product, label=label, purchased=purchased,
                 faked_purchase=faked_purchase, data_attrs=data_attrs,
                 classes=' '.join(classes))
        t = env.get_template('site/helpers/webapp_button.html')
    return jinja2.Markup(t.render(c))
コード例 #26
0
ファイル: helpers.py プロジェクト: almosteverywhere/zamboni
def dev_agreement(context):
    langs = ['en-US', 'es', 'pl']
    lang = context['request'].LANG
    if lang not in langs:
        lang = 'en-US'
    template = env.get_template('dev-agreement/%s.html' % lang)
    return jinja2.Markup(template.render())
コード例 #27
0
ファイル: helpers.py プロジェクト: almosteverywhere/zamboni
def mkt_breadcrumbs(context, product=None, items=None, crumb_size=40,
                    add_default=True, cls=None):
    """
    Wrapper function for ``breadcrumbs``.

    **items**
        list of [(url, label)] to be inserted after Add-on.
    **product**
        Adds the App/Add-on name to the end of the trail.  If items are
        specified then the App/Add-on will be linked.
    **add_default**
        Prepends trail back to home when True.  Default is True.
    """
    if add_default:
        crumbs = [(reverse('home'), _('Home'))]
    else:
        crumbs = []

    if product:
        if items:
            url_ = product.get_detail_url()
        else:
            # The Product is the end of the trail.
            url_ = None
        crumbs += [(None, _('Apps')), (url_, product.name)]
    if items:
        crumbs.extend(items)

    if len(crumbs) == 1:
        crumbs = []

    crumbs = [(u, truncate(label, crumb_size)) for (u, label) in crumbs]
    t = env.get_template('site/helpers/breadcrumbs.html').render(
        breadcrumbs=crumbs, cls=cls)
    return jinja2.Markup(t)
コード例 #28
0
ファイル: helpers.py プロジェクト: Hugh-McCurdy/kitsune
def breadcrumbs(context, items=list(), add_default=True):
    """
    Show a list of breadcrumbs. If url is None, it won't be a link.
    Accepts: [(url, label)]
    """
    if add_default:
        crumbs = [(reverse('home'), _lazy(u'Firefox Help'))]
    else:
        crumbs = []

    # add user-defined breadcrumbs
    if items:
        try:
            crumbs += items
        except TypeError:
            crumbs.append(items)

    c = {'breadcrumbs': crumbs}

    if show_new_sumo(context['request']):
        layout = 'layout/breadcrumbs.html'
    else:
        layout = 'layout/breadcrumbs-old.html'

    t = env.get_template(layout).render(c)
    return jinja2.Markup(t)
コード例 #29
0
ファイル: helpers.py プロジェクト: beenishkhan/zamboni
def device_list(product):
    device_types = product.device_types
    all_device_types = DeviceType.objects.all()
    if device_types:
        t = env.get_template('detail/helpers/device_list.html')
        return jinja2.Markup(t.render(device_types=device_types,
        							  all_device_types=all_device_types))
コード例 #30
0
ファイル: helpers.py プロジェクト: bobsilverberg/kitsune
def breadcrumbs(context, items=list(), add_default=True):
    """
    Show a list of breadcrumbs. If url is None, it won't be a link.
    Accepts: [(url, label)]
    """
    if add_default:
        if waffle.flag_is_active(context["request"], "new-theme"):
            first_crumb = u"Home"
        else:
            first_crumb = u"Firefox Help"

        crumbs = [(reverse("home"), _lazy(first_crumb))]
    else:
        crumbs = []

    # add user-defined breadcrumbs
    if items:
        try:
            crumbs += items
        except TypeError:
            crumbs.append(items)

    c = {"breadcrumbs": crumbs}

    if show_new_sumo(context["request"]):
        layout = "layout/breadcrumbs.html"
    else:
        layout = "layout/breadcrumbs-old.html"

    t = env.get_template(layout).render(c)
    return jinja2.Markup(t)
コード例 #31
0
ファイル: helpers.py プロジェクト: kewisch/addons-server
def license_link(license):
    """Link to a code license, including icon where applicable."""
    # If passed in an integer, try to look up the License.
    from olympia.versions.models import License
    if isinstance(license, (long, int)):
        if license in PERSONA_LICENSES_IDS:
            # Grab built-in license.
            license = PERSONA_LICENSES_IDS[license]
        else:
            # Grab custom license.
            license = License.objects.filter(id=license)
            if not license.exists():
                return ''
            license = license[0]
    elif not license:
        return ''

    if not getattr(license, 'builtin', True):
        return _('Custom License')

    t = env.get_template('amo/license_link.html').render({'license': license})
    return jinja2.Markup(t)
コード例 #32
0
ファイル: helpers.py プロジェクト: Dreadchild/zamboni
def breadcrumbs(context, items=list(), add_default=True, crumb_size=40):
    """
    show a list of breadcrumbs. If url is None, it won't be a link.
    Accepts: [(url, label)]
    """
    if add_default:
        app = context['request'].APP
        crumbs = [(urlresolvers.reverse('home'), page_name(app))]
    else:
        crumbs = []

    # add user-defined breadcrumbs
    if items:
        try:
            crumbs += items
        except TypeError:
            crumbs.append(items)

    crumbs = [(url, truncate(label, crumb_size)) for (url, label) in crumbs]
    c = {'breadcrumbs': crumbs}
    t = env.get_template('amo/breadcrumbs.html').render(c)
    return jinja2.Markup(t)
コード例 #33
0
ファイル: helpers.py プロジェクト: superduper/zamboni
def mkt_breadcrumbs(context,
                    product=None,
                    items=None,
                    crumb_size=40,
                    add_default=True,
                    cls=None):
    """
    Wrapper function for ``breadcrumbs``.

    **items**
        list of [(url, label)] to be inserted after Add-on.
    **product**
        Adds the App/Add-on name to the end of the trail.  If items are
        specified then the App/Add-on will be linked.
    **add_default**
        Prepends trail back to home when True.  Default is False.
    """
    if add_default:
        crumbs = [(reverse('home'), _('Home'))]
    else:
        crumbs = []

    if product:
        if items:
            url_ = product.get_detail_url()
        else:
            # The Product is the end of the trail.
            url_ = None
        crumbs += [(reverse('browse.apps'), _('Apps')), (url_, product.name)]
    if items:
        crumbs.extend(items)

    if len(crumbs) == 1:
        crumbs = []

    crumbs = [(url_, truncate(label, crumb_size)) for (url_, label) in crumbs]
    t = env.get_template('site/helpers/breadcrumbs.html').render(
        breadcrumbs=crumbs, cls=cls)
    return jinja2.Markup(t)
コード例 #34
0
ファイル: helpers.py プロジェクト: ayushagrawal288/zamboni
def market_button(context, product, receipt_type=None, classes=None):
    request = context['request']
    purchased = False
    classes = (classes or []) + ['button', 'product']
    reviewer = receipt_type == 'reviewer'
    data_attrs = {'manifest_url': product.get_manifest_url(reviewer),
                  'is_packaged': jsonlib.dumps(product.is_packaged)}

    installed = None

    if request.user.is_authenticated():
        installed_set = request.user.installed_set
        installed = installed_set.filter(addon=product).exists()

    # Handle premium apps.
    if product.has_premium():
        # User has purchased app.
        purchased = (request.user.is_authenticated() and
                     product.pk in request.user.purchase_ids())

        # App authors are able to install their apps free of charge.
        if (not purchased and
                request.check_ownership(product, require_author=True)):
            purchased = True

    if installed or purchased or not product.has_premium():
        label = _('Install')
    else:
        label = product.get_tier_name()

    # Free apps and purchased apps get active install buttons.
    if not product.is_premium() or purchased:
        classes.append('install')

    c = dict(product=product, label=label, purchased=purchased,
             data_attrs=data_attrs, classes=' '.join(classes))
    t = env.get_template('site/helpers/webapp_button.html')
    return jinja2.Markup(t.render(c))
コード例 #35
0
def breadcrumbs(context, items=list(), add_default=True):
    """
    Show a list of breadcrumbs. If url is None, it won't be a link.
    Accepts: [(url, label)]
    """
    if add_default:
        first_crumb = u'Home'

        crumbs = [(reverse('home'), _lazy(first_crumb))]
    else:
        crumbs = []

    # add user-defined breadcrumbs
    if items:
        try:
            crumbs += items
        except TypeError:
            crumbs.append(items)

    c = {'breadcrumbs': crumbs}

    t = env.get_template('layout/breadcrumbs.html').render(c)
    return jinja2.Markup(t)
コード例 #36
0
ファイル: helpers.py プロジェクト: gregglind/zamboni
def market_button(context, product, receipt_type=None, classes=None):
    request = context['request']
    if product.is_webapp():
        purchased = False
        classes = (classes or []) + ['button', 'product']
        data_attrs = {
            'manifest_url': product.get_manifest_url(),
            'is_packaged': json.dumps(product.is_packaged)
        }

        # Handle premium apps.
        if product.is_premium() and product.premium:
            # User has purchased app.
            purchased = (request.amo_user
                         and product.pk in request.amo_user.purchase_ids())

            # App authors are able to install their apps free of charge.
            if (not purchased
                    and request.check_ownership(product, require_author=True)):
                purchased = True

        if purchased:
            label = _('Install')
        else:
            label = product.get_price()

        # Free apps and purchased apps get active install buttons.
        if not product.is_premium() or purchased:
            classes.append('install')

        c = dict(product=product,
                 label=label,
                 purchased=purchased,
                 data_attrs=data_attrs,
                 classes=' '.join(classes))
        t = env.get_template('site/helpers/webapp_button.html')
    return jinja2.Markup(t.render(c))
コード例 #37
0
ファイル: helpers.py プロジェクト: zzdjk6/zamboni
def progress(request, addon, step):
    if addon and not addon.is_webapp():
        return NotImplementedError

    steps = list(mkt.APP_STEPS)
    completed = []

    # TODO: Hide "Developer Account" step if user already read Dev Agreement.
    #if request.amo_user.read_dev_agreement:
    #    steps = del_by_key(steps, 'terms')

    if addon:
        try:
            completed = addon.appsubmissionchecklist.get_completed()
        except AppSubmissionChecklist.DoesNotExist:
            pass

    # We don't yet have a checklist yet if we just read the Dev Agreement.
    if not completed and step and step != 'terms':
        completed = ['terms']

    c = dict(steps=steps, current=step, completed=completed)
    t = env.get_template('submit/helpers/progress.html').render(**c)
    return jinja2.Markup(t)
コード例 #38
0
def promo_grid(context, products):
    t = env.get_template('browse/helpers/promo_grid.html')
    return jinja2.Markup(t.render(products=products))
コード例 #39
0
ファイル: messages.py プロジェクト: writefaruq/zamboni
def _make_message(title=None, message=None, title_safe=False,
                                            message_safe=False):
    c = {'title': title, 'message': message,
         'title_safe': title_safe, 'message_safe': message_safe}
    t = env.get_template('message_content.html').render(**c)
    return jinja2.Markup(t)
コード例 #40
0
def mobile_paginator(pager):
    t = env.get_template('includes/mobile/paginator.html')
    return jinja2.Markup(t.render({'pager': pager}))
コード例 #41
0
def mobile_paginator(pager):
    t = env.get_template('amo/mobile/paginator.html')
    return jinja2.Markup(t.render(pager=pager))
コード例 #42
0
def escape_template(context, template):
    t = env.get_template(template).render(context)
    return jinja2.Markup(escapejs(t))
コード例 #43
0
ファイル: helpers.py プロジェクト: waseem18/zamboni
def impala_paginator(pager):
    t = env.get_template('site/impala_paginator.html')
    return jinja2.Markup(t.render({'pager': pager}))
コード例 #44
0
def promo_grid(context, products, src=''):
    t = env.get_template('browse/helpers/promo_grid.html')
    return jinja2.Markup(
        t.render(request=context['request'], products=products, src=src))
コード例 #45
0
ファイル: helpers.py プロジェクト: j-barron/zamboni
def mobile_reviewers_paginator(pager):
    # Paginator for non-responsive version of Reviewer Tools.
    t = env.get_template('reviewers/includes/reviewers_paginator.html')
    return jinja2.Markup(t.render({'pager': pager}))
コード例 #46
0
ファイル: admin.py プロジェクト: QAqua/snippets-service
 def snippets(self, obj):
     """Snippets using this file."""
     template = env.get_template('base/uploadedfile_snippets.html')
     return template.render({'snippets': obj.snippets})
コード例 #47
0
def user_header(account, title, is_admin=False, page_type=''):
    t = env.get_template('lookup/helpers/user_header.html')
    return jinja2.Markup(t.render(account=account, title=title,
                                  is_admin=is_admin, page_type=page_type))
コード例 #48
0
ファイル: helpers.py プロジェクト: flyun/zamboni
def market_tile(context, product, link=True, src=''):
    request = context['request']
    if product.is_webapp():
        classes = []
        notices = []
        purchased = (request.amo_user
                     and product.pk in request.amo_user.purchase_ids())

        is_dev = product.has_author(request.amo_user)
        receipt_type = 'developer' if is_dev else None
        product_dict = product_as_dict(request,
                                       product,
                                       purchased=purchased,
                                       receipt_type=receipt_type,
                                       src=src)
        product_dict['prepareNavPay'] = reverse('webpay.prepare_pay',
                                                args=[product.app_slug])

        data_attrs = {
            'product': json.dumps(product_dict, cls=JSONEncoder),
            'manifest_url': product.get_manifest_url(),
            'src': src
        }

        if product.is_premium() and product.premium:
            classes.append('premium')

            if waffle.switch_is_active('disabled-payments'):
                notices.append(
                    _('This app is temporarily unavailable for '
                      'purchase.'))
            elif not request.GAIA:
                notices.append(
                    _('This app is available for purchase on '
                      'only Firefox OS.'))

        sumo_url = ('https://support.mozilla.org/en-US/kb/'
                    'how-access-firefox-marketplace')
        if (not request.GAIA and (product.device_types == [amo.DEVICE_GAIA]
                                  or product.is_packaged)):
            # This includes packaged apps.
            notices.append(_('This app is available on only Firefox OS.'))
            # TODO: Add a link when we have one.
            classes.append('firefoxos')
        if (not (request.MOBILE or request.TABLET or request.GAIA)
                and amo.DEVICE_DESKTOP not in product.device_types):
            notices.append(
                _('This is a mobile-only app. Please try this '
                  'app in Firefox Mobile on your Android '
                  'phone. (<b data-href="%s">Learn more</b>)') % sumo_url)
        if not request.TABLET and product.device_types == [amo.DEVICE_TABLET]:
            notices.append(
                _('This is a tablet-only app. Please try this '
                  'app in Firefox Mobile on your Android '
                  'tablet. (<b data-href="%s">Learn more</b>)') % sumo_url)

        firefox_compat = check_firefox(
            ua=request.META.get('HTTP_USER_AGENT', ''))
        if firefox_compat['need_firefox'] or firefox_compat['need_upgrade']:
            classes.append('incompatible')

        if notices or 'incompatible' in classes:
            classes += ['bad', 'disabled']

        c = dict(request=request,
                 product=product,
                 data_attrs=data_attrs,
                 classes=classes,
                 link=link,
                 notices=notices[:1])
        t = env.get_template('site/tiles/app.html')
        return jinja2.Markup(t.render(c))

    elif product.is_persona():
        classes = ['product', 'mkt-tile']
        product_dict = product_as_dict_theme(request, product)
        data_attrs = {
            'product': json.dumps(product_dict, cls=JSONEncoder),
            'src': src
        }
        c = dict(product=product,
                 data_attrs=data_attrs,
                 classes=' '.join(classes),
                 link=link)
        t = env.get_template('site/tiles/theme.html')
        return jinja2.Markup(t.render(c))
コード例 #49
0
 def _mail(self, template, subject, context):
     template = env.get_template(template)
     body = template.render(context)
     send_mail(subject, body, settings.MARKETPLACE_EMAIL,
               [self.user.email], fail_silently=True)
コード例 #50
0
def user_collection_list(collections=[], heading='', id='', link=None):
    """list of collections, as used on the user profile page"""
    c = {'collections': collections, 'heading': heading, 'link': link,
         'id': id}
    t = env.get_template('bandwagon/users/collection_list.html').render(**c)
    return jinja2.Markup(t)
コード例 #51
0
def no_results_amo():
    # This prints a "No results found" message. That's all. Carry on.
    t = env.get_template('amo/no_results.html').render()
    return jinja2.Markup(t)
コード例 #52
0
ファイル: helpers.py プロジェクト: sunbiz/zamboni
def timelabel(context, time):
    t = env.get_template('site/helpers/timelabel.html').render(time=time)
    return jinja2.Markup(t)
コード例 #53
0
def mobile_impala_paginator(pager):
    # Impala-style paginator that is easier to mobilefy.
    t = env.get_template('amo/mobile/impala_paginator.html')
    return jinja2.Markup(t.render(pager=pager))
コード例 #54
0
ファイル: helpers.py プロジェクト: sunbiz/zamboni
def more_button(pager):
    t = env.get_template('site/paginator.html')
    return jinja2.Markup(t.render(pager=pager))
コード例 #55
0
def impala_paginator(pager):
    t = env.get_template('amo/impala/paginator.html')
    return jinja2.Markup(t.render(pager=pager))
コード例 #56
0
 def render():
     t = env.get_template('browse/helpers/category_slider.html')
     return jinja2.Markup(t.render(categories=_categories(rand, limit)))
コード例 #57
0
 def render(self):
     c = {'pager': self.pager, 'num_pages': self.num_pages,
          'count': self.count}
     t = env.get_template('includes/paginator.html').render(c)
     return jinja2.Markup(t)
コード例 #58
0
def promo_slider(context, products, feature=False):
    t = env.get_template('browse/helpers/promo_slider.html')
    return jinja2.Markup(t.render(products=products, feature=feature))
コード例 #59
0
ファイル: admin.py プロジェクト: QAqua/snippets-service
 def preview(self, obj):
     template = env.get_template('base/uploadedfile_preview.html')
     return template.render({'file': obj})
コード例 #60
0
def app_header(context, app, page_type=''):
    t = env.get_template('lookup/helpers/app_header.html')
    is_admin = acl.action_allowed(context['request'], 'Users', 'Edit')
    return jinja2.Markup(t.render(app=app, page_type=page_type,
                                  is_admin=is_admin))