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 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.º 3
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.º 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_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.º 6
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','')
            mbody = Properties.by({'prop_name':'MAILER_BODY'}).first()
            mbody.prop_value = self.request.params.get('edit.mailer.body','')
            transaction.commit()
            self.response['message'] = "Mailer Settings Changed"
            self.response['message_class'] = "info"
            
        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',''),
                                   }

        return self.template('/edit-mailer.pt', theme='AdminPanel')  
Ejemplo n.º 7
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')