- Timestamp:
- 10 Sep 2012, 11:05:07 (12 years ago)
- Location:
- main/waeup.kofa/branches/uli-async-update
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/branches/uli-async-update
- Property svn:mergeinfo changed
-
main/waeup.kofa/branches/uli-async-update/src/waeup/kofa/browser/pages.py
r9166 r9169 26 26 import time 27 27 import re 28 from urllib import urlencode 28 29 from zope import schema 29 30 from zope.authentication.interfaces import ( … … 39 40 IPrincipalRoleManager, IPrincipalRoleMap) 40 41 from zope.session.interfaces import ISession 42 from zope.password.interfaces import IPasswordManager 41 43 from waeup.kofa.browser.layout import ( 42 44 KofaPage, KofaForm, KofaEditFormPage, KofaAddFormPage, … … 67 69 from waeup.kofa.widgets.htmlwidget import HTMLDisplayWidget 68 70 from waeup.kofa.authentication import get_principal_role_manager 69 from waeup.kofa.utils.helpers import get_user_account, msave 71 from waeup.kofa.utils.helpers import get_user_account 72 from waeup.kofa.mandates.mandate import PasswordMandate 70 73 71 74 grok.context(IKofaObject) … … 156 159 return 157 160 161 # Save function used for save methods in pages 162 def msave(view, **data): 163 changed_fields = view.applyData(view.context, **data) 164 # Turn list of lists into single list 165 if changed_fields: 166 changed_fields = reduce(lambda x,y: x+y, changed_fields.values()) 167 fields_string = ' + '.join(changed_fields) 168 view.flash(_('Form has been saved.')) 169 ob_class = view.__implemented__.__name__.replace('waeup.kofa.','') 170 if fields_string: 171 grok.getSite().logger.info('%s - %s - saved: %s' % (ob_class, view.context.__name__, fields_string)) 172 return 173 158 174 # 159 175 # Login/logout and language switch pages... … … 192 208 self.redirect(self.camefrom) 193 209 return 194 self.flash(_('You entered wrong credentials.')) 210 # Display appropriate flash message if credentials are correct 211 # but student has been deactivated. 212 login = self.request.form['form.login'] 213 if len(login) == 8 and grok.getSite()['students'].has_key(login): 214 student = grok.getSite()['students'][ 215 self.request.form['form.login']] 216 password = self.request.form['form.password'] 217 passwordmanager = getUtility(IPasswordManager, 'SSHA') 218 if passwordmanager.checkPassword(student.password, password): 219 self.flash(_('Your account has been deactivated.')) 220 return 221 self.flash(_('You entered invalid credentials.')) 195 222 196 223 … … 372 399 def entries(self): 373 400 return () 374 375 class ReindexPage(UtilityView, grok.View):376 """ Reindex view.377 378 Reindexes a catalog. For managers only.379 """380 grok.context(IUniversity)381 grok.name('reindex')382 grok.require('waeup.managePortal')383 384 def update(self,ctlg=None):385 if ctlg is None:386 self.flash('No catalog name provided.')387 return388 cat = queryUtility(ICatalog, name='%s_catalog' % ctlg)389 if cat is None:390 self.flash('%s_catalog does not exist' % ctlg)391 return392 self.context.logger.info(393 'Catalog `%s_catalog` re-indexing started.' % ctlg)394 cat.updateIndexes()395 no_of_entries = cat.values()[0].documentCount()396 self.flash('%d %s re-indexed.' % (no_of_entries,ctlg))397 self.context.logger.info(398 'Re-indexing of %d objects finished.' % no_of_entries)399 return400 401 def render(self):402 self.redirect(self.url(self.context, '@@index'))403 return404 401 405 402 # … … 826 823 return 827 824 825 class DatacenterFinishedPage(KofaEditFormPage): 826 grok.context(IDataCenter) 827 grok.name('processed') 828 grok.require('waeup.manageDataCenter') 829 label = _(u'Processed Files') 830 pnav = 0 831 832 def update(self): 833 datatable.need() 834 return super(DatacenterFinishedPage, self).update() 835 828 836 class DatacenterUploadPage(KofaPage): 829 837 grok.context(IDataCenter) 830 838 grok.name('upload') 831 839 grok.require('waeup.manageDataCenter') 832 label = _(u'Upload file')840 label = _(u'Upload portal data as CSV file') 833 841 pnav = 0 834 842 upload_button =_(u'Upload') … … 849 857 self.flash(_("Only csv files are allowed.")) 850 858 return 851 target = os.path.join(self.context.storage, 852 self.getNormalizedFileName(filename)) 859 normalized_filename = self.getNormalizedFileName(filename) 860 finished_file = os.path.join( 861 self.context.storage, 'finished', normalized_filename) 862 unfinished_file = os.path.join( 863 self.context.storage, 'unfinished', normalized_filename) 864 if os.path.exists(finished_file) or os.path.exists(unfinished_file): 865 self.flash(_("File with same name was uploaded earlier.")) 866 return 867 target = os.path.join(self.context.storage, normalized_filename) 853 868 open(target, 'wb').write(uploadfile.read()) 854 869 os.chmod(target, 0664) … … 881 896 return '%s_%s%s' % (base, filtered_username, ext.lower()) 882 897 898 def getImporters(self): 899 importers = getAllUtilitiesRegisteredFor(IBatchProcessor) 900 importer_props = [] 901 for x in importers: 902 iface_fields = schema.getFields(x.iface) 903 available_fields = [] 904 for key in iface_fields.keys(): 905 iface_fields[key] = (iface_fields[key].__class__.__name__, 906 iface_fields[key].required) 907 for value in x.available_fields: 908 available_fields.append( 909 dict(f_name=value, 910 f_type=iface_fields.get(value, (None, False))[0], 911 f_required=iface_fields.get(value, (None, False))[1] 912 ) 913 ) 914 available_fields = sorted(available_fields, key=lambda k: k['f_name']) 915 importer_props.append( 916 dict(title=x.name, name=x.util_name, fields=available_fields)) 917 return sorted(importer_props, key=lambda k: k['title']) 918 883 919 class FileDownloadView(UtilityView, grok.View): 884 920 grok.context(IDataCenter) … … 897 933 'Content-Type', 'text/csv; charset=UTF-8') 898 934 self.response.setHeader( 899 'Content-Disposition:', 'attachment; filename="%s .csv' %900 self.filename.replace(' .csv',''))935 'Content-Disposition:', 'attachment; filename="%s' % 936 self.filename.replace('finished/','')) 901 937 fullpath = os.path.join(self.context.storage, self.filename) 902 938 return open(fullpath, 'rb').read() 939 940 class SkeletonDownloadView(UtilityView, grok.View): 941 grok.context(IDataCenter) 942 grok.name('skeleton') 943 grok.require('waeup.manageDataCenter') 944 945 def update(self, processorname=None): 946 self.processorname = self.request.form['name'] 947 self.filename = ('%s_000.csv' % 948 self.processorname.replace('processor','import')) 949 return 950 951 def render(self): 952 #ob_class = self.__implemented__.__name__.replace('waeup.kofa.','') 953 #self.context.logger.info( 954 # '%s - skeleton downloaded: %s' % (ob_class, self.filename)) 955 self.response.setHeader( 956 'Content-Type', 'text/csv; charset=UTF-8') 957 self.response.setHeader( 958 'Content-Disposition:', 'attachment; filename="%s' % self.filename) 959 processor = getUtility(IBatchProcessor, name=self.processorname) 960 csv_data = processor.get_csv_skeleton() 961 return csv_data 903 962 904 963 class DatacenterImportStep1(KofaPage): … … 914 973 915 974 def getFiles(self): 916 files = self.context.get Files(sort='date')975 files = self.context.getPendingFiles(sort='date') 917 976 for file in files: 918 977 name = file.name … … 1426 1485 return 1427 1486 result = open(path, 'rb').read() 1487 acronym = grok.getSite()['configuration'].acronym.replace(' ','') 1488 filename = "%s%s.csv" % ( 1489 acronym, exporter.title.title().replace(' ','')) 1490 self.response.setHeader( 1491 'Content-Disposition:', 'attachment; filename="%s' % filename) 1428 1492 self.response.setHeader( 1429 1493 'Content-Type', 'text/csv; charset=UTF-8') … … 1987 2051 grok.template('certificatemanagepage') 1988 2052 taboneactions = [_('Save'),_('Cancel')] 1989 tabtwoactions = [_('Add c ourse referrer'),1990 _('Remove selected c ourse referrers'),_('Cancel')]2053 tabtwoactions = [_('Add certificate course'), 2054 _('Remove selected certificate courses'),_('Cancel')] 1991 2055 tabthreeactions1 = [_('Remove selected local roles')] 1992 2056 tabthreeactions2 = [_('Add local role')] … … 2011 2075 return msave(self, **data) 2012 2076 2013 @jsaction(_('Remove selected c ourse referrers'))2077 @jsaction(_('Remove selected certificate courses')) 2014 2078 def delCertificateCourses(self, **data): 2015 2079 delSubobjects(self, redirect='@@manage', tab='2') 2016 2080 return 2017 2081 2018 @action(_('Add c ourse referrer'), validator=NullValidator)2082 @action(_('Add certificate course'), validator=NullValidator) 2019 2083 def addCertificateCourse(self, **data): 2020 2084 self.redirect(self.url(self.context, 'addcertificatecourse')) … … 2053 2117 form_fields = grok.AutoFields(ICertificateCourseAdd) 2054 2118 pnav = 1 2055 label = _('Add c ourse referrer')2056 2057 @action(_('Add c ourse referrer'))2119 label = _('Add certificate course') 2120 2121 @action(_('Add certificate course')) 2058 2122 def addCertcourse(self, **data): 2059 2123 try: 2060 self.context.addC ourseRef(**data)2124 self.context.addCertCourse(**data) 2061 2125 except KeyError: 2062 self.status = self.flash(_('The chosen c ourse referreris already '2126 self.status = self.flash(_('The chosen certificate course is already ' 2063 2127 'part of this certificate.')) 2064 2128 return 2065 2129 self.status = self.flash( 2066 _(" Course referrer${a}_${b} added.",2130 _("certificate course ${a}_${b} added.", 2067 2131 mapping = {'a': data['course'].code, 'b': data['level']})) 2068 2132 code = "%s_%s" % (data['course'].code, data['level']) … … 2105 2169 grok.require('waeup.manageAcademics') 2106 2170 form_fields = grok.AutoFields(ICertificateCourse) 2107 label = _('Edit c ourse referrer')2171 label = _('Edit certificate course') 2108 2172 pnav = 1 2109 2173 … … 2118 2182 old_level = self.context.level 2119 2183 data['course'] = self.context.course 2120 parent.addC ourseRef(**data)2121 parent.delC ourseRef(data['course'].code, level=old_level)2184 parent.addCertCourse(**data) 2185 parent.delCertCourse(data['course'].code, level=old_level) 2122 2186 self.flash(_('Form has been saved.')) 2123 2187 old_code = "%s_%s" % (data['course'].code, old_level) … … 2193 2257 # Change password 2194 2258 kofa_utils = getUtility(IKofaUtils) 2195 pwd = kofa_utils.genPassword() 2196 IUserAccount(user).setPassword(pwd) 2197 # Send email with new redentials 2198 msg = _('You have successfully changed your password for the') 2199 login_url = self.url(grok.getSite(), 'login') 2259 password = kofa_utils.genPassword() 2260 mandate = PasswordMandate() 2261 mandate.params['password'] = password 2262 mandate.params['user'] = user 2263 site = grok.getSite() 2264 site['mandates'].addMandate(mandate) 2265 # Send email with credentials 2266 args = {'mandate_id':mandate.mandate_id} 2267 mandate_url = self.url(site) + '/mandate?%s' % urlencode(args) 2268 url_info = u'Confirmation link: %s' % mandate_url 2269 msg = _('You have successfully requested a password for the') 2200 2270 success = kofa_utils.sendCredentials( 2201 IUserAccount(user),p wd,login_url,msg)2271 IUserAccount(user),password,url_info,msg) 2202 2272 if success: 2203 2273 self.flash(_('An email with your user name and password ' +
Note: See TracChangeset for help on using the changeset viewer.