예제 #1
0
    def __call__(self, context):
        # Just an example list of content for our vocabulary,
        # this can be any static or dynamic data, a catalog result for example.
        items = [
            VocabItem(u'level_D', _(u'level_D')),
            VocabItem(u'level_C', _(u'level_C')),
            VocabItem(u'level_B', _(u'level_B')),
            VocabItem(u'level_A', _(u'level_A')),
        ]

        # Fix context if you are using the vocabulary in DataGridField.
        # See https://github.com/collective/collective.z3cform.datagridfield/issues/31:  # NOQA: 501
        if not IDexterityContent.providedBy(context):
            req = getRequest()
            context = req.PARENTS[0]

        # create a list of SimpleTerm items:
        terms = []
        for item in items:
            terms.append(
                SimpleTerm(
                    value=item.token,
                    token=str(item.token),
                    title=item.value,
                ))
        # Create a SimpleVocabulary from the terms list and return it:
        return SimpleVocabulary(terms)
예제 #2
0
    def setWishList(self, wishItemUID):
        user = api.user.get_current()
        wishList = user.getProperty('wishList')
        checkUID = api.content.find(portal_type='Product', UID=wishItemUID)
        if len(checkUID) > 0:
            if wishList:
                if wishItemUID not in wishList:
                    wishList = wishList.split(', ')
                    wishList.append(wishItemUID)
                    wishList = ', '.join(wishList)
                else:
                    msg = _(u'Add WishList Repeat!!')
                    trans_msg = api.portal.translate(
                        msg, lang=self.context.Language())
                    return json.dumps({'error': trans_msg})
            else:
                wishList = str(wishItemUID)
            alsoProvides(self.request, IDisableCSRFProtection)
            user.setMemberProperties(mapping={'wishList': wishList})

            msg = _(u'Add WishList Success!!')
            trans_msg = api.portal.translate(msg, lang=self.context.Language())
            return json.dumps({'success': trans_msg})
        else:
            msg = _(u'wishItemUID is not valid!!')
            trans_msg = api.portal.translate(msg, lang=self.context.Language())
            return json.dumps({'error': trans_msg})
예제 #3
0
class IProductimg(model.Schema):
    title = schema.TextLine(title=_(u'Title'), required=False)

    image = namedfile.NamedBlobImage(
        title=_(u'Product Image'),
        required=True,
    )
