예제 #1
0
    def post(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return
        if bene_query.getCurrentUser().isProducer:  # producers can't do this
            self.redirect('/')
            return

        if bene_query.getCurrentConsumer() != None:  # already exists
            self.redirect('/')
            return

        # no consumer, so add to store
        _name = bene_util.sanitize(self.request.get('name'))
        _picture = bene_util.sanitize(self.request.get('picturedata'))
        _profile = self.request.get('profile')
        _email_public = self.request.get('email')

        c = entities.Consumer(name=_name,
                              has_unread=0,
                              email=bene_util.getEmail(user),
                              email_public=_email_public,
                              owner=user,
                              profile=_profile,
                              verified=False)
        c.addPicture(_picture)
        c.put()

        self.redirect('/consumerhome?%s' %
                      urllib.urlencode({'firsttime': True}))
        return
예제 #2
0
    def post(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isProducer:  # producers aren't allowed here
            self.redirect('/')
            return

        _consumer = bene_query.getCurrentConsumer()
        if _consumer == None:  # no consumer page, so create one
            self.redirect('/')
            return

        _name = bene_util.sanitize(self.request.get('name'))
        _profile = bene_util.sanitize(self.request.get('profile'))
        _picture = self.request.get('picturedata')
        _email_public = self.request.get('email')

        _consumer.name = _name
        _consumer.profile = _profile
        _consumer.email_public = _email_public
        _consumer.addPicture(_picture)
        _consumer.put()

        self.redirect('/myprofile')
        return
        '''
예제 #3
0
    def post(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isConsumer:  # consumers can't access this
            self.redirect('/')
            return

        _producer = bene_query.getCurrentProducer()
        if _producer != None:  # already has a producer page
            self.redirect('/')
            return

        _name = bene_util.sanitize(self.request.get('name'))
        _picture = self.request.get('picturedata')
        _description = bene_util.sanitize(self.request.get('description'))
        _email_public = self.request.get('email')

        p = entities.Producer(name=_name,
                              email=bene_util.getEmail(user),
                              email_public=_email_public,
                              owner=user,
                              description=_description,
                              verified=False)
        p.addPicture(_picture)
        p.put()

        self.redirect('/producerhome?%s' %
                      urllib.urlencode({'verifyone': True}))
        return
예제 #4
0
    def post(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isConsumer:  # consumers can't access this
            self.redirect('/')
            return

        _producer = bene_query.getCurrentProducer()
        if _producer == None:  # no producer signed up, so ask to sign up
            self.redirect('/')
            return

        _name = bene_util.sanitize(self.request.get('name'))
        _description = bene_util.sanitize(self.request.get('description'))
        _picture = self.request.get('picturedata')
        _email_public = self.request.get('email')

        _producer.name = _name
        _producer.description = _description
        _producer.email_public = _email_public
        _producer.addPicture(_picture)
        _producer.put()

        self.redirect('/myprofile')
        return
예제 #5
0
    def post(self):
        user = users.get_current_user()
        if not user:  # need to signin first
            self.redirect('/?signin=True')
            return

        if not users.is_current_user_admin(
        ):  # need to be admin to create badge
            self.redirect('/')
            return

        # otherwise create badge
        _name = bene_util.sanitize(self.request.get('name'))
        _description = bene_util.sanitize(self.request.get('description'))
        _picture = self.request.get('picture')

        b = entities.Badge(name=_name, description=_description)
        b.addPicture(_picture)

        # add if doesn't already exist
        if bene_util.doesBadgeExist(b):
            self.redirect('/createbadge?%s' %
                          urllib.urlencode({'repeat': True}))
            return

        b.put()
        if bene_util.sanitize(self.request.get('more')):  # want to add more
            self.redirect('/createbadge?%s' %
                          urllib.urlencode({'added': True}))
            return

        # otherwise redirect to badge page
        self.redirect('/viewbadge?%s' % urllib.urlencode({'id': b.key()}))
        return
예제 #6
0
    def post(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isConsumer:  # consumers can't access this
            self.redirect('/')
            return

        _producer = bene_query.getCurrentProducer()
        if _producer == None:  # no producer signed up, so ask to sign up
            self.redirect('/')
            return

        if not _producer.verified:  # if producer is not verified
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'verify': True}))
            return

        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: If no ID sent?
            '''
            self.redirect('/')
            return
        _productgeneric = db.get(ID)
        ''' an error in getting the product will be redirected to exception handler'''

        if _productgeneric.owner != user:  # if current user doesn't own product
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'not_owner': True}))
            return

        _text = bene_util.sanitize(self.request.get('text'))

        msg = entities.MessageFromProducer(
            text=_text,
            sender=_producer,
            receiver=_productgeneric,
            num_receivers=_productgeneric.getClosetCount())
        msg.put()

        msg_key = msg.key()
        _consumers = _productgeneric.getConsumers()
        if _consumers:
            for _consumer in _consumers:
                if _consumer:
                    _consumer.addReceivedMsg(msg_key)
                    _consumer.has_unread += 1
                    _consumer.put()

        self.redirect('/myoutbox')
        return
