hello,

I wasn't able to run your example because of tabbing issues, but from
examining it I see you added the user_role field. But the login and
register forms still seem to require an email - is that right?
How do you intend to deal with updates to t2.py? Stay with your edited
version, or remake these edits after each update?

Richard


On Nov 17, 4:16 am, tommy <[EMAIL PROTECTED]> wrote:
> I had same issue, I changed the t2.py and it worked out.  Here is my
> code. I added one field in the personal table.
>
> """
> This file was developed by Massimo Di Pierro as a web2py extension.
> This file is released under the BSD license (you can include it in
> bytecode compiled web2py apps as long as you acknowledge the author).
> web2py (required to run this file) is released under the GPLv2
> license.
> TODO:
>    - ok, works on GAE but need to fix ID in search
>    - ok, delete files and dowload on GAE
>    - add media_player?
>    - add slideshow?
>    - add layout customization?
> """
>
> from gluon.storage import Storage
> from gluon.html import *
> from gluon.http import *
> from gluon.validators import *
> from gluon.sqlhtml import *
> from gluon.contrib.markdown import WIKI
>
> class T2:
>     IMAGE_EXT=['.jpg','.gif','.png']
>
>     def __init__
> (self,request,response,session,cache,T,db,all_in_db=False):
>         """
>         Creates a T2 object and all necessary tables:
>
>        t2_person:     name, email, password, user_role,
> registration_key
>         t2_group:      name
>         t2_membership: person_id, group_id, membership_type, status
>         t2_access:     person_id, table_name, record_id, access_type
>         t2_attachment: ...
>         t2_comment:    ...
>         t2_review:     ...
>
>         request.args[-1] is stored in self.id
>         if self.logged_in:
>             self.person_id, self.person_name, self.person_email,
> self.user_role
>         """
>         import datetime
>         self.error_action='error'
>         self.now=now=datetime.datetime.now()
>         self.request=request
>         self.response=response
>         self.session=session
>         self.cache=cache
>         self.T=T
>         self.db=db
>         self.all_in_db=all_in_db
>         if self.db._dbname=='gql':
>             self.is_gae=True
>             self.all_in_db=True
>         else: self.is_gae=False
>         if all_in_db: session.connect(request,response,db=db)
>         if not session.t2: session.t2=Storage()
>         self.id=request.args[-1] if request.args else 0
>         self.person_name=session.t2.person_name
>         self.person_id=session.t2.person_id
>         self.person_email=session.t2.person_email
>         self.user_role=session.t2.user_role
>         """
> This file was developed by Massimo Di Pierro as a web2py extension.
> This file is released under the BSD license (you can include it in
> bytecode compiled web2py apps as long as you acknowledge the author).
> web2py (required to run this file) is released under the GPLv2
> license.
> TODO:
>    - ok, works on GAE but need to fix ID in search
>    - ok, delete files and dowload on GAE
>    - add media_player?
>    - add slideshow?
>    - add layout customization?
> """
>
> from gluon.storage import Storage
> from gluon.html import *
> from gluon.http import *
> from gluon.validators import *
> from gluon.sqlhtml import *
> from gluon.contrib.markdown import WIKI
>
> class T2:
>     IMAGE_EXT=['.jpg','.gif','.png']
>
>     def __init__
> (self,request,response,session,cache,T,db,all_in_db=False):
>         """
>         Creates a T2 object and all necessary tables:
>
>        t2_person:     name, email, password, user_role,
> registration_key
>         t2_group:      name
>         t2_membership: person_id, group_id, membership_type, status
>         t2_access:     person_id, table_name, record_id, access_type
>         t2_attachment: ...
>         t2_comment:    ...
>         t2_review:     ...
>
>         request.args[-1] is stored in self.id
>         if self.logged_in:
>             self.person_id, self.person_name, self.person_email,
> self.user_role
>         """
>         import datetime
>         self.error_action='error'
>         self.now=now=datetime.datetime.now()
>         self.request=request
>         self.response=response
>         self.session=session
>         self.cache=cache
>         self.T=T
>         self.db=db
>         self.all_in_db=all_in_db
>         if self.db._dbname=='gql':
>             self.is_gae=True
>             self.all_in_db=True
>         else: self.is_gae=False
>         if all_in_db: session.connect(request,response,db=db)
>         if not session.t2: session.t2=Storage()
>         self.id=request.args[-1] if request.args else 0
>         self.person_name=session.t2.person_name
>         self.person_id=session.t2.person_id
>         self.person_email=session.t2.person_email
>         self.user_role=session.t2.user_role
>         self.logged_in=True if self.person_id else False
>         self._define_messages()
>         self._create_tables()
>         if session.t2.my_groups_id:
>             self.my_groups_id=session.t2.my_groups_id
>         else:
>             self.memberships=self.my_memberships()
>             self.my_groups_id=[g.group_id for g in self.memberships]
>             session.t2.my_groups_id=self.my_groups_id
>         response.files=[
>           '/plugin_t2/static/t2/scripts/jquery.js',
>           '/plugin_t2/static/t2/styles/calendar.css',
>           '/plugin_t2/static/t2/scripts/calendar.js',
>           '/plugin_t2/static/t2/styles/sfmenu.css',
>           '/plugin_t2/static/t2/scripts/sfmenu.js',
>           '/plugin_t2/static/t2/scripts/fancyzoom.min.js',
>           '/plugin_t2/static/t2/styles/rating.css',
>           '/plugin_t2/static/t2/scripts/rating.js',
>           '/plugin_t2/static/t2/scripts/web2py.js',
>         ]
>
>     def onerror(self): ### FIX - PASS MORE PARAMETERS
>         """
>         To be used as a decorator. On error it calles self._error()
>         """
>         def g(f):
>             def h(*a,**b):
>                 try: return f(*a,**b)
>                 except HTTP, e: raise e
>                 except Exception: self._error()
>             return h
>         return g
>
>     def _globals(self):
>         """
>         Returns (request,response,session,cache,T,db)
>         """
>         return self.request, self.response, self.session, \
>                self.cache, self.T, self.db
>
>     def _error(self):
>         """
>         Redirects to the self.error_action (='error'?) page.
>         """
>         self.redirect(self.error_action)
>
>     def action(self,f=None,args=[],vars={}):
>         """
>         self.action('name',[],{}) is a shortcut for
>
>             URL(r=request,f='name',args=[],vars={})
>         """
>         if not f: f=self.request.function
>         if not isinstance(args,(list,tuple)): args=[args]
>         return URL(r=self.request,f=f,args=args,vars=vars)
>
>     def redirect(self,f=None,args=[],vars={},flash=None):
>         """
>         self.redirect('name',[],{},'message') is a shortcut for
>
>             session.flash='message'
>             redirect(URL(r=request,f='name',args=[],vars={})
>         """
>         if flash: self.session.flash=flash
>         redirect(self.action(f,args,vars))
>
>     def include(self):
>         """
>         In the layout.html <head>{{=t2.include()}}</head> includes all
>         necessary CSS and JS files for this plugin to work.
>         """
>         s=''
>         for file in self.response.files:
>             if file[-4:]=='.css':
>                 s+=LINK(_href=file,
>                         _rel="stylesheet",
>                         _type="text/css",
>                         _charset="utf-8").xml()
>             elif file[-3:]=='.js':
>                 s+=SCRIPT(_src=file).xml()
>         return XML(s)
>
>     def menu(self,menu,style='h'):
>         """
>         In the layout {{=t2.menu(style='h')}} inserts a menu from
> response.menu
>
>         It assumes response.menu=[item1, items2, ...] where
>         item1=['name',active True/False,URL(...),[item11,item12,...]]
>         item11 is a submenu item, etc.
>
>         style can be 'h' for horizontal, 'v' for vertical, 'n' for
> navigation
>         """
>         request,response,session,cache,T,db=self._globals()
>         def rec_menu(menu,_class=None):
>            items=[LI(A(i[0],_class='current' if i[1] else None,
>                        _href=i[2]),rec_menu(i[3]) if len(i)>3 else '')
> \
>                   for i in menu]
>            return UL(_class=_class if _class else None,*items)
>         if not menu: return ''
>         _class='sf-menu'
>         if style=='n': _class+=' sf-navbar'
>         if style=='v': _class+=' sf-vertical'
>         return rec_menu(menu,_class=_class)
>
>     @staticmethod
>     def _capitalize(text):
>         return ' '.join([c.capitalize() for c in text.split('_')])
>
>     @staticmethod
>     def _get_labels(table):
>         labels={}
>         for field in table.fields:
>             if hasattr(table[field],'label'):
>                 labels[field]=table[field].label
>         return labels
>
>     @staticmethod
>     def _get_col3(table):
>         col3={}
>         for field in table.fields:
>             if hasattr(table[field],'comment'):
>                 col3[field]=table[field].comment
>         return col3
>
>     def _define_messages(self):
>         self.messages=Storage()
>         self.messages.record_created="Record Created"
>         self.messages.record_modified="Record Modified"
>         self.messages.record_deleted="Record(s) Deleted"
>         self.messages.record_was_altered="Record Could Not Be Saved
> Because It Has Changed"
>         self.messages.invalid_value="Invalid Enrty"
>         self.messages.attachment_posted="Attchment Posted"
>         self.messages.no_comments="No Comments"
>         self.messages.no_visible_comments="No Visible Comments"
>         self.messages.review_posted="Review Posted"
>         self.messages.register_email_body="Click here %
> (registration_key)s to complete registration"
>         self.messages.register_email_subject="Verify Registration"
>         self.messages.logged_in="Logged In"
>         self.messages.invalid_login="Invalid Login"
>         self.messages.logged_out="Logged Out"
>
>     def _create_tables(self):
>         """
>         Defines all tables needed by the plugin to work
>         (if they do not exist) called by contructor.
>         """
>         import uuid
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to