class IInform(Form.Schema):

    email = schema.Text(
        title=_(u'email'),
        required=False,
    )
    cellphone = schema.Text(
        title=_(u'cellphone'),
        required=False,
    )
    address = schema.Text(title=_(u'address'), required=False)
 def email_invariant(data):
     com_email = data.email
     r_email = data.r_email
     if com_email:
         for email in com_email.split('\r\n'):
             if not re.match(
                     r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$",
                     email):
                 raise Invalid(_(u'Your Email is not valid!'))
     if r_email and not re.match(
             r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$", r_email):
         raise Invalid(_(u'Receive Email is not valid!'))
예제 #6
0
class IDict(Form.Schema):

    sortList = schema.Text(
        title=_(u'store category and subject'),
        required=False,
    )
    brandList = schema.Text(
        title=_(u'store brand count number'),
        required=False,
    )
    productData = schema.Text(
	title=_(u'store full product data'),
	required=False
    )
예제 #7
0
 def __call__(self):
     query = self.request.form.copy()
     if not api.user.is_anonymous():
         if query.has_key('wishItemUID'):
             wishItemUID  = query['wishItemUID']
             return self.delWishList(wishItemUID)
         else:
             msg = _(u'Query string supplied is not valid')
             trans_msg = api.portal.translate(msg, lang=self.context.Language())
             return json.dumps({'error': trans_msg})
     else: 
         msg = _(u'Add WishList Must Be Login!!')
         trans_msg = api.portal.translate(msg, lang=self.context.Language())
         return json.dumps({'error': trans_msg})
예제 #8
0
class IProductreview(model.Schema):
    title = schema.TextLine(
        title=_(u'Title'),
        required=False
    )

    review = schema.Text(
        title=_(u'Review'),
        required=False
    )

    rating = schema.TextLine(
        title=_(u'Rating'),
        required=False
    )
예제 #9
0
    def __call__(self):
        self.viewTitle = _(u'Contact Us')
        self.address = api.portal.get_registry_record('address',
                                                      interface=IInform)
        self.cellphone = api.portal.get_registry_record('cellphone',
                                                        interface=IInform)

        request = self.request
        name = request.get('name', '')
        email = request.get('email', '')
        message = request.get('message', '')
        if name and email and message:
            body_str = """Name:{}<br/>Email:{}<br/>Message:{}""".format(
                name, email, message)
            mime_text = MIMEText(body_str, 'html', 'utf-8')
            r_email = api.portal.get_registry_record('r_email',
                                                     interface=IInform) or ''
            api.portal.send_email(
                recipient=r_email,
                sender=email,
                subject="Contact Us From {}".format(name),
                body=mime_text.as_string(),
            )
            api.portal.show_message(message='發送成功!'.decode('utf-8'),
                                    request=request)

        return self.template()
예제 #10
0
    def __call__(self):
        self.viewTitle = _(u'Confirm Cart')
        request = self.request
        abs_url = api.portal.get().absolute_url()
        cookie_shop_cart = request.cookies.get('shop_cart')
        if not cookie_shop_cart or not json.loads(cookie_shop_cart):
            api.portal.show_message(message='Shop Cart Is Empty',
                                    request=request,
                                    type='warn')
            request.response.redirect('%s/products' % abs_url)
            return

        shop_cart = json.loads(request.cookies['shop_cart'])
        uidList = shop_cart.keys()
        productData = []
        totalNumber = 0
        for uid in uidList:
            product = api.content.get(UID=uid)
            if product:
                amount = int(shop_cart[str(uid)])
                title = product.title
                price = product.price
                salePrice = product.salePrice
                abs_url = product.absolute_url()
                totalNumber += self.salePrice(product) * amount

                productData.append(
                    [title, price, salePrice, abs_url, amount, uid, product])
        self.totalNumber = totalNumber
        self.productData = productData
        return self.template()
예제 #11
0
    def __call__(self):
        self.viewTitle = _(u'Return')
        request = self.request
        first_name = request.get('first_name')
        last_name = request.get('last_name')
        phone = request.get('phone')
        product_name = request.get('product_name')
        product_code = request.get('product_code')
        date = request.get('date')
        opened = request.get('opened')
        order_id = request.get('order_id')
        reason = request.get('reason')
        amount = request.get('amount')
        detail = request.get('detail')

        if first_name and last_name:
            body_str = """fisrst_name:%s<br>last_name:%s<br>phone:%s<br>date:%s<br>order_id:%s<br>product_name:%s<br>product_code:%s<br>
			amount:%s<br>reason:%s<br>opened:%s<br>detail:%s<br>
                    """ % (first_name, last_name, phone, date, order_id,
                           product_name, product_code, amount, reason, opened,
                           detail)
            mime_text = MIMEText(body_str, 'html', 'utf-8')
            api.portal.send_email(
                recipient="*****@*****.**",
                sender="*****@*****.**",
                subject="退貨申請",
                body=mime_text.as_string(),
            )
        return self.template()
예제 #12
0
class IMapCategory(model.Schema):
    """
    """

    mapCategory = schema.Choice(
        title=_(u'Map Category'),
        vocabulary='alpha.content.MapCategory',
    )
예제 #13
0
class IUser(Form.Schema):

    promoCode = schema.Dict(
        title=_(u'Exist PromoCode'),
        key_type=schema.ASCIILine(),
        value_type=schema.ASCIILine(),
        required=False,
    )
예제 #14
0
class IInform(Form.Schema):

    description = schema.Text(
        title=_(u'Company Description'),
        required=False,
    )
    email = schema.Text(
        title=_(u'email'),
        required=False,
    )
    cellphone = schema.Text(
        title=_(u'cellphone'),
        required=False,
    )
    address = schema.Text(title=_(u'address'), required=False)
    r_email = schema.TextLine(
        title=_(u'Recipient Email'),
        required=False,
    )
    fb_link = schema.TextLine(
        title=_(u'Facebook Link'),
        required=False,
    )
    weibo_link = schema.TextLine(
        title=_(u'Weibo Link'),
        required=False,
    )
    youku_link = schema.TextLine(
        title=_(u'Youku Link'),
        required=False,
    )
    youtube_link = schema.TextLine(
        title=_(u'Youtube Link'),
        required=False,
    )

    @invariant
    def email_invariant(data):
        com_email = data.email
        r_email = data.r_email
        if com_email:
            for email in com_email.split('\r\n'):
                if not re.match(
                        r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$",
                        email):
                    raise Invalid(_(u'Your Email is not valid!'))
        if r_email and not re.match(
                r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$", r_email):
            raise Invalid(_(u'Receive Email is not valid!'))
예제 #15
0
    def test_vocab_map_category(self):
        vocab_name = 'alpha.content.MapCategory'
        factory = getUtility(IVocabularyFactory, vocab_name)
        self.assertTrue(IVocabularyFactory.providedBy(factory))

        vocabulary = factory(self.portal)
        self.assertTrue(IVocabularyTokenized.providedBy(vocabulary))
        self.assertEqual(
            vocabulary.getTerm('sony-a7r-iii').title,
            _(u'Sony Aplha 7R III'),
        )
예제 #16
0
    def __call__(self):
        self.viewTitle = _('Brands')
	brandList = {}
	productBrains = api.content.find(context=api.portal.get()['products'], portal_type='Product')
	for item in productBrains:
            obj = item.getObject()
            brand = obj.brand
	    firstLetter = brand[0]
	    if brandList.has_key(firstLetter):
                if brand not in brandList[firstLetter]:
                    brandList[firstLetter].append(brand)
	    else:
	        brandList[firstLetter] = [brand]
	self.brandList = brandList
	return self.template()
예제 #17
0
    def __call__(self):
        self.viewTitle = _(u'Personal Details')
        if not api.user.is_anonymous():
            formdata = self.request.form
            if formdata.has_key('email') and formdata.has_key('fName'):
                formNameList = ['fName'   , 'lName', 'email', 'phone'  , 'fax'  , 'company', 'address1', 
                                'address2', 'city' , 'zip'  , 'country', 'state', 'newsletter']
                self.setProperties(formNameList)
                current_url = self.request.URL
                self.request.response.redirect(current_url)

            return self.template()
        else:
            portal_url = self.context.portal_url()
            self.request.response.redirect(portal_url+'/login')
예제 #18
0
    def __call__(self):
        self.viewTitle = _(u'Compare List')
        request = self.request
        json_compare_list = request.cookies.get('compare_list')
        data = []
        if json_compare_list:
            compare_list = json.loads(json_compare_list)
            for item in compare_list:
                contents = api.content.find(UID=item)
                for brain in contents:
                    data.append(brain)
            self.data = data
        else:
            self.data = False

        return self.template()
예제 #19
0
 def price_invariant(data):
     if data.price < data.salePrice:
         raise Invalid(_(u'The sale price is bigger than price!'))
     if data.price < data.disc_amount:
         raise Invalid(_(u'The Discount Amount is bigger than price!'))
예제 #20
0
 def viewTitle(self):
     viewTitle = _(u'Wish List')
     return viewTitle
예제 #21
0
# -*- coding: utf-8 -*-
from alpha.content import _
from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper
from zope import schema
from plone.z3cform import layout
from z3c.form import form
from plone.directives import form as Form


class IUser(Form.Schema):

    promoCode = schema.Dict(
        title=_(u'Exist PromoCode'),
        key_type=schema.ASCIILine(),
        value_type=schema.ASCIILine(),
        required=False,
    )


class UserControlPanelForm(RegistryEditForm):
    form.extends(RegistryEditForm)
    schema = IUser


CustomControlPanelView = layout.wrap_form(UserControlPanelForm,
                                          ControlPanelFormWrapper)
CustomControlPanelView.label = _(u"User PromoCode")
예제 #22
0
from zope import schema
from plone.z3cform import layout
from z3c.form import form
from plone.directives import form as Form


class IDict(Form.Schema):

    sortList = schema.Text(
        title=_(u'store category and subject'),
        required=False,
    )
    brandList = schema.Text(
        title=_(u'store brand count number'),
        required=False,
    )
    productData = schema.Text(
	title=_(u'store full product data'),
	required=False
    )




class CategoriesControlPanelForm(RegistryEditForm):
    form.extends(RegistryEditForm)
    schema = IDict

CustomControlPanelView = layout.wrap_form(CategoriesControlPanelForm, ControlPanelFormWrapper)
CustomControlPanelView.label = _(u"Custom Related Setting")
예제 #23
0
 def viewTitle(self):
     viewTitle = _(u'Order History')
     return viewTitle
예제 #24
0
class IProduct(model.Schema):
    fieldset(_('Product Info'),
             fields=[
                 'title', 'productNo', 'rating', 'cover', 'description',
                 'category', 'subcategory', 'relatedProduct'
             ])
    title = schema.TextLine(
        title=_(u'Title'),
        required=True,
    )

    productNo = schema.TextLine(
        title=_(u'Product Number'),
        required=True,
    )

    rating = schema.Int(
        title=_(u'Rating'),
        required=True,
        default=4,
        constraint=rating_constraint,
    )

    cover = namedfile.NamedBlobImage(
        title=_(u'Cover Image'),
        required=True,
    )

    description = schema.Text(title=_(u'Description'), required=False)

    category = schema.TextLine(title=_(u'Category'), required=True)

    subcategory = schema.TextLine(title=_(u'Subcategory'), required=True)

    relatedProduct = RelationList(
        title=_(u"Related Product"),
        default=[],
        value_type=RelationChoice(title=_(u"Related"),
                                  source=CatalogSource(portal_type='Product')),
        required=False,
    )

    fieldset(_('More Info'),
             fields=[
                 'brand', 'productCode', 'availability', 'downloadFile',
                 'feature', 'specification'
             ])
    brand = schema.TextLine(title=_(u'Brand'), required=True)

    productCode = schema.TextLine(title=_(u'Product Code'), required=False)

    availability = schema.Bool(title=(u'Availability'),
                               default=True,
                               required=False)

    downloadFile = namedfile.NamedBlobFile(
        title=_(u'Download File'),
        required=False,
    )

    feature = RichText(title=_(u'Feature'), required=False)

    specification = schema.List(
        title=_(u'specification'),
        description=_(u'ex. clockspeed:100mhz'),
        value_type=schema.TextLine(),
        required=False,
    )

    fieldset(_('Product Price'),
             fields=[
                 'price', 'salePrice', 'l_c_price', 'l_b_price', 'l_a_price',
                 'disc_amount'
             ])
    price = schema.Int(
        title=_(u'Price'),
        description=_(u'Enter USD$'),
        required=True,
    )

    salePrice = schema.Int(
        title=_(u'Sale Price'),
        description=_(u'Enter USD$'),
        required=True,
    )

    l_c_price = schema.Int(title=_(u'Level C Group Price'),
                           description=_(u'Enter USD$'),
                           required=False)

    l_b_price = schema.Int(title=_(u'Level B Group Price'),
                           description=_(u'Enter USD$'),
                           required=False)

    l_a_price = schema.Int(title=_(u'Level A Group Price'),
                           description=_(u'Enter USD$'),
                           required=False)

    disc_amount = schema.Int(title=_(u'Discount Amount'),
                             description=_(u'Enter USD$'),
                             default=0,
                             min=0,
                             required=False)

    @invariant
    def price_invariant(data):
        if data.price < data.salePrice:
            raise Invalid(_(u'The sale price is bigger than price!'))
        if data.price < data.disc_amount:
            raise Invalid(_(u'The Discount Amount is bigger than price!'))

    fieldset(_('Slider'), fields=['img1', 'img2', 'img3', 'img4'])
    img1 = NamedBlobImage(
        title=_(u"Slider Image1"),
        required=False,
    )

    img2 = NamedBlobImage(
        title=_(u"Slider Image2"),
        required=False,
    )

    img3 = NamedBlobImage(
        title=_(u"Slider Image3"),
        required=False,
    )

    img4 = NamedBlobImage(
        title=_(u"Slider Image4"),
        required=False,
    )

    fieldset(_('Index Information'),
             fields=['indexCategory', 'bestSeller', 'timeLimit'])

    directives.widget(indexCategory=CheckBoxFieldWidget)
    indexCategory = schema.List(
        title=_(u"Index Category"),
        description=
        _(u'Select the classification of this product (Most View, Special, Latest)'
          ),
        value_type=schema.Choice(vocabulary=categoryVocabulary, ),
        required=False,
    )

    bestSeller = schema.Bool(
        title=_(u"Best Seller"),
        required=False,
    )

    timeLimit = schema.Datetime(
        title=_(u'Time Limit'),
        description=
        _(u'If you want to set the time limit, you must put this product in the "Promotions" folder'
          ),
        constraint=future_date,
        required=False,
    )
예제 #25
0
class Register(RegistrationForm):
    RegistrationForm.template = ViewPageTemplateFile(
        'templates/register_form.pt')
    RegistrationForm.viewTitle = _(u'Register')
예제 #26
0
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
from z3c.form import validator
from plone.directives import form
from plone.autoform import directives
from z3c.form.browser.checkbox import CheckBoxFieldWidget
import zope.component
import zope.interface
from zope.interface import Invalid
from zope.interface import invariant
from zope import schema
from zope.interface import implementer
from alpha.content import _
import datetime

categoryVocabulary = SimpleVocabulary([
    SimpleTerm(value=u'mostView', title=_(u'Most View')),
    SimpleTerm(value=u'special', title=_(u'Special')),
    SimpleTerm(value=u'latest', title=_(u'Latest'))
])


def rating_constraint(value):
    if value <= 0 or value > 5:
        raise Invalid(_(u'Please enter 1 to 5 in the Rating field'))
    return True


def future_date(value):
    if value and not value >= datetime.datetime.today():
        raise Invalid(_(u"Time limit date can not be before today."))
    return True
from alpha.content import _
from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper
from zope import schema
from plone.z3cform import layout
from z3c.form import form
from plone.directives import form as Form


class IInform(Form.Schema):

    email = schema.Text(
        title=_(u'email'),
        required=False,
    )
    cellphone = schema.Text(
        title=_(u'cellphone'),
        required=False,
    )
    address = schema.Text(title=_(u'address'), required=False)


class BasicInformControlPanelForm(RegistryEditForm):
    form.extends(RegistryEditForm)
    schema = IInform


CustomControlPanelView = layout.wrap_form(BasicInformControlPanelForm,
                                          ControlPanelFormWrapper)
CustomControlPanelView.label = _(u"Basic Inform")
예제 #28
0
def rating_constraint(value):
    if value <= 0 or value > 5:
        raise Invalid(_(u'Please enter 1 to 5 in the Rating field'))
    return True
예제 #29
0
 def viewTitle(self):
     viewTitle = _(u'Search')
     return viewTitle
예제 #30
0
def future_date(value):
    if value and not value >= datetime.datetime.today():
        raise Invalid(_(u"Time limit date can not be before today."))
    return True