예제 #7
0
    def get(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect(users.create_login_url(self.request.uri))
            return

        producer = bene_util.sanitize(self.request.get('producer'))
        consumer = bene_util.sanitize(self.request.get('consumer'))

        u = bene_query.getCurrentUser()
        if not u:  # no user exists
            if producer and not consumer:  # make person a producer only in most restricted case
                u = entities.User(email=bene_util.getEmail(user),
                                  owner=user,
                                  isConsumer=False,
                                  isProducer=True)
                u.put()
                self.redirect('/createproducer')
                return
            else:  # all other cases, make consumer
                u = entities.User(email=bene_util.getEmail(user),
                                  owner=user,
                                  isConsumer=True,
                                  isProducer=False)
                u.put()
                self.redirect('/createconsumer')
                return

        if producer and not consumer:  # signed in producer
            if u.isConsumer:  # if previously signed in as consumer
                u.isConsumer = False
                u.isProducer = True
                u.put()
            if bene_query.getCurrentProducer(
            ) == None:  # no producer page, so create one
                self.redirect('/createproducer')
                return
            else:  # already has producer page, so redirect
                self.redirect('/producerhome')
                return
        else:  # signed in consumer
            if u.isProducer:  # if previously signed in as producer
                u.isConsumer = True
                u.isProducer = False
                u.put()
            if bene_query.getCurrentConsumer(
            ) == None:  # no consumer page, so create on
                self.redirect('/createconsumer')
                return
            else:  # already has consumer page, so redirect
                self.redirect('/consumerhome')
                return
예제 #8
0
 def post(self):
     user = users.get_current_user() 
     if not user: # need to sign in
         self.redirect('/?signin=True')
         return
     
     if bene_query.getCurrentUser().isConsumer: # consumers can't access this
         self.redirect('/')
         return
         
     _producer = bene_query.getCurrentProducer()
     if _producer  == None: # no producer signed up, so ask to sign up
         self.redirect('/')
         return
     
     if not _producer.verified: # if producer is not verified
         self.redirect('/producerhome?%s' % urllib.urlencode({'verify': True}))
         return
                 
     ID = bene_util.sanitize(self.request.get('id'))
     if not ID:
         '''
         TODO: If no ID sent?
         '''
         self.redirect('/')
         return
     _productline = db.get(ID)
     ''' an error in getting the product will be redirected to exception handler'''
     
     if _productline.owner != user: # if current user doesn't own product
         self.redirect('/producerhome?%s' % urllib.urlencode({'not_owner': True}))
         return
             
     # edit product line
     _picture = self.request.get('picturedata')
     _name = bene_util.sanitize(self.request.get('name'))
     _description = bene_util.sanitize(self.request.get('description'))
     if _name != _productline.name or _description != _productline.description or _picture:
         _name_save = _productline.name
         _productline.name = _name
         _productline.description = _description
         if bene_util.doesSimilarProductLineExist(_productline) and _name_save != _productline.name: # already exists
             self.redirect('/editproduct?%s' % urllib.urlencode({'repeatedit': True, 'id': ID}))
             return
         _productline.addPicture(_picture)
         _productline.put()   
    
     self.redirect('/view?%s' % urllib.urlencode({'id': ID}))
     return
예제 #9
0
 def get(self):
     ID = bene_util.sanitize(self.request.get('id'))
     if not ID:
         ''' 
         TODO: If no ID sent, default to ?
         '''
         self.redirect('/')
         return
     _generic = db.get(ID)
     ''' an error in getting the product will be redirected to exception handler'''
     
     if _generic.isUnit:
         _generic = _generic.getProductConfig()
     
     ''' NOTE THAT THIS WORKS FOR BOTH PRODUCT UNITS AND CONFIGS '''
     
     # Make a dictionary for template
     _productconfig = _generic
     name = _productconfig.getName()
     producer = _productconfig.getProducer()
     template_values = bene_util.initTemplate(self.request.uri)
     template_values['id'] = ID
     template_values['name'] = name
     template_values['producer'] = producer
     template_values['locations'] = _generic.getLocations()
     template_values['numloc'] = len(_generic.getLocations())
     template_values['path'] = "product"
     path = os.path.join(os.path.dirname(__file__), 'viewpath.html')
     self.response.out.write(template.render(path, template_values))
     return
예제 #10
0
    def get(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isConsumer:  # consumers can't access this
            self.redirect('/')
            return

        _producer = bene_query.getCurrentProducer()
        if _producer == None:  # no producer signed up, so ask to sign up
            self.redirect('/')
            return

        if not _producer.verified:  # if producer is not verified
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'verify': True}))
            return

        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: If no ID sent, default to ?
            '''
            self.redirect('/')
            return
        _worker = db.get(ID)
        ''' an error in getting the worker will be redirected to exception handler'''

        db.delete(ID)

        self.redirect('/myworkers')
        return
예제 #11
0
 def get(self):
     # Get the id from the get parameter
     ID = bene_util.sanitize(self.request.get('id'))
     if not ID:
         ''' 
         TODO: If no ID sent, default to?
         '''
         self.redirect('/')
         return
     # Fetch the data for this consumer
     consumer = db.get(ID)
     ''' an error in getting the consumer will be redirected to exception handler'''
     
     # Make a dictionary for template
     template_values = bene_util.initTemplate(self.request.uri)
     template_values['id'] = ID
     template_values['consumer'] = consumer
     template_values['products'] = consumer.getProducts()
     template_values['path'] = self.request.path
     
     template_values['can_edit_local'] = False
     user = users.get_current_user()
     if user:
         if consumer.owner == user:
             template_values['can_edit_local'] = True
         
     path = os.path.join(os.path.dirname(__file__), 'viewcloset.html')
     self.response.out.write(template.render(path, template_values))
     return
 def get(self):
     ID = bene_util.sanitize(self.request.get('id'))
     if not ID:
         ''' 
         TODO: If no ID sent, default to page with all products?
         '''
         self.redirect('/')
         return
     _product = db.get(ID)
     ''' an error in getting the product will be redirected to exception handler'''
     
     if _product.isUnit:
         _product = _product.getProductConfig()
     
     
     # Make a dictionary for template
     _productconfig = _product
     name = _product.name
     producer = _productconfig.getProducer()
     workers = _productconfig.getWorkers()
     template_values = bene_util.initTemplate(self.request.uri)
     template_values['id'] = ID
     template_values['productconfig'] = _productconfig
     template_values['name'] = name
     template_values['producer'] = producer
     template_values['workers'] = workers
     template_values['url'] = self.request.url
     template_values['qr_url'] = self.request.url.replace('view','qr')
     path = os.path.join(os.path.dirname(__file__), 'viewproductworkers.html')
     self.response.out.write(template.render(path, template_values))
     return
예제 #13
0
 def get(self):
     # Get the id from the get parameter
     ID = bene_util.sanitize(self.request.get('id'))
     if not ID:
         '''
         TODO: If no ID sent, default to page with all products?
         '''
         self.redirect('/')
         return
     # Fetch the data for this product
     product = db.get(ID)
     ''' an error in getting the product will be redirected to exception handler'''
             
     # Make a dictionary for template
     template_values = bene_util.initTemplate(self.request.uri)
     # generic
     template_values['id'] = ID
     template_values['name'] = product.name
     template_values['product'] = product
     template_values['producer'] = product.getProducer()
     template_values['rating'] = product.getRating()
     # urls
     template_values['url'] = self.request.url
     template_values['path'] = "product"
     template_values['qr_url'] = self.request.url.replace('viewproduct','qr')
     template_values['image_url'] = self.request.url.replace('viewproduct', 'productimage')
     template_values['comment_url'] = '%s/viewproduct?%s' % (self.request.host_url, urllib.urlencode({'id': ID}))
     # interactions - producer
     template_values['can_edit'] = False
     user = users.get_current_user()
     if user:
         if product.owner == user and bene_query.getCurrentUser().isProducer:
             template_values['can_edit'] = True
             template_values['edit_link'] = '/editproduct?%s' % urllib.urlencode({'id': ID})
             template_values['show_qr'] = True
     # interactions - consumer
     template_values['in_closet'] = False
     template_values['add_closet'] = False
     if user:
         if bene_query.getCurrentUser().isConsumer:
             consumer = bene_query.getCurrentConsumer()
             if consumer:
                 if consumer.hasProduct(product.key()):
                     template_values['in_closet'] = True
                     template_values['rem_closet_link'] = '/removefromcloset?%s' % urllib.urlencode({'id': ID})
                 else:
                     template_values['add_closet'] = True
                     template_values['add_closet_link'] = '/addtocloset?%s' % urllib.urlencode({'id': ID})
                     
     template_values['num_configs'] = product.numConfigs()
     template_values['configs'] = product.getConfigs()
     
     template_values['num_products'] = product.numProducts()
     template_values['closet_count'] = product.getClosetCount()
     path = os.path.join(os.path.dirname(__file__), 'viewproduct.html')
     self.response.out.write(template.render(path, template_values).decode('utf-8'))
     return
예제 #14
0
    def get(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isConsumer:  # consumers can't access this
            self.redirect('/')
            return

        _producer = bene_query.getCurrentProducer()
        if _producer == None:  # no producer signed up, so ask to sign up
            self.redirect('/')
            return

        if not _producer.verified:  # if producer is not verified
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'verify': True}))
            return

        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: If no ID sent?
            '''
            self.redirect('/')
            return
        _productgeneric = db.get(ID)
        ''' an error in getting the product will be redirected to exception handler'''

        if _productgeneric.owner != user:  # if current user doesn't own product
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'not_owner': True}))
            return

        template_values = bene_util.initTemplate(self.request.uri)

        template_values['id'] = ID
        template_values['path'] = "message"
        template_values['num_sent'] = _productgeneric.getClosetCount()
        if _productgeneric.isConfig:
            template_values['name'] = _productgeneric.getName()
            template_values['is_config'] = True
            template_values['config'] = _productgeneric
            template_values['line'] = _productgeneric.getProductLine()
        elif _productgeneric.isLine:
            template_values['name'] = _productgeneric.name
            template_values['is_line'] = True
            template_values['line'] = _productgeneric

        path = os.path.join(os.path.dirname(__file__), 'producermsg.html')
        self.response.out.write(template.render(path, template_values))
        return
    def get(self):
        # Get the id from the get parameter
        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            ''' 
            TODO: If no ID sent, default to page with all products?
            '''
            self.redirect('/')
            return
        # Fetch the data for this product
        producer = db.get(ID)
        ''' an error in getting the producer will be redirected to exception handler'''

        # Make a dictionary for template
        template_values = bene_util.initTemplate(self.request.uri)
        template_values['id'] = producer.key()
        template_values['producer'] = producer

        workers = producer.getWorkers()
        template_values['workers'] = workers
        num_workers = 0
        if workers:
            for worker in workers:
                if worker:
                    num_workers += 1
        if num_workers == 0:
            template_values['no_workers'] = True
        else:
            template_values['no_workers'] = False

        locations = producer.getLocations()
        template_values['locations'] = locations
        num_workers_with_loc = 0
        if locations:
            for location in locations:
                if location:
                    _workers = location.getWorkers()
                    if _workers:
                        for worker in _workers:
                            if worker:
                                num_workers_with_loc += 1
        template_values[
            'num_worker_no_location'] = num_workers - num_workers_with_loc

        template_values['can_edit_local'] = False
        user = users.get_current_user()
        if user:
            if producer.owner == user:
                template_values['can_edit_local'] = True

        path = os.path.join(os.path.dirname(__file__),
                            'viewproducerworkers.html')
        self.response.out.write(template.render(path, template_values))
        return
