Ejemplo n.º 1
0
 def edit_credits(self):
 
     if 'edit.credits.submit' in self.request.params:
         i = 0
         results = []
         for k in self.request.params:
         
             if 'data_' in k:
                 p = k.split('_')
                 d = { 'id':int(p[1]) }
                 exists = False
                 for r in results:
                     if r['id'] == int(p[1]):
                         d = r
                         exists = True
                 if '_type' in k:
                     d['type'] = self.request.params.get(k)
                 if '_val' in k:
                     d['value'] = self.request.params.get(k)
                 if not exists:
                     results.append(d)
                    
         results = sorted(results,key=itemgetter('id'))
         properties = Properties.by({'prop_name':'CREDITS'}).first()
         properties.prop_value = json.dumps(results)
         transaction.commit()
         self.notify('Changes saved!')
         
     self.response['credits'] = json.loads(Properties.get('CREDITS','[]'))
     
     return self.template('/edit-credits.pt', theme='AdminPanel')
Ejemplo n.º 2
0
 def feedback(self):
     self.response['sent_status'] = 0
     if 'feedback.message' in self.request.params:
         msg = Validate.sanatize_textsafe(self.request.params.get('feedback.message',''))
         msg = msg + "\n\n ---------- \n"
         msg = msg + "Player: " + self.request.params.get('feedback.player','error') + "\n"
         msg = msg + "Category: " + self.request.params.get('feedback.category','error') + "\n"
         msg = msg + "From: " + self.request.params.get('feedback.from','error') + "\n"
         
         try:
             # Send to 
             emails = Properties.get('MAILER_FEEDBACK_ADDRESS').replace(' ','').split(',')
             message = Message(subject="Feedback - " + datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S"),
                               sender=self.request.user.email,
                               recipients=emails,
                               body=msg
                               )
             mailer = get_mailer(self.request)
             mailer.send(message)
             
             # Receipt
             message_receipt = Message(subject="Feedback - Receipt",
                               sender=Properties.get('MAILER_GLOBAL_FROM_ADDRESS'),
                               recipients=[self.request.user.email],
                               body="Thank you for submitting feedback. \n\n ---- \n" + Validate.sanatize_textsafe(self.request.params.get('feedback.message',''))
                               )
             mailer.send(message_receipt)
             
             self.response['sent_status'] = 2
         except Exception as e:
             self.response['sent_status'] = 1
     return self.response
Ejemplo n.º 3
0
    def email(self):
        id = self.request.matchdict['id']
        test = Tests.by({'id':id,'alias':self.request.user.alias}).first()
        if not test:
            raise HTTPForbidden()
        file = self._generate_pdf(id)
        self.response['id'] = id
        self.response['emails'] = self.request.params.get('email.addresses',None)
        
        if 'form.submitted' in self.request.params:
            if self.request.params['email.ok'] == '1':
                emails = self.request.params['email.addresses'].replace(' ','').split(',')
                for email in emails:
                    if not Validate.email(email):
                        self.notify('Invalid email address',warn=True)
                        return self.template('email.pt')
                        
                try:
                    message = Message(subject=self._email_fmt(id, str(Properties.get('MAILER_TO_SUBJECT','Submission'))),
                                      sender=str(Properties.get('MAILER_GLOBAL_FROM_ADDRESS','System')),
                                      recipients=emails,
                                      body=self._email_fmt(id, str(Properties.get('MAILER_BODY','Submission'))))
                    attachment = Attachment('submission_' + str(id) + '.pdf', 'application/pdf', file)
                    message.attach(attachment)
                    mailer = get_mailer(self.request)
                    mailer.send(message)
                    self.notify('Email sent!')
                except Exception as e:
                    print "ERROR: " + str(e)
                    self.notify('Unable to send email!',warn=True)
            else:
                self.notify('Unable to send example email!',warn=True)

        return self.template('email.pt')
Ejemplo n.º 4
0
 def edit_leaderboard(self):
     
     if 'edit.leaderboard.submit' in self.request.params:
         archive_date = Properties.by({'prop_name':'LEADERBOARD_ARCHIVE_DATE'}).first()
         archive_date.prop_value = self.request.params.get('edit.leaderboard.archive_date','2013-1-1')
         transaction.commit()
         self.response['message'] = "Leaderboard Settings Changed"
         self.response['message_class'] = "info"
     
     self.response['leaderboard'] = {'archive_date': Properties.get('LEADERBOARD_ARCHIVE_DATE','2013-1-1'),
                                     }
     
     return self.template('/edit-leaderboard.pt', theme='AdminPanel')
