Changes between Version 26 and Version 27 of BluePrintRESTImplementation


Ignore:
Timestamp:
01/10/09 21:25:23 (16 years ago)
Author:
nemik
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • BluePrintRESTImplementation

    v26 v27  
    5050        JSON
    5151         - read-only for now
     52        CSV (useful for synchronization)
     53         - read-only for now
    5254
    5355    ToDo:
    5456        Alternate Representations
    5557            JSON create/update
    56             SMS,CSV,XML,PDF
     58            CSV create/update
     59            SMS,XML,PDF
    5760        Search method
    5861        Customisable Security Policy
     
    6063   
    6164    table=db['%s_%s' % (module,resource)]
    62     crud_strings=shn_crud_strings_lookup(resource)
     65    if resource=='setting':
     66        crud_strings=shn_crud_strings_lookup(resource)
     67    else:
     68        crud_strings=shn_crud_strings_lookup(table)
    6369   
    6470    # Which representation should output be in?
     
    7076   
    7177    if len(request.args)==0:
    72         # No arguments => default to list (or list_create if logged_in)
     78        # No arguments => default to List (or list_create if logged_in)
     79        if session.s3.audit_read:
     80            db.s3_audit.insert(
     81                person=t2.person_id,
     82                operation='list',
     83                module=request.controller,
     84                resource=resource,
     85                old_value='',
     86                new_value=''
     87            )
    7388        if representation=="html":
    7489            list=t2.itemize(table)
     
    7994            if t2.logged_in:
    8095                form=t2.create(table)
    81                 response.view='list_create.html'
     96                custom_view='%s_list_create.html' % resource
     97                _custom_view=os.path.join(request.folder,'views',module,custom_view)
     98                if os.path.exists(_custom_view):
     99                    response.view=module+'/'+custom_view
     100                else:
     101                    response.view='list_create.html'
    82102                addtitle=crud_strings.subtitle_create
    83103                return dict(module_name=module_name,modules=modules,options=options,list=list,form=form,title=title,subtitle=subtitle,addtitle=addtitle)
    84104            else:
    85                 add_btn=A(crud_strings.label_create_button,_href=t2.action(resource,'create'))
    86                 response.view='list.html'
     105                add_btn=A(crud_strings.label_create_button,_href=t2.action(resource,'create'),_id='add-btn')
     106                custom_view='%s_list.html' % resource
     107                _custom_view=os.path.join(request.folder,'views',module,custom_view)
     108                if os.path.exists(_custom_view):
     109                    response.view=module+'/'+custom_view
     110                else:
     111                    response.view='list.html'
    87112                return dict(module_name=module_name,modules=modules,options=options,list=list,title=title,subtitle=subtitle,add_btn=add_btn)
    88113        elif representation=="plain":
     
    94119            response.view='plain.html'
    95120            return dict(item=list)
     121        elif representation=="csv":
     122            import gluon.contenttype
     123            response.headers['Content-Type']=gluon.contenttype.contenttype('.csv')
     124            query=db['%s' % table].id>0
     125            response.headers['Content-disposition']="attachment; filename=%s_%s_list.csv" % (request.env.server_name,resource)
     126            return str(db(query).select())
    96127        else:
    97128            session.error=T("Unsupported format!")
     
    100131        method=str.lower(request.args[0])
    101132        if request.args[0].isdigit():
    102             # 1st argument is ID not method => display.
     133            # 1st argument is ID not method => Display.
     134            if session.s3.audit_read:
     135                db.s3_audit.insert(
     136                    person=t2.person_id,
     137                    operation='read',
     138                    representation=representation,
     139                    module=request.controller,
     140                    resource=resource,
     141                    record=t2.id,
     142                    old_value='',
     143                    new_value=''
     144                )
    103145            if representation=="html":
    104146                item=t2.display(table)
    105                 response.view='display.html'
     147                custom_view='%s_display.html' % resource
     148                _custom_view=os.path.join(request.folder,'views',module,custom_view)
     149                if os.path.exists(_custom_view):
     150                    response.view=module+'/'+custom_view
     151                else:
     152                    response.view='display.html'
    106153                title=crud_strings.title_display
    107                 edit=A(T("Edit"),_href=t2.action(resource,['update',t2.id]))
    108                 delete=A(T("Delete"),_href=t2.action(resource,['delete',t2.id]))
    109                 list_btn=A(crud_strings.label_list_button,_href=t2.action(resource))
     154                edit=A(T("Edit"),_href=t2.action(resource,['update',t2.id]),_id='edit-btn')
     155                delete=A(T("Delete"),_href=t2.action(resource,['delete',t2.id]),_id='delete-btn')
     156                list_btn=A(crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn')
    110157                return dict(module_name=module_name,modules=modules,options=options,item=item,title=title,edit=edit,delete=delete,list_btn=list_btn)
    111158            elif representation=="plain":
     
    117164                response.view='plain.html'
    118165                return dict(item=item)
     166            elif representation=="csv":
     167                import gluon.contenttype
     168                response.headers['Content-Type']=gluon.contenttype.contenttype('.csv')
     169                query=db['%s' % table].id==t2.id
     170                response.headers['Content-disposition']="attachment; filename=%s_%s_%d.csv" % (request.env.server_name,resource,t2.id)
     171                return str(db(query).select())
     172            elif representation=="rss":
     173                #if request.args and request.args[0] in settings.rss_procedures:
     174                #   feed=eval('%s(*request.args[1:],**dict(request.vars))'%request.args[0])
     175                #else:
     176                #   t2._error()
     177                #import gluon.contrib.rss2 as rss2
     178                #rss = rss2.RSS2(
     179                #   title=feed['title'],
     180                #   link = feed['link'],
     181                #   description = feed['description'],
     182                #   lastBuildDate = feed['created_on'],
     183                #   items = [
     184                #      rss2.RSSItem(
     185                #        title = entry['title'],
     186                #        link = entry['link'],
     187                #        description = entry['description'],
     188                #        pubDate = entry['created_on']) for entry in feed['entries']]
     189                #   )
     190                #response.headers['Content-Type']='application/rss+xml'
     191                #return rss2.dumps(rss)
     192                response.view='plain.html'
     193                return
    119194            else:
    120195                session.error=T("Unsupported format!")
     
    123198            if method=="create":
    124199                if t2.logged_in:
     200                    if session.s3.audit_write:
     201                        audit_id=db.s3_audit.insert(
     202                            person=t2.person_id,
     203                            operation='create',
     204                            representation=representation,
     205                            module=request.controller,
     206                            resource=resource,
     207                            record=t2.id,
     208                            old_value='',
     209                            new_value=''
     210                        )
    125211                    if representation=="html":
    126212                        t2.messages.record_created=crud_strings.msg_record_created
    127213                        form=t2.create(table)
    128                         response.view='create.html'
     214                        custom_view='%s_create.html' % resource
     215                        _custom_view=os.path.join(request.folder,'views',module,custom_view)
     216                        if os.path.exists(_custom_view):
     217                            response.view=module+'/'+custom_view
     218                        else:
     219                            response.view='create.html'
    129220                        title=crud_strings.title_create
    130                         list_btn=A(crud_strings.label_list_button,_href=t2.action(resource))
     221                        list_btn=A(crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn')
    131222                        return dict(module_name=module_name,modules=modules,options=options,form=form,title=title,list_btn=list_btn)
    132223                    elif representation=="plain":
     
    148239            elif method=="update":
    149240                if t2.logged_in:
     241                    if session.s3.audit_write:
     242                        old_value = []
     243                        _old_value=db(db['%s' % table].id==t2.id).select()[0]
     244                        for field in _old_value:
     245                            old_value.append(field+':'+str(_old_value[field]))
     246                        audit_id=db.s3_audit.insert(
     247                            person=t2.person_id,
     248                            operation='update',
     249                            representation=representation,
     250                            module=request.controller,
     251                            resource=resource,
     252                            record=t2.id,
     253                            old_value=old_value,
     254                            new_value=''
     255                        )
    150256                    if representation=="html":
    151257                        t2.messages.record_modified=crud_strings.msg_record_modified
    152258                        form=t2.update(table,deletable=False)
    153                         response.view='update.html'
     259                        custom_view='%s_update.html' % resource
     260                        _custom_view=os.path.join(request.folder,'views',module,custom_view)
     261                        if os.path.exists(_custom_view):
     262                            response.view=module+'/'+custom_view
     263                        else:
     264                            response.view='update.html'
    154265                        title=crud_strings.title_update
    155                         list_btn=A(crud_strings.label_list_button,_href=t2.action(resource))
     266                        list_btn=A(crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn')
    156267                        return dict(module_name=module_name,modules=modules,options=options,form=form,title=title,list_btn=list_btn)
    157268                    elif representation=="plain":
     
    171282            elif method=="delete":
    172283                if t2.logged_in:
     284                    if session.s3.audit_write:
     285                        old_value = []
     286                        _old_value=db(db['%s' % table].id==t2.id).select()[0]
     287                        for field in _old_value:
     288                            old_value.append(field+':'+str(_old_value[field]))
     289                        db.s3_audit.insert(
     290                            person=t2.person_id,
     291                            operation='delete',
     292                            representation=representation,
     293                            module=request.controller,
     294                            resource=resource,
     295                            record=t2.id,
     296                            old_value=old_value,
     297                            new_value=''
     298                        )
    173299                    t2.messages.record_deleted=crud_strings.msg_record_deleted
    174300                    t2.delete(table,next=resource)