예제 #16
0
    def get(self):
        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: if no id is sent, defaults to a page with all workers? 
            '''
            self.redirect('/')
        worker = db.get(ID)
        ''' an error in getting the worker will be redirected to exception handler'''

        # Make a dictionary for template
        name = worker.name
        location = worker.getLocation()
        profile = worker.profile
        picture = worker.getPicture()
        producer = worker.getProducer()
        products = worker.getProductLines()
        if location:
            if location.location:
                latitude = location.location.lat
                longitude = location.location.lon
            else:
                latitude = None
                longitude = None
        else:
            latitude = None
            longitude = None
        template_values = bene_util.initTemplate(self.request.uri)
        template_values['id'] = worker.key()
        template_values['worker'] = worker
        template_values['name'] = name
        template_values['picture'] = picture
        template_values['profile'] = profile
        template_values['location'] = location
        template_values['producer'] = producer
        template_values['products'] = products
        template_values['latitude'] = latitude
        template_values['longitude'] = longitude
        template_values['url'] = self.request.url
        template_values['path'] = "worker"

        template_values['can_edit'] = False
        user = users.get_current_user()
        if user:
            if worker.owner == user and bene_query.getCurrentUser().isProducer:
                template_values['can_edit'] = True
                template_values[
                    'edit_link'] = '/editworker?%s' % urllib.urlencode(
                        {'id': ID})

        path = os.path.join(os.path.dirname(__file__), 'viewworker.html')
        self.response.out.write(template.render(path, template_values))
        return
예제 #17
0
    def get(self):
        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: If no ID sent, default to page with all locations?
            '''
            self.redirect('/')
            return
        location = db.get(ID)
        ''' an error in getting the location will be redirected to exception handler'''

        # Make a dictionary for template
        name = location.name
        producer = location.getProducer()
        productlist = location.getProductLines()
        workers = location.getWorkers()
        address = location.address
        if location.location:
            latitude = location.location.lat
            longitude = location.location.lon
        else:
            latitude = None
            longitude = None
        template_values = bene_util.initTemplate(self.request.uri)
        template_values['id'] = ID
        template_values['name'] = name
        template_values['location'] = location
        template_values['producer'] = producer
        template_values['products'] = productlist
        template_values['workers'] = workers
        template_values['latitude'] = latitude
        template_values['longitude'] = longitude
        template_values['url'] = self.request.url
        template_values['address'] = address
        template_values['qr_url'] = self.request.url.replace('view', 'qr')
        template_values['path'] = "location"

        template_values['can_edit'] = False
        user = users.get_current_user()
        if user:
            if location.owner == user and bene_query.getCurrentUser(
            ).isProducer:
                template_values['can_edit'] = True
                template_values[
                    'edit_link'] = '/editlocation?%s' % urllib.urlencode(
                        {'id': ID})

        path = os.path.join(os.path.dirname(__file__), 'viewlocation.html')
        self.response.out.write(template.render(path, template_values))
        return