Ejemplo n.º 5
0
 def edit_info(self):
 
     # Analytics
     if 'edit.info.analytics.submit' in self.request.params:
         value = self.request.params.get('edit.info.analytics','')
         analytics = Properties.by({'prop_name':'ANALYTICS'}).first()
         analytics.prop_value = value
         transaction.commit()
         self.notify('Changes saved!')
     self.response['analytics'] = Properties.get('ANALYTICS',default='')
     
     # Site User Information
     users = Users.by(None,sort='last_active desc')
     self.response['users_last_active'] = users.all()[0:5]
     self.response['users_local_count'] = users.filter(getattr(Users,'is_local')==True).count()
     self.response['users_non_local_count'] = users.filter(getattr(Users,'is_local')==False).count()
     self.response['users_total_count'] = users.count()
     return self.template('/edit-info.pt', theme='AdminPanel')
Ejemplo n.º 6
0
 def edit_theme(self):
     theme_dir = pkg_resources.resource_filename('quizsmith', 'themes/')
     os.chdir(theme_dir)
     
     try:
         if 'edit.theme.change.submit' in self.request.params:
             value = self.request.params.get('edit.theme.change','')
             p = Properties.by({'prop_name':'ACTIVE_THEME'}).first()
             p.prop_value = value
             transaction.commit()
             self.response['message'] = 'Theme Changed'
             self.response['message_class'] = 'info'
             
         if 'edit.theme.upload.submit' in self.request.params:
             obj = self.request.params.get('edit.theme.upload','')
             zip = zipfile.ZipFile(obj.file, 'r')
             filename = os.path.splitext(os.path.basename(obj.filename))[0]
             allowed_extensions = tuple(self.settings('safe_uploads_ext','').split(','))
             
             try:
                 shutil.rmtree(filename)
             except Exception as e:
                 pass # ignore if folder didn't previously exist
             
             os.makedirs(filename)
             os.chdir(filename)
             for f in zip.namelist():
                 if f.endswith('/'):
                     os.makedirs(f)
                 elif f.endswith(allowed_extensions):
                     zip.extract(f)
             self.response['message'] = 'Theme Uploaded'
             self.response['message_class'] = 'info'
             os.chdir(theme_dir)
             
         if 'edit.theme.remove.submit' in self.request.params:
             value = self.request.params.get('edit.theme.remove','')
             shutil.rmtree(value)
             self.response['message'] = 'Theme Removed'
             self.response['message_class'] = 'info'
             
     except Exception as e:
         self.response['message_class'] = "warn"
         if self.response['message'] == '':
             self.response['message'] = 'Could not complete'
         print str(e)
         
     folders = [d for d in os.listdir('.') if os.path.isdir(d)]
     self.response['restricted_themes'] = []
     self.response['all_themes'] = []
     for f in folders:
         if not any('EXCLUDE_THEME' in s for s in os.listdir(f)):
             self.response['restricted_themes'].append( str(f) )
         self.response['all_themes'].append( str(f) )
         
     return self.template('/edit-theme.pt', theme='AdminPanel')
Ejemplo n.º 7
0
 def edit_theme(self):
     self.determine_instance('AdminPanel') # since instance_id is needed earlier than render time, determine it by calling sooner.
     self.response['changeable_themes'] = []
     self.response['deletable_themes'] = []
     self.response['all_themes'] = []
     
     try:
         if 'edit.theme.change.submit' in self.request.params:
             theme_name = self.request.params.get('edit.theme.change','**SimpleBlue')
             theme_name = theme_name.replace('**','')
             p = Properties.by({'prop_name':'ACTIVE_THEME'}).first()
             p.prop_value = theme_name
             transaction.commit()
             self.notify('Theme changed to ' + theme_name + '!')
             return HTTPFound(location=self.request.application_url + '/edit/theme')
             
         if 'edit.theme.upload.submit' in self.request.params:
             theme_dir = pkg_resources.resource_filename('quizsmith', 'themes/' + self.settings('theme.folder'))
             os.chdir(theme_dir)
             obj = self.request.params.get('edit.theme.upload','')
             zip = zipfile.ZipFile(obj.file, 'r')
             filename = os.path.splitext(os.path.basename(obj.filename))[0]
             allowed_extensions = tuple(self.settings('safe_uploads_ext','').split(','))
             
             try:
                 shutil.rmtree(filename)
             except Exception as e:
                 pass # ignore if folder didn't previously exist
             
             if not self.has_python(zip):
                 firstpass = True
                 for f in zip.namelist():
                     if firstpass and not f.endswith('/'): # created folder if not nested zip
                         os.makedirs(filename)
                         os.chdir(filename)
                     if f.endswith('/'):
                         os.makedirs(f)
                     elif f.endswith(allowed_extensions):
                         zip.extract(f)
                     firstpass = False
                 self.notify('Theme Uploaded: ' + str(filename))
             
         if 'edit.theme.remove.submit' in self.request.params:
             value = self.request.params.get('edit.theme.remove','')
             shutil.rmtree(value)
             self.notify('Theme Removed!  This cannot be undone.')
             
     except Exception as e:
         print str(e)
         self.notify('Could not complete',warn=True)
         
     self.load_themes('default','**')
     self.load_themes(self.settings('theme.folder'),'')
     return self.template('/edit-theme.pt', theme='AdminPanel')