예제 #18
0
    def post(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isProducer:  # producers can't access this
            self.redirect('/')
            return

        _consumer = bene_query.getCurrentConsumer()
        if _consumer == None:  # no consumer signed up, so ask to sign up
            self.redirect('/')
            return

        productConfigKey = bene_util.sanitize(
            self.request.get('productConfigKey'))
        _productconfig = db.get(productConfigKey)
        _productconfig.updateRating(
            float(bene_util.sanitize(self.request.get('adv1'))), _consumer)
        _productconfig.put()
        '''
예제 #19
0
    def get(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isConsumer:  # consumers can't access this
            self.redirect('/')
            return

        _producer = bene_query.getCurrentProducer()
        if _producer == None:  # no producer signed up, so ask to sign up
            self.redirect('/')
            return

        if not _producer.verified:  # if producer is not verified
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'verify': True}))
            return

        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: If no ID sent, default to page with all locations?
            '''
            self.redirect('/')
            return
        _location = db.get(ID)
        ''' an error in getting the location will be redirected to exception handler'''

        if _location.owner != user:  # if not owner of location
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'not_owner': True}))
            return

        template_values = bene_util.initTemplate(self.request.uri)
        template_values['id'] = ID
        template_values['name_old'] = _location.name
        template_values['address_old'] = _location.address
        template_values['unique_old'] = _location.unique
        template_values['description_old'] = _location.description
        template_values['path'] = "location"
        template_values['cropentity'] = _location

        path = os.path.join(os.path.dirname(__file__), 'editlocation.html')
        self.response.out.write(template.render(path, template_values))
        return
예제 #20
0
    def post(self):
        query = bene_util.sanitize(self.request.get('query'))
        template_values = bene_util.initTemplate(self.request.uri)
        template_values['query'] = query
        if (len(query) != 0):
            productlist = entities.ProductLine.all()
            producerlist = entities.Producer.all()
            workerlist = entities.Worker.all()
            locationlist = entities.Location.all()

            max_results = 10

            matchesProduct = [
                p for p in productlist if query.lower() in p.name.lower()
            ]
            template_values['matchesProduct'] = bene_util.bestMatch(
                query, matchesProduct)[0:max_results]

            matchesProducer = [
                p for p in producerlist if query.lower() in p.name.lower()
            ]
            template_values['matchesProducer'] = bene_util.bestMatch(
                query, matchesProducer)[0:max_results]

            matchesWorker = [
                p for p in workerlist if query.lower() in p.name.lower()
            ]
            template_values['matchesWorker'] = bene_util.bestMatch(
                query, matchesWorker)[0:max_results]

            matchesLocation = [
                p for p in locationlist if query.lower() in p.name.lower()
            ]
            template_values['matchesLocation'] = bene_util.bestMatch(
                query, matchesLocation)[0:max_results]

            template_values['allListEmpty'] = False
            if (not matchesProduct) and (not matchesWorker) and (
                    not matchesLocation) and (not matchesProducer):
                template_values['allListEmpty'] = True
            path = os.path.join(os.path.dirname(__file__), 'searchresult.html')
            self.response.out.write(template.render(path, template_values))
        else:
            template_values = bene_util.initTemplate(self.request.uri)
            path = os.path.join(os.path.dirname(__file__),
                                'searchproduct.html')
            self.response.out.write(template.render(path, template_values))
예제 #21
0
    def get(self):
        user = users.get_current_user()
        if not user:  # not signed in
            self.redirect('/?%s' % urllib.urlencode({'signin': True}))
            return
        if bene_query.getCurrentUser(
        ).isProducer:  # producers don't have closets
            self.redirect('/')
            return
        _consumer = bene_query.getCurrentConsumer()
        if _consumer == None:  # if consumer page doesn't exist, need to create one
            self.redirect('/createconsumer?%s' %
                          urllib.urlencode({'msg': True}))
            return
        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: If no ID sent, default to viewcloset?
            '''
            self.redirect('/')
            return
        product = db.get(ID)
        if not product:  # invalid product
            template_values = {}
            path = os.path.join(os.path.dirname(__file__), 'not_found.html')
            self.response.out.write(template.render(path, template_values))
            return

        # if not already in closet, add to closet, and redirect back to product page
        #return
        if not _consumer.hasProduct(product.key()):
            _consumer.addProduct(product.key())
            _consumer.put()

            # add to closet count
            if product.isConfig:
                product.addClosetCount()
                product.addConsumer(_consumer.key())
                product.put()
            if product.isUnit:
                productconfig = product.getProductConfig()
                productconfig.addClosetCount()
                productconfig.addConsumer(_consumer.key())
                productconfig.put()

        self.redirect('/view?%s' % urllib.urlencode({'id': product.key()}))
        return
예제 #22
0
 def get(self):
     key = bene_util.sanitize(self.request.get('key'))
     if not key:
         '''
         TODO: what to do here?
         '''
         return
     badge = db.get(key)
     ''' an error in getting the badge image will be redirected to exception handler'''
     
     if badge.hasImage():
         self.response.headers['Content-Type'] = 'image'
         self.response.out.write(badge.getPicture())
         return
     else:
         self.redirect('/img/defaultbadge.jpg')
         return
예제 #23
0
 def get(self):
     # Get the id from the get parameter
     ID = bene_util.sanitize(self.request.get('id')) 
     if not ID:
         '''
         TODO: what to do here?
         '''
         return
     # Fetch the image for this worker
     worker = db.get(ID)
     ''' an error in getting the worker will be redirected to exception handler'''
     
     if worker.hasImage():
         self.response.headers['Content-Type'] = 'image'
         self.response.out.write(worker.getPicture())
         return
     else:
         self.redirect('/img/defaultworker.jpg')
         return
예제 #24
0
    def get(self):
        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: if no id is sent, defaults to a page with all producers? 
            '''
            self.redirect('/')
            return
        _producer = db.get(ID)
        ''' an error in getting the producer will be redirected to exception handler'''

        # Make a dictionary for template
        name = _producer.name
        description = _producer.description
        product_lines = _producer.getProductLines()[0:4]
        workers = _producer.getWorkers()[0:4]
        locations = _producer.getLocations()[0:4]
        email_public = _producer.email_public

        template_values = bene_util.initTemplate(self.request.uri)
        template_values['id'] = _producer.key()
        template_values['name'] = name
        template_values['email_public'] = email_public
        template_values['description'] = description
        template_values['locations'] = locations
        template_values['product_lines'] = product_lines
        template_values['producer'] = _producer
        template_values['workers'] = workers
        template_values['url'] = self.request.url
        template_values['path'] = self.request.path

        template_values['can_edit'] = False
        user = users.get_current_user()
        if user:
            if _producer.owner == user and bene_query.getCurrentUser(
            ).isProducer:
                template_values['can_edit'] = True
                template_values['edit_link'] = '/editproducer'

        path = os.path.join(os.path.dirname(__file__), 'viewproducer.html')
        self.response.out.write(template.render(path, template_values))
        return