Ejemplo n.º 8
0
    def edit_leaderboard(self):
        
        if 'edit.leaderboard.submit' in self.request.params:
            archive_date = Properties.by({'prop_name':'LEADERBOARD_ARCHIVE_DATE'}).first()
            archive_date.prop_value = self.request.params.get('edit.leaderboard.archive_date','2013-1-1')
            hall_of_fame = Properties.by({'prop_name':'LEADERBOARD_HOF'}).first()
            
            results = []
            for sections in range(int(self.request.params.get('hofs_sections',0))):
                s = str(sections)
                data = {'title':self.request.params.get('hofs_' + s + '_title',''),
                        'index':int(self.request.params.get('hofs_' + s + '_index','0')),
                        'players':[]}
                
                for rows in range(int(self.request.params.get('hofs_' + s + '_rows',0))):
                    r = str(rows)
                    pdata = {'name':self.request.params.get('hofs_' + s + '_' + r + '_name',''),
                             'score':self.request.params.get('hofs_' + s + '_' + r + '_score',''),
                             'index':rows}
                    data['players'].append(pdata)
                data['players'] = sorted(data['players'],key=itemgetter('index'))
                results.append(data)
            results = sorted(results,key=itemgetter('index'))
               
            hall_of_fame.prop_value = json.dumps(results)
            transaction.commit()
            self.notify('Changes saved!')
        
        self.response['leaderboard'] = {'archive_date': Properties.get('LEADERBOARD_ARCHIVE_DATE','2013-1-1')}
        self.response['hofs'] = json.loads(Properties.get('LEADERBOARD_HOF','[]'))
        
        return self.template('/edit-leaderboard.pt', theme='AdminPanel')


        
        
        
        
        
Ejemplo n.º 9
0
    def edit_mailer(self):
    
        if 'edit.mailer.submit' in self.request.params:
            msubject = Properties.by({'prop_name':'MAILER_TO_SUBJECT'}).first()
            msubject.prop_value = self.request.params.get('edit.mailer.subject','')
            mfrom = Properties.by({'prop_name':'MAILER_GLOBAL_FROM_ADDRESS'}).first()
            mfrom.prop_value = self.request.params.get('edit.mailer.from','')
            mfeedback = Properties.by({'prop_name':'MAILER_FEEDBACK_ADDRESS'}).first()
            mfeedback.prop_value = self.request.params.get('edit.mailer.feedback','')
            mhelp = Properties.by({'prop_name':'MAILER_HELP_ADDRESS'}).first()
            mhelp.prop_value = self.request.params.get('edit.mailer.help','')
            mbody = Properties.by({'prop_name':'MAILER_BODY'}).first()
            mbody.prop_value = self.request.params.get('edit.mailer.body','')
            transaction.commit()
            self.notify('Changes saved!')
            
        self.response['mailer'] = {'subject': Properties.get('MAILER_TO_SUBJECT',''),
                                   'from_address': Properties.get('MAILER_GLOBAL_FROM_ADDRESS',''),
                                   'feedback_address': Properties.get('MAILER_FEEDBACK_ADDRESS',''),
                                   'body': Properties.get('MAILER_BODY',''),
                                   'help_address': Properties.get('MAILER_HELP_ADDRESS',''),
                                   }

        return self.template('/edit-mailer.pt', theme='AdminPanel')  
Ejemplo n.º 10
0
 def archive_date(cls):
     return datetime.datetime.strptime(Properties.get('LEADERBOARD_ARCHIVE_DATE'), '%Y-%m-%d')
     
     
Ejemplo n.º 11
0
 def leaderboard_top_scores(self):
     self.response['hofs'] = json.loads(Properties.get('LEADERBOARD_HOF','[]'))
     return self.template('leaderboard_top.pt')
Ejemplo n.º 12
0
 def active_base_theme(self):
     return Properties.get('ACTIVE_THEME','Original')
Ejemplo n.º 13
0
 def help(self):
     self.response['help_address'] = Properties.get('MAILER_HELP_ADDRESS',default='')
     return self.template('help.pt')
Ejemplo n.º 14
0
 def credits(self):
     self.response['credits'] = json.loads(Properties.get('CREDITS','[]'))
     return self.template('credits.pt')
Ejemplo n.º 15
0
 def __init__(self, request):
     self.request = request
     self.context = request.context
     self.theme = self.request.active_base_theme
     self.response = {'instance_id' : 'default',
                      'analytics' : Properties.get('ANALYTICS')}