예제 #25
0
    def get(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isConsumer:  # consumers can't access this
            self.redirect('/')
            return

        _producer = bene_query.getCurrentProducer()
        if _producer == None:  # no producer signed up, so ask to sign up
            self.redirect('/')
            return

        if not _producer.verified:  # if producer is not verified
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'verify': True}))
            return

        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: If no ID sent?
            '''
            self.redirect('/')
            return
        _unit = db.get(ID)
        ''' an error in getting the product will be redirected to exception handler'''

        if _unit.owner != user:  # if current user doesn't own product
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'not_owner': True}))
            return

        # remove
        db.delete(_unit.key())

        self.redirect('/myproducts')
        return
예제 #26
0
 def get(self):
     ID = bene_util.sanitize(self.request.get('id'))
     if not ID:
         '''
         TODO: if no id is sent, defaults to a page with all producers? 
         '''
         self.redirect('/')
         return
     consumer = db.get(ID)
     ''' an error in getting the consumer will be redirected to exception handler'''
     
     # Make a dictionary for template
     name = consumer.name
     profile = consumer.profile
     email_public = consumer.email_public
     
     template_values = bene_util.initTemplate(self.request.uri)
     template_values['id'] = ID
     template_values['consumer'] = consumer
     _products = consumer.getProducts()
     if _products:
         template_values['products'] = _products[0:4] 
     template_values['name'] = name
     template_values['profile'] = profile
     template_values['email_public'] = email_public
     template_values['path'] = self.request.path
     
     template_values['can_edit'] = False
     user = users.get_current_user()
     if user:
         if consumer.owner == user:
             template_values['can_edit'] = True           
             template_values['edit_link'] = '/editconsumer'
     
     path = os.path.join(os.path.dirname(__file__), 'viewconsumer.html')
     self.response.out.write(template.render(path, template_values))
     return
    def get(self):
        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: if no id is sent ?
            '''
            self.redirect('/')
            return
        generic = db.get(ID)
        ''' an error in getting the item will be redirected to exception handler'''

        # if its a product line, show its default config
        if generic.isLine:
            if generic.numConfigs() > 1:
                self.redirect('/viewproduct?%s' %
                              urllib.urlencode({'id': generic.key()}))
                return
            else:
                _configs = generic.getConfigs()
                for _config in _configs:
                    if _config:
                        self.redirect('/viewconfig?%s' %
                                      urllib.urlencode({'id': _config.key()}))
                        return
                return

        if generic.isConfig:
            self.redirect('/viewconfig?%s' %
                          urllib.urlencode({'id': generic.key()}))
            return
        if generic.isUnit:
            self.redirect('/viewunit?%s' %
                          urllib.urlencode({'id': generic.key()}))
            return

        db.get('abc')  # force exception handler
예제 #28
0
    def get(self):
        # Get the id from the get parameter
        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            ''' 
            TODO: If no ID sent, default to page with all products?
            '''
            self.redirect('/')
            return
        # Fetch the data for this product
        producer = db.get(ID)
        ''' an error in getting the producer will be redirected to exception handler'''

        # Make a dictionary for template
        template_values = bene_util.initTemplate(self.request.uri)
        template_values['id'] = ID
        template_values['producer'] = producer
        _locations = producer.getLocations()
        template_values['locations'] = _locations
        if _locations.get():
            template_values['has_locations'] = True
        else:
            template_values['has_locations'] = False
        template_values['path'] = "location"

        template_values['can_edit_local'] = False
        user = users.get_current_user()
        if user:
            if producer.owner == user and bene_query.getCurrentUser(
            ).isProducer:
                template_values['can_edit_local'] = True

        path = os.path.join(os.path.dirname(__file__),
                            'viewproducerlocations.html')
        self.response.out.write(template.render(path, template_values))
        return
예제 #29
0
 def get(self):
     # Get the id from the get parameter
     ID = bene_util.sanitize(self.request.get('id'))
     if not ID:
         '''
         TODO: If no ID sent, default to page with all products?
         '''
         self.redirect('/')
         return
     # Fetch the data for this product
     productconfig = db.get(ID)
     ''' an error in getting the product will be redirected to exception handler'''
     
     productline = productconfig.getProductLine()
     
     # Make a dictionary for template
     template_values = bene_util.initTemplate(self.request.uri)
     # generic
     template_values['id'] = ID
     template_values['name'] = productconfig.getName()
     template_values['is_config'] = True
     template_values['is_unit'] = False 
     template_values['producer'] = productconfig.getProducer()
     template_values['rating'] = productconfig.getRoundedRating()
     template_values['productconfig'] = productconfig
     template_values['config_key'] = productconfig.key()
     # urls
     template_values['url'] = self.request.url
     template_values['path'] = "product"
     template_values['qr_url'] = self.request.url.replace('viewpath','qr')
     template_values['image_url'] = self.request.url.replace('viewconfig', 'productimage')
     template_values['comment_url'] = '%s/viewproduct?%s' % (self.request.host_url, urllib.urlencode({'id': productline.key()}))
     # primary location
     _location = productconfig.getPrimaryLocation()
     if _location and _location.location:
         latitude = _location.location.lat
         longitude = _location.location.lon
     else:
         latitude = None
         longitude = None
     template_values['latitude'] = latitude
     template_values['longitude'] = longitude
     template_values['location'] = _location
     
     # worker to display
     _workers = productconfig.getWorkers()
     if _workers.get(): 
         template_values['has_workers'] = True
         workerlist = []
         for _worker in _workers:
             if _worker:
                 workerlist.append(_worker)
         template_values['has_multiple_workers'] = len(workerlist) > 1
         template_values['num_other_workers'] = len(workerlist)-1
         template_values['more_than_one_other'] = len(workerlist) > 2
         template_values['worker'] = workerlist[randint(0, len(workerlist)-1)]
     else:
         template_values['has_workers'] = False
     # badges
     _badges = productconfig.getBadges()
     if _badges:
         template_values['badges'] = _badges
         template_values['has_badges'] = True
     else:
         template_values['has_badges'] = False
     # interaction - producer
     template_values['can_edit'] = False
     user = users.get_current_user()
     if user:
         if productconfig.owner == user and bene_query.getCurrentUser().isProducer:
             template_values['enable_rating'] = False
             template_values['can_edit'] = True
             template_values['edit_link'] = '/editconfig?%s' % urllib.urlencode({'id': productconfig.key()})
             template_values['show_qr'] = False
     # interaction - consumer
     template_values['in_closet'] = False
     template_values['add_closet'] = False
     if user:
         if bene_query.getCurrentUser().isConsumer:
             template_values['enable_rating'] = True
             consumer = bene_query.getCurrentConsumer()
             if consumer:
                 if consumer.hasProduct(productconfig.key()):
                     template_values['in_closet'] = True
                     template_values['rem_closet_link'] = '/removefromcloset?%s' % urllib.urlencode({'id': ID})
                 else:
                     template_values['add_closet'] = True
                     template_values['add_closet_link'] = '/addtocloset?%s' % urllib.urlencode({'id': ID})
     
     
     template_values['num_products'] = productconfig.numProducts()
     template_values['closet_count'] = productconfig.getClosetCount()
     num_configs = productline.numConfigs()
     if num_configs == 1: 
         template_values['last_config'] = True
     if num_configs > 1:
         template_values['otherconfig'] = True
         if (num_configs > 2):
             template_values['more_than_one_other_config'] = True
         template_values['num_other_configs'] = num_configs - 1 
         template_values['config_link'] = '/view?%s' % urllib.urlencode({'id': productline.key()})         
 
     if productconfig.displayAmazon:
         template_values['display_amazon'] = True
         # Amazon stuff
         amazon = bottlenose.Amazon("AKIAIT4OSXQMYQB2XLUQ", "RPzfxhl7eEa/NiIcmkNinQ8OG6kTW65M6UrRqFgD", "BeneTag")
         response = amazon.ItemSearch(Keywords = productline.name + " " + productconfig.getProducer().name, ResponseGroup = "Offers,Images,ItemAttributes,Variations", SearchIndex="All")
         dom = xml.dom.minidom.parseString(response)
         totalres =  int(dom.getElementsByTagName("TotalResults")[0].firstChild.nodeValue)
         if totalres > 0:
             if dom.getElementsByTagName("ItemAttributes"):
                 if dom.getElementsByTagName("ItemAttributes")[0].getElementsByTagName("Title"):
                     product_name = dom.getElementsByTagName("ItemAttributes")[0].getElementsByTagName("Title")[0].firstChild.nodeValue
                     if productline.name in product_name:
                         if productconfig.getProducer().name in product_name:
                             if dom.getElementsByTagName("DetailPageURL"):
                                 template_values['AmazonURL'] = dom.getElementsByTagName("DetailPageURL")[0].firstChild.nodeValue
                             if dom.getElementsByTagName("OfferSummary"):
                                 if dom.getElementsByTagName("OfferSummary")[0].getElementsByTagName("LowestNewPrice"):
                                     if dom.getElementsByTagName("OfferSummary")[0].getElementsByTagName("LowestNewPrice")[0].getElementsByTagName("FormattedPrice"):
                                         template_values['price'] =  dom.getElementsByTagName("OfferSummary")[0].getElementsByTagName("LowestNewPrice")[0].getElementsByTagName("FormattedPrice")[0].firstChild.nodeValue 
         
     else:
         template_values['display_amazon'] = False
     
     storeLink = productconfig.store_link
     if storeLink:
         template_values['has_store_link'] = True
         template_values['storeName'] = storeLink.name
         template_values['storeUrl'] = storeLink.url
         template_values['storePrice'] = storeLink.price
     else:
         template_values['has_store_link'] = False
     
     # render
     path = os.path.join(os.path.dirname(__file__), 'viewconfig.html')
     self.response.out.write(template.render(path, template_values))
     return
예제 #30
0
    def post(self):
        user = users.get_current_user()
        if not user:  # need to sign in
            self.redirect('/?signin=True')
            return

        if bene_query.getCurrentUser(
        ).isConsumer:  # consumers can't access this
            self.redirect('/')
            return

        _producer = bene_query.getCurrentProducer()
        if _producer == None:  # no producer signed up, so ask to sign up
            self.redirect('/')
            return

        if not _producer.verified:  # if producer is not verified
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'verify': True}))
            return

        ID = bene_util.sanitize(self.request.get('id'))
        if not ID:
            '''
            TODO: If no ID sent?
            '''
            self.redirect('/')
            return
        _productconfig = db.get(ID)
        ''' an error in getting the product will be redirected to exception handler'''

        if _productconfig.owner != user:  # if current user doesn't own product
            self.redirect('/producerhome?%s' %
                          urllib.urlencode({'not_owner': True}))
            return

        _configname = bene_util.sanitize(self.request.get('configname'))
        _configname_save = _productconfig.config_name
        _productconfig.config_name = _configname

        # already exists
        if bene_util.doesSimilarProductConfigExist(
                _productconfig, _productconfig.getProductLine()
        ) and not _configname_save == _productconfig.config_name:
            self.redirect('/editconfig?%s' % urllib.urlencode({
                'repeatedit': True,
                'id': ID
            }))
            return

        # locations
        _locations = bene_util.sanitize(self.request.get('orderedlocations'))
        if _locations:
            _locations = _locations.split(',')
            locations = db.get(_locations)

        config_key = _productconfig.key()
        # remove config from old locations
        locations_old = _productconfig.getLocations()
        if locations_old:
            for location_old in locations_old:
                if location_old:
                    if not _locations:  # convert nonetype to empty array
                        _locations = []
                    if location_old.key() not in _locations:
                        location_old.remProductConfig(config_key)
                        location_old.put()
        _productconfig.clearPath()
        if _locations:
            i = 0
            if locations:
                for location in locations:
                    if location:
                        # add config to new locations
                        location.addProductConfig(config_key)
                        location.put()
                        # add to path
                        _productconfig.addLocationToPath(location, "", i)
                        i = i + 1

        # workers
        _workers = bene_util.sanitizeList(self.request.get_all('workers'))
        if not _workers:
            _workers = []
        # remove config from old locations
        workers_old = _productconfig.getWorkers()
        if workers_old:
            for worker_old in workers_old:
                if worker_old:
                    if worker_old.key() not in _workers:
                        worker_old.remProductConfig(config_key)
                        worker_old.put()
        # add config to new locations
        workers = db.get(_workers)
        if workers:
            for worker in workers:
                if worker:
                    worker.addProductConfig(config_key)
                    worker.put()

        # badges
        _badgeskeys = bene_util.sanitizeList(self.request.get_all('badges'))
        _badges_old = _productconfig.getBadges()
        if not _badges_old:  # convert None to empty array
            _badges_old = []
        if not _badgeskeys:  # convert None to empty array
            _badgeskeys = []
        if _badges_old:
            for badge in _badges_old:
                if badge.key() not in _badgeskeys:
                    _productconfig.remBadge(badge.key())
        if _badgeskeys:
            for badgekey in _badgeskeys:
                badge = db.get(badgekey)
                if badge not in _badges_old:
                    _productconfig.addBadge(db.Key(badgekey))

        #storelink
        s_price = bene_util.sanitize(self.request.get('storePrice'))
        s_name = bene_util.sanitize(self.request.get('storeName'))
        s_url = bene_util.sanitize(self.request.get('storeLink'))
        s_link = _productconfig.store_link

        if s_name and s_url:
            if not s_price:
                s_price = "0.0"
            try:
                s_price = float(s_price)
            except ValueError:
                s_price = 0.0
            if s_link:
                s_link.name = s_name
                s_link.url = s_url
                s_link.price = s_price
                s_link.put()
            else:
                s_link = entities.StoreLink(name=s_name,
                                            url=s_url,
                                            price=s_price)
                s_link.put()
            _productconfig.store_link = s_link
        else:
            if s_link:
                s_link.delete()
            _productconfig.store_link = None

        if self.request.get('displayAmazon'):
            _productconfig.displayAmazon = True
        else:
            _productconfig.displayAmazon = False

        _productconfig.put()

        # edit product line
        _picture = self.request.get('picturedata')
        _name = bene_util.sanitize(self.request.get('name'))
        _description = bene_util.sanitize(self.request.get('description'))
        _productline = _productconfig.getProductLine()
        if _name != _productline.name or _description != _productline.description or _picture:
            _name_save = _productline.name
            _productline.name = _name
            _productline.description = _description
            if bene_util.doesSimilarProductLineExist(
                    _productline
            ) and _name_save != _productline.name:  # already exists
                self.redirect('/editconfig?%s' %
                              urllib.urlencode({
                                  'repeatprodname': True,
                                  'id': ID
                              }))
                return
            _productline.addPicture(_picture)
            _productline.put()

        self.redirect('/view?%s' % urllib.urlencode({'id': ID}))
        return