Ejemplo n.º 1
0
    def add( self, environ ) :
        """Add a new attachment
        URLS :
            /attachment/add?form=request&formname=addattachs
            /attachment/add?form=submit&formname=addattachs
        """
        from zeta.config.environment    import vfcomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler( errmsg ) :
            c.errmsg = errmsg
        vfcomp.process(
            request, c, defer=True, errhandler=errhandler,
            user=c.authuser, formnames=['addattachs']
        )

        # Setup context for page generation
        c.title = 'AddAttachs'

        # Html page generation
        if c.errmsg :
            html = self.returnerrmsg(environ)
        else :
            html = render( '/derived/attachs/add.html' )

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 2
0
    def uploadlogo( self, environ ) :
        """Action to upload site logo file"""
        from zeta.config.environment    import vfcomp, userscomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg) :
            c.errmsg = errmsg
        vfcomp.process(
            request, c, defer=True,
            errhandler=h.hitchfn(errhandler), formnames=[ 'sitelogo']
        )

        c.title = 'SiteLogo'

        # Html page generation
        if c.errmsg :
            html = self.returnerrmsg(environ)
        elif c.form == 'submit' :
            h.redirect_url( h.url_siteadmin )
        else :
            html = render( '/derived/siteadmin/sitelogo.html' )

        c.rclose.append(html)
        return html
Ejemplo n.º 3
0
    def liccreate(self, environ):
        """Create a new license to be hosted on this site.
        URLS :
            /license/create
            /license/create?form=submit&formname=createlic
        """
        from zeta.config.environment import vfcomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg):
            c.errmsg = errmsg

        vfcomp.process(request,
                       c,
                       defer=True,
                       errhandler=h.hitchfn(errhandler),
                       formnames=['createlic'],
                       user=c.authuser)

        # Setup context for page generation
        c.licensenames, c.licenselist, licfields = self._selectoptions()
        c.title = (c.form == 'request' and '-Skip-') or 'CreateLicense'

        # Html page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)
        else:
            html = render('/derived/license/liccreate.html')
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 4
0
    def create( self, environ ) :
        """Create and host a new project
        URLS :
            /p/newproject?form=request&formname=createprj
            /p/newproject?form=submit&formname=createprj
        """
        from zeta.config.environment    import liccomp, projcomp, vfcomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg) :
            c.errmsg = errmsg
        vfcomp.process(
            request, c, defer=True, errhandler=h.hitchfn(errhandler),
            formnames=['createprj'], user=c.authuser
        )

        # Setup context for page generation
        c.licensenames = sorted([ l[1] for l in liccomp.licensefields() ])
        c.projectnames = projcomp.projectnames
        c.liceditable  = h.authorized( h.HasPermname(['LICENSE_CREATE']) )
        c.title = 'CreateProject'

        # Html page generation
        if c.errmsg :
            html = self.returnerrmsg(environ)
        elif c.form == 'submit' :
            h.redirect_url( h.url_createprj )
        else :
            html = render( '/derived/projects/create.html' )
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 5
0
    def create(self, environ, projectname):
        """Create a new project review
        URLS : 
            /p/{projectname}/r/createrevw?form=request&formname=createrev
            /p/{projectname}/r/createrevw?form=submit&formname=createrev
        """
        from zeta.config.environment import projcomp, userscomp, vcscomp, vfcomp

        cfok = lambda cf : ( cf['mime_type'] != 'text/directory' ) and \
                           ( cf['changetype'] != 'deleted' )

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        vfcomp.process(request,
                       c,
                       defer=True,
                       errhandler=h.hitchfn(errhandler),
                       formnames=['createrev'],
                       user=c.authuser)

        # Setup context for page generation
        c.projsummary = c.project.summary
        c.projusers = self.projusers(c.project)
        c.usernames = sorted(userscomp.usernames)
        c.rsets = [[rs.id, rs.name] for rs in c.project.reviewsets]
        c.forsrc = request.params.getall('rurl')
        c.forversion = request.params.get('ver', None)
        c.forversion = int(c.forversion) if c.forversion != None else None
        vcsid = request.params.get('vcsid', None)
        c.vcs = vcsid and vcscomp.get_vcs(int(vcsid))
        c.vrep = c.vcs and va.open_repository(c.vcs)
        c.title = 'CreateReview'
        if c.vrep:
            c.changedfiles = c.vrep.changedfiles(c.vcs.rooturl,
                                                 revstart=c.forversion - 1,
                                                 revend=c.forversion)
            c.forsrc = [
                join(c.vcs.rooturl, cf['repos_path'].lstrip('/'))
                for cf in c.changedfiles if cfok(cf)
            ]

        # HTML page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)

        elif c.form == 'submit' and c.formname == 'createrev':
            # Skip breadcrumbing, if it is a form submit
            c.title = '-Skip-'
            h.redirect_url(h.url_revwcreate)

        else:
            html = render('/derived/projects/reviewcreate.html')

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 6
0
    def index( self, environ ) :
        """List of all attachments
        URLS :
            /attachment
            /attachment?fromid=<number>
            /attachment?all=1
            /attachment?form=submit&formname=attachssummary&view=js
            /attachment?form=submit&formname=attachstags&view=js
        """
        from zeta.config.environment    import attcomp, vfcomp

        c.rclose = h.ZResp()
        h.url_attachpages = self.url_attachpages()

        # Form handling
        def errhandler( errmsg ) :
            c.errmsg = errmsg
        vfcomp.process(
            request, c, defer=True, errhandler=errhandler,
            user=c.authuser, formnames=['attachssummary', 'attachstags']
        )

        try :
            fromid = c.fromid and int(c.fromid)
            fromid -= 1
        except :
            fromid = None
        c.title = 'Attachments'
        c.aa = ca.get_analyticobj( 'attachs' )
        c.ua = ca.get_analyticobj( 'users' )
        c.la = ca.get_analyticobj( 'license' )
        c.pa = ca.get_analyticobj( 'projects' )
        c.ta = ca.get_analyticobj( 'tickets' )
        c.ra = ca.get_analyticobj( 'reviews' )
        c.wa = ca.get_analyticobj( 'wiki' )

        # Html page generation
        if c.errmsg :
            html = self.returnerrmsg(environ)
        elif c.view == 'js' :
            html = ''
        else :
            limit = 100 if c.all == None else None
            attachments = attcomp.attachments( offset=fromid, limit=limit )
            attachs = [ [ aid ] + attachments[aid][:-1] + \
                        [ ', '.join(attachments[aid][-1]) ] + \
                        [ self.url_attachdownl( aid ) ]
                        for aid in attachments ]
            c.attachassc= attcomp.attachassc()
            c.attachments = { 'all-attachments' : attachs }
            c.editable = h.authorized( h.ValidUser( strict='True' ))

            html = render( '/derived/attachs/index.html' )

        c.rclose.append( html )
        return c.rclose
Ejemplo n.º 7
0
    def newaccount( self, environ ) :
        """Create new user account
        URLS :
            /accounts/newaccount?form=request&formname=createuser
            /accounts/newaccount?form=request&formname=createuser&digest=<digest>
            /accounts/newaccount?form=submit&formname=createuser
            /accounts/newaccount?form=submit&formname=createuser&digest=<digest>
        """
        from zeta.config.environment    import userscomp, vfcomp

        c.rclose = h.ZResp()

        # Calculate whether registration is allowed.
        regrbyinvite = h.str2bool( c.sysentries['regrbyinvite'] )
        c.uinv = None
        if not regrbyinvite :
            c.allowregistration = True
        elif c.digest :
            c.uinv = userscomp.invbydigest( c.digest )
            c.allowregistration = bool(c.uinv)
        else :
            c.uinv = None
            c.allowregistration = False

        # Setup context for page generation
        c.usernames = userscomp.usernames

        # Form handling
        def errhandler(ERROR_FLASH, errmsg) :
            h.flash( ERROR_FLASH + errmsg )
            h.redirect_url( h.url_register )
        vfcomp.process(
            request, c,
            defer=True, errhandler=h.hitchfn(errhandler, ERROR_FLASH),
            formnames=['createuser']
        )

        # If registeration was successful in `form handling` go-to-signin
        if c.form == 'submit' :
            username = request.POST.get( 'username', None )
            c.uinv and userscomp.acceptedby( unicode(username), c.uinv )
            h.flash( self.okmsg1 )
            h.redirect_url( h.url_signin )

        # Generate page
        c.rclose.append(render( '/derived/accounts/register.html' ))
        return c.rclose
Ejemplo n.º 8
0
    def projecthome( self, environ, projectname ) :
        """Project main-page for `projectname`
        URLS :
            /p/<projectname>
            /p/<projectname>?translate=1
            /p/<projectname>?jsonobj=projectlogo&view=js
            /p/<projectname>?jsonobj=projecticon&view=js
            /p/<projectname>?form=submit&formname=projfav&view=js
        """
        from zeta.config.environment    import projcomp, wikicomp, vfcomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg) :
            c.errmsg = errmsg
        vfcomp.process(
            request, c, defer=True, errhandler=h.hitchfn(errhandler),
            formnames=['projfav'], user=c.authuser
        )

        # Setup context for page generation
        c.projsummary = c.project.summary
        pt = {}
        [ pt.setdefault( t.teamtype.team_type, [] ).append( t.user.username )
          for t in c.project.team ]
        c.projectteams = pt
        c.att_editable = h.authorized( h.ProjectAdmin() )
        c.tag_editable = c.att_editable
        c.isfavorite = projcomp.checkfavorite( c.project.id, c.authuser.id )
        c.tags = self._prjtags( c.project )
        c.title = c.projectname

        fpurl = unicode( self.url_wikiurl( c.projectname, PROJHOMEPAGE ))
        w = wikicomp.get_wiki( fpurl, attrload=[ 'tablemap' ] )
        c.fpwcnt = wikicomp.get_content( w, translate=True ) if w else None
        c.fphtml = wikipage2html( c.fpwcnt, c.translate )

        # Html page generation
        if c.errmsg :
            html = self.returnerrmsg(environ)
        elif c.jsonobj and c.view == 'js' :
            html = self.handlejson(environ)
        elif c.view != 'js' :
            html = render( '/derived/projects/project.html' )
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 9
0
    def wikiindex(self, environ, projectname):
        """Project wiki pages.
        URLS :
            /p/{projectname}/wiki
            /p/{projectname}/wiki?jsonobj=wikilist&view=js
            /p/{projectname}/wiki?form=submit&formname=vcsfile2wiki&view=js
            /p/{projectname}/wiki?form=submit&formname=configwiki&view=js
        """
        from zeta.config.environment import projcomp, wikicomp, vfcomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % tckperm[c.formname]
        else:
            vfcomp.process(
                request,
                c,
                defer=True,
                errhandler=h.hitchfn(errhandler),
                formnames=['vcsfile2wiki', 'configwiki'],
            )

        # Setup context for page generation
        c.projsummary = c.project.summary
        if not c.jsonobj and c.formname != 'vcsfile2wiki':
            c.wikitypenames = wikicomp.typenames
            c.wikipagenames = self.wikipagename(wikicomp.wikiurls(c.project))
            c.wikipagename = None
            c.wikieditable = h.authorized(h.HasPermname('WIKI_CREATE'))
            c.title = '%s:wiki' % projectname

        # HTML page generation
        html = ''
        if c.errmsg:
            html = self.returnerrmsg(environ)
        elif c.view == 'js' and c.jsonobj:
            html = self.handlejson(environ)
        elif c.view != 'js':
            html = render('/derived/projects/wikiindex.html')
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 10
0
    def preference( self, environ, username, **kwargs ) :
        """Handle user preference
        URLS :
            /u/{username}/preference?form=request
            /u/{username}/preference?form=submit&formname=updateuser&view=js
            /u/{username}/preference?form=submit&formname=updtpass&view=js
            /u/{username}/preference?form=submit&formname=userphoto&view=js
            /u/{username}/preference?form=submit&formname=deluserphoto&view=js
            /u/{username}/preference?form=submit&formname=usericon&view=js
            /u/{username}/preference?form=submit&formname=delusericon&view=js
            /u/{username}/preference?form=submit&formname=adduserrels&view=js
            /u/{username}/preference?form=submit&formname=approveuserrels&view=js
            /u/{username}/preference?form=submit&formname=deluserrels&view=js
        """
        from zeta.config.environment    import vfcomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg) :
            c.errmsg = errmsg
        if c.usercaninvite :
            vfcomp.process(
                request, c, defer=True, errhandler=h.hitchfn(errhandler),
                formnames=[ 'updateuser', 'updtpass', 'userphoto',
                'deluserphoto', 'usericon', 'delusericon', 'adduserrels',
                'approveuserrels', 'deluserrels' ], user=c.authuser
            )

        # Setup context for page rendering
        uinfo            = c.authuser.userinfo
        c.title          = 'Preference'
        c.photo_editable = c.icon_editable = h.authorized( h.ValidUser( strict='True' ))
        c.photoattach    = self._userphoto( c.authuser )
        c.iconattach     = self._usericon( c.authuser )
        c.googlemaps     = h.gmapkey( c.sysentries )
        c.fulladdress    = h.useraddress( uinfo )

        # Html page generation
        if c.view == 'js' and c.formname in [ 'userphoto', 'usericon' ] :
            html = IFRAME_RET
        else :
            html = render( '/derived/userpage/preference.html' )
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 11
0
    def vcsindex(self, environ, projectname):
        """Project source control
        URLS :
            /p/{projectname}/s
            /p/{projectname}/s?jsonobj=vcslist&view=js
            /p/{projectname}/s?form=submit&formname=configvcs&view=js
        """
        from zeta.config.environment import vfcomp, projcomp, vcscomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % tckperm[c.formname]
        else:
            vfcomp.process(
                request,
                c,
                defer=True,
                errhandler=h.hitchfn(errhandler),
                formnames=['configvcs'],
            )

        # Setup context for page generation
        c.projsummary = c.project.summary
        c.vcs_typenames = vcscomp.vcstypenames
        c.vcseditable = h.authorized(h.HasPermname('VCS_CREATE'))
        c.title = '%s:source' % projectname

        # HTML page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)
        elif c.view == 'js' and c.jsonobj:
            html = self.handlejson(environ)
        elif c.view != 'js':
            html = render('/derived/projects/vcsindex.html')
        else:
            html = ''

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 12
0
    def reviewsets(self, environ, projectname):
        """Review set
        URLS :
            /p/{projectname}/rset
            /p/{projectname}/rset?form=submit&formname=createrset&view=js
            /p/{projectname}/rset?form=submit&formname=updaterset&view=js
            /p/{projectname}/rset?form=submit&formname=addtorset&view=js
            /p/{projectname}/rset?form=submit&formname=delfromrset&view=js
        """
        from zeta.config.environment import userscomp, revcomp, vfcomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % revwperm[c.formname]
        else:
            vfcomp.process(request,
                           c,
                           defer=True,
                           errhandler=h.hitchfn(errhandler),
                           formnames=[
                               'createrset', 'updaterset', 'addtorset',
                               'delfromrset'
                           ],
                           user=c.authuser)

        c.projsummary = c.project.summary
        if c.errmsg:
            html = self.returnerrmsg(environ)

        elif c.view == 'js':
            html = ''

        else:
            c.reviewsets = c.project.reviewsets
            c.title = '%s:reviewsets' % projectname
            html = render('/derived/projects/reviewset.html')

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 13
0
    def index( self, environ ) :
        """Action to handle siteadministration"""
        from zeta.config.environment    import projcomp, vfcomp, userscomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg) :
            c.errmsg = errmsg

        vfcomp.process(
                request, c,
                defer=True, errhandler=h.hitchfn(errhandler),
                formnames=[ 'system', 'userenb', 'userdis', 'prjenb', 'prjdis',
                            'adduserperms', 'deluserperms', 'createpg',
                            'updatepg', 'addpntopg', 'delpnfrompg' ]
        )

        # Setup context for page rendering
        if c.jsonobj not in [ 'pgmap' ] :
            c.licenselist = self._licenselist()
            c.permnames = sorted( userscomp.perm_names )
            c.usernames, userperms, c.userstatus = userscomp.siteadmin()
            defuser = sorted(userperms.keys())[0]
            c.defuserperms = [ defuser, sorted(userperms[defuser][0]),
                               userperms[defuser][1] ]
            c.projectstatus = projcomp.projectstatus

        c.liceditable = True
        c.title = 'SiteAdmin'

        # Html page generation
        if c.errmsg :
            html = self.returnerrmsg(environ)
        elif c.view == 'js' and c.jsonobj :
            html = self.handlejson(environ)
        elif c.view != 'js' :
            html = render( '/derived/siteadmin/siteadmin.html' )
        else :
            html = ''
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 14
0
    def resetpass( self, environ ) :
        """Reset user password by validating emailid against `digest`, this
        controller / action will be invoked when user clicks the reset-link
        sent to his/her mail-id.
        URLS :
            /accounts/resetpass?form=request&formname=resetpass
                                &digest=<digest>&emailid=<emailid>
            /accounts/resetpass?form=submit&formname=resetpass
                                &emailid=<emailid>
        """
        from zeta.config.environment    import userscomp, vfcomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(ERROR_FLASH, errmsg) :
            h.flash( ERROR_FLASH + errmsg )
            h.redirect_url( h.url_sitehome )
        vfcomp.process(
            request, c,
            defer=True, errhandler=h.hitchfn(errhandler, ERROR_FLASH),
            emailid=c.emailid, formnames=['resetpass']
        )

        if c.form == 'submit' :     # Reset password completed
            h.flash( self.okmsg2 )
            h.redirect_url( h.url_signin )

        if c.emailid and c.digest : # Prompt user for new password
            user = userscomp.userbyemailid( unicode(c.emailid) )
            refdigest = sha1( user.username + user.emailid + user.password
                            ).hexdigest()
            c.allowreset = True # (refdigest == c.digest)

            # Generate page
            c.rclose.append( render( '/derived/accounts/resetpass.html' ))
            return c.rclose

        h.redirect_url( h.url_sitehome )
Ejemplo n.º 15
0
    def inviteuser( self, environ ) :
        """Invite a new user to join the site
        URLS : 
            /u/inviteuser
            /u/inviteuser?form=submit&formname=inviteuser
        """
        from zeta.config.environment    import vfcomp

        c.rclose = h.ZResp()

        # Authorize: This context attribute should be set before calling the
        # viewcontext() method.
        regrbyinvite = h.str2bool( c.sysentries['regrbyinvite'] )
        invitebyall  = h.str2bool( c.sysentries['invitebyall'] )

        c.usercaninvite = \
               ( regrbyinvite and invitebyall and \
                        h.authorized( h.ValidUser( strict='True' ))  \
               ) or \
               ( regrbyinvite and h.authorized( h.SiteAdmin() ) )

        # Form handling
        def errhandler(errmsg) :
            c.errmsg = errmsg
        if c.usercaninvite :
            vfcomp.process(
                request, c, defer=True, errhandler=h.hitchfn(errhandler),
                formnames=['inviteuser'], user=c.authuser, environ=environ
            )

        c.title = 'InviteUser'

        # Html page generation
        if c.usercaninvite :
            html = render( '/derived/userpage/inviteuser.html' )
        else :
            html = render( '/derived/userpage/inviteuser.html' )
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 16
0
    def licenses(self, environ):
        """Action for all license pages.
        URLS :
            /license
            /license?form=submit&formname=rmlic&view=js
        """
        from zeta.config.environment import liccomp, vfcomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg):
            c.errmsg = errmsg

        c.liceditable = h.authorized(h.HasPermname(['LICENSE_CREATE']))
        c.att_editable = c.liceditable
        c.tag_editable = c.liceditable
        if c.form == 'submit' and c.liceditable:
            vfcomp.process(request,
                           c,
                           defer=True,
                           errhandler=h.hitchfn(errhandler),
                           formnames=['rmlic'],
                           user=c.authuser)
        else:
            c.errmsg = 'Need `LICENSE_CREATE` to access the page'

        # Setup context for page generation
        c.licprojects = c.licensetable = []
        c.licensenames, c.licenselist, licfields = self._selectoptions()
        c.licensetable = self._lictable(licfields)
        c.attachs = {}
        c.tags = {}
        c.title = 'LicenseTable'

        # Html page generation
        c.rclose.append(render('/derived/license/license.html'))
        return c.rclose
Ejemplo n.º 17
0
    def integratevcs(self, environ, projectname):
        """Integrate / config / delete VCS entries
        URLS :
            /p/{projectname}/s/integratevcs?form=request&formname=integratevcs
            /p/{projectname}/s/integratevcs?form=submit&formname=integratevcs
        """
        from zeta.config.environment import vfcomp, projcomp, vcscomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        vfcomp.process(request,
                       c,
                       defer=True,
                       errhandler=h.hitchfn(errhandler),
                       formnames=['Integratevcs'],
                       user=c.authuser)

        # Setup context for page generation
        c.projsummary = c.project.summary
        c.vcs_typenames = vcscomp.vcstypenames
        c.title = 'IntegrateSource'

        # HTML page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)
        elif c.form == 'submit':
            # Skip breadcrumbing, if it is a form submit
            c.title = '-Skip-'
            h.redirect_url(h.url_vcsintegrate)
        else:
            html = render('/derived/projects/vcsintegrate.html')
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 18
0
    def staticwiki(self, environ, swurl):
        """Static Wiki - every thing else
        URLS :
            /tos
            /aboutus
            /help/
            /(swurl)
            /(swurl)?refresh=1
            /(swurl)?textobj=swpreview&view=text
            /(swurl)?editsw=1&form=request&formname=editsw
            /(swurl)?form=submit&formname=editsw&view=js
            /(swurl)?form=submit&formname=delsw&delsw=1
        """
        from zeta.config.environment import vfcomp, syscomp, wikicomp

        c.rclose = h.ZResp()
        c.sweditable = h.authorized(h.HasPermname('STATICWIKI_CREATE'))

        # Form handling
        if self.formpermission():
            c.errmsg = 'Do not have STATICWIKI_CREATE permission !!'

        def errhandler(errmsg):
            c.errmsg = errmsg

        kwargs = {'pathurl': swurl} if c.formname == 'delsw' else {}
        kwargs['user'] = c.authuser
        vfcomp.process(request,
                       c,
                       defer=True,
                       errhandler=h.hitchfn(errhandler),
                       formnames=['editsw', 'delsw'],
                       **kwargs)

        if [c.form, c.formname] == ['submit', 'delsw'] and c.delsw:
            h.redirect_url(h.url_titleindex)

        # Setup context for page generation
        c.urldir = swurl and swurl[-1] == '/'
        c.swurl = swurl
        c.swiki = syscomp.get_staticwiki(swurl)
        c.title = c.swurl.split('/')[-1]

        html = ''
        if c.errmsg:
            html = self.returnerrmsg(environ)

        elif c.jsonobj and c.view == 'js':  # Ajax request <JSON>
            html = self.handlejson(environ)

        elif c.textobj and c.view == 'text':  # Ajax request <TEXT>
            html = self.handletext(environ)

        elif self._publicfile(c.swurl):  # Check for public file
            html = ''

        elif c.view == 'js':  # Ajax view, so empty html
            html = ''

        elif c.editsw and c.swiki:  # Page-logic, edit static wiki
            c.wikitypenames = wikicomp.typenames
            c.title = '%s:edit' % c.title
            html = render('/derived/home/guestwiki.html')

        elif c.swiki and (c.swiki.type.wiki_typename == h.WIKITYPE_REDIRECT) \
                and c.swiki.sourceurl :         # Page redirect
            h.redirect_url(c.swiki.sourceurl)

        elif c.urldir:  # List static wiki directory
            c.swikis = self.listswdir()
            c.swa = ca.get_analyticobj('staticwiki')
            c.swsnippets = getattr(c.swa, 'pagesnippets', {})
            html = render('/derived/home/guestwiki.html')

        elif c.swiki:  # Page-logic, show static wiki
            if not c.swiki.texthtml:
                c.swhtml = c.swiki.translate(wiki=c.swiki, cache=True)
            elif c.refresh:
                c.swhtml = c.swiki.translate(wiki=c.swiki, cache=True)
            else:
                c.swhtml = c.swiki.texthtml
            html = render('/derived/home/guestwiki.html')

        elif h.authorized(h.HasPermname('STATICWIKI_CREATE')):
            # Assume this as a new static wiki url and create it.
            c.wikitypenames = wikicomp.typenames
            c.swiki = syscomp.set_staticwiki(unicode(swurl),
                                             u'',
                                             byuser=c.authuser)
            c.editsw = 1
            html = render('/derived/home/guestwiki.html')

        else:
            raise NotAuthorizedError(
                'You are allowed to create this resource.')

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 19
0
    def tickets( self, environ, username ) :
        """List tickets belonging to user (attributed as owner and/or
        promptuser
        URLS :
            /u/{username}/t
            /u/{username}/t?stdfilter=<name>
            /u/{username}/t?savfilter=<name>
            /u/{username}/t?form=submit&formname=addtckfilter&view=js
            /u/{username}/t?form=submit&formname=deltckfilter&view=js
        """
        from zeta.config.environment    import projcomp, tckcomp, vfcomp

        c.rclose = h.ZResp()

        # Setting up urls to be stuffed into the page
        kwargs = { 'username' : username }
        c.stdfilter and kwargs.update({ 'stdfilter' : c.stdfilter })
        c.savfilter and kwargs.update({ 'savfilter' : c.savfilter })
        h.url_ticketlist = self.url_usrtcks( **kwargs )

        # Handle forms
        def errhandler(errmsg) :
            c.errmsg = errmsg
        if c.form in [ 'request', 'submit' ] and \
           c.formname in [ 'addtckfilter', 'deltckfilter' ] and \
           h.authorized( h.UserIn([ username ]) ) :
            vfcomp.process(
                request, c, defer=True, errhandler=h.hitchfn(errhandler),
                formnames=[ 'addtckfilter', 'deltckfilter' ], user=c.authuser
            )

        # Setup context for both html page and AJAX request.
        c.tckfilters = h.compile_tckfilters( tckfilters )
        c.title = '%s:tickets' % c.authuser.username

        # HTML page generation
        if c.jsonobj and c.view == 'js' :
            html = self.handlejson(environ)

        elif c.view != 'js' and not (c.stdfilter or c.savfilter) and c.tckfilters :
            kw = { 'username' : username, 'stdfilter' : c.tckfilters[0][0] }
            h.redirect_url( self.url_usrtcks( **kw ))

        elif c.view != 'js' :
            # Setup context for html page
            c.tckeditable = False
            c.tckccodes = h.tckccodes
            c.tstat_resolv = h.parse_csv( c.sysentries.get( u'ticketresolv', '' ))

            c.tck_typenames = tckcomp.tcktypenames
            c.tck_statusnames = tckcomp.tckstatusnames
            c.tck_severitynames = tckcomp.tckseveritynames
            c.projectnames = projcomp.projectnames

            userfilters     = tckcomp.get_ticketfilter( user=c.authuser )
            fn = lambda tf : ( tf.id, [ tf.name, tf.filterbyjson ] )
            c.savfilterlist = dict( map( fn, userfilters ))
            c.savfilterval = c.savfilterlist.get( c.savfilter, ['', ''] )
            c.savfiltername = c.savfilterval[0]
            fn = lambda k, v = [ self.url_usrtcks(**{'username' : username, 'savfilter' : k })
                                 v[0] ]
            c.savfilterlist = map( fn, c.savfilterlist.iteritems() )
            html = render( '/derived/userpage/ticket.html' )

        else :
            html =''

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 20
0
    def ticket(self, environ, projectname, tckid):
        """Each ticket
        URLS : 
            /p/{projectname}/t/{tckid}
            /p/{projectname}/t/{tckid}?jsonobj=tckattachs&view=js
            /p/{projectname}/t/{tckid}?jsonobj=tcktags&view=js
            /p/{projectname}/t/{tckid}?jsonobj=tckcomments&view=js
            /p/{projectname}/t/{tckid}?jsonobj=tckrcomments&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=createtstat&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=addtckattachs&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=deltckattachs&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=addtcktags&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=deltcktags&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=createtcmt&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=updatetcmt&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=replytcmt&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=tckfav&view=js
            /p/{projectname}/t/{tckid}?form=submit&formname=votetck&view=js
        """
        from zeta.config.environment import vfcomp, projcomp, tckcomp, votcomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % tckperm[c.formname]
        else:
            vfcomp.process(request,
                           c,
                           defer=True,
                           errhandler=h.hitchfn(errhandler),
                           formnames=[
                               'createtstat', 'addtckattachs', 'deltckattachs',
                               'addtcktags', 'deltcktags', 'createtcmt',
                               'updatetcmt', 'replytcmt', 'tckfav', 'votetck'
                           ],
                           user=c.authuser)

        # Setup context for page generation
        c.projsummary = c.project.summary
        if not c.jsonobj:
            c.tckeditable = c.att_editable = c.tag_editable = h.authorized(
                h.HasPermname('TICKET_CREATE'))
            c.seltickets = self._seltickets()
            c.tckccodes = h.tckccodes
            c.tck_typenames = tckcomp.tcktypenames
            c.tck_statusnames = tckcomp.tckstatusnames
            c.tck_severitynames = tckcomp.tckseveritynames
            c.pcomponents, c.pmilestones, c.pversions, c.projusers = \
                              tckcomp.projdetails( c.project )
            c.pmilestones = [m[:2] for m in c.pmilestones if not any(m[2:])]
            c.pcomponents = [(tup[1], tup[0]) for tup in c.pcomponents]
            c.pmilestones = [(tup[1], tup[0]) for tup in c.pmilestones]
            c.pversions = [(tup[1], tup[0]) for tup in c.pversions]
            c.items_tckcomments = self._json_tckcomments()
            c.attachs = self._ticketattachs(c.ticket)
            c.tags = self._tickettags(c.ticket)
            c.isuserfavorite = tckcomp.isfavorite(c.authuser.id, c.ticket.id)
            c.ticketdetail = tckcomp.ticketdetails(c.ticket)
            c.ticketstatus = tckcomp.ticketstatus(c.ticket)
            c.blockers = tckcomp.blockersof(c.ticket)
            c.blocking = tckcomp.blockingfor(c.ticket)
            c.children = tckcomp.childrenfor(c.ticket)
            c.ticketresolv = h.parse_csv(c.sysentries.get('ticketresolv', ''))
            c.title = 'Ticket:%s' % tckid

        # HTML page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)

        elif c.view == 'js' and c.formname in ['addtckattachs']:
            html = IFRAME_RET

        elif c.jsonobj and c.view == 'js':
            html = self.handlejson(environ)

        elif c.textobj and c.view == 'text':
            html = self.handletext(environ)

        elif c.view != 'js':
            uservote = votcomp.get_ticketvote(c.authuser, c.ticket)
            votes = tckcomp.countvotes(ticket=c.ticket)
            c.upvotes = votes.get('up', 0)
            c.downvotes = votes.get('down', 0)
            c.currvote = uservote and uservote.votedas or ''
            html = render('/derived/projects/ticket.html')
        else:
            html = ''

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 21
0
    def createticket(self, environ, projectname):
        """Create ticket
        URLS :
            /p/{projectname}/t/createticket?form=request&formname=createtck
            /p/{projectname}/t/createticket?form=submit&formname=createtck
        """
        from zeta.config.environment import vfcomp, projcomp, tckcomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        vfcomp.process(request,
                       c,
                       defer=True,
                       errhandler=h.hitchfn(errhandler),
                       formnames=['createtck'],
                       user=c.authuser)

        # Setup context for page generation
        c.project = c.project or projcomp.get_project(projectname)
        c.projectname = c.project.projectname
        c.projsummary = c.project.summary

        # HTML page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)

        elif c.form == 'submit':
            h.flash(MESSAGE_FLASH + 'Created ticket ...')
            # Ticket creation, redirect after submit
            c.title = '-Skip-'
            h.redirect_url(h.url_ticketcreate)

        else:
            # Setup context for page generation
            c.seltickets = self._seltickets()
            c.tck_typenames = tckcomp.tcktypenames
            c.tck_statusnames = tckcomp.tckstatusnames
            c.tck_severitynames = tckcomp.tckseveritynames

            c.pcomponents, c.pmilestones, c.pversions, c.projusers = \
                              tckcomp.projdetails( c.project )
            c.projusers = list(set(c.projusers + [c.project.admin.username]))
            c.pmilestones = [m[:2] for m in c.pmilestones if not any(m[2:])]
            c.mstnnames = sorted([m[0] for m in c.pmilestones])

            c.pcompnames = sorted([comp[0] for comp in c.pcomponents])
            c.vernames = sorted([ver[0] for ver in c.pversions])
            c.pcomponents = [(tup[1], tup[0]) for tup in c.pcomponents]
            c.pmilestones = [(tup[1], tup[0]) for tup in c.pmilestones]
            c.pversions = [(tup[1], tup[0]) for tup in c.pversions]
            c.title = 'CreateTicket'
            c.tckeditable = h.authorized(h.HasPermname('TICKET_CREATE'))
            html = render('/derived/projects/ticketcreate.html')
            h.flash.pop_messages(
            )  # Clear flashmessage if any ! after page generation

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 22
0
    def ticketindex(self, environ, projectname):
        """Project tickets
        URLS :
            /p/{projectname}/t
            /p/{projectname}/t?stdfilter=<stdfilter>&savfilter=<savfilter>
            /p/{projectname}/t?jsonobj=ticketlist&view=js
            /p/{projectname}/t?form=submit&formname=configtck&view=js
            /p/{projectname}/t?form=submit&formname=configtstat&view=js
            /p/{projectname}/t?form=submit&formname=addtckfilter&view=js
            /p/{projectname}/t?form=submit&formname=deltckfilter&view=js
        """
        from zeta.config.environment import vfcomp, projcomp, tckcomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % tckperm[c.formname]
        else:
            vfcomp.process(request,
                           c,
                           defer=True,
                           errhandler=h.hitchfn(errhandler),
                           formnames=[
                               'configtck', 'configtstat', 'addtckfilter',
                               'deltckfilter'
                           ],
                           user=c.authuser)

        # Setup context for both html page and AJAX request.
        c.projsummary = c.project.summary
        c.tckfilters = h.compile_tckfilters(tckfilters)
        c.title = '-Skip-'

        # HTML page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)
        elif c.view == 'js' and c.jsonobj:
            html = self.handlejson(environ)

        elif c.view != 'js' and not (c.stdfilter
                                     or c.savfilter) and c.tckfilters:
            url = self.url_tcklist(projectname, stdfilter=c.tckfilters[0][0])
            h.redirect_url(url)

        elif c.view != 'js':
            # Setup context for html page
            c.tck_typenames = tckcomp.tcktypenames
            c.tck_statusnames = tckcomp.tckstatusnames
            c.tck_severitynames = tckcomp.tckseveritynames
            c.seltickets = self._seltickets()

            c.pcomponents, c.pmilestones, c.pversions, c.projusers = \
                              tckcomp.projdetails( c.project )
            c.projusers = self.projusers(c.project)
            c.pmilestones = [m[:2] for m in c.pmilestones if not any(m[2:])]
            c.mstnnames = sorted([m[0] for m in c.pmilestones])
            c.pcompnames = sorted([comp[0] for comp in c.pcomponents])
            c.vernames = sorted([ver[0] for ver in c.pversions])
            c.tckeditable = h.authorized(h.HasPermname('TICKET_CREATE'))
            c.tckccodes = h.tckccodes
            c.tstat_resolv = h.parse_csv(c.sysentries.get(u'ticketresolv', ''))
            userfilters = tckcomp.get_ticketfilter(user=c.authuser)
            fn = lambda tf: (tf.id, [tf.name, tf.filterbyjson])
            c.savfilterlist = dict(map(fn, userfilters))
            c.savfilterval = c.savfilterlist.get(c.savfilter, ['', ''])
            c.savfiltername = c.savfilterval[0]
            fn = lambda k, v: [
                self.url_tcklist(c.projectname, savfilter=k), v[0]
            ]
            c.savfilterlist = map(fn, c.savfilterlist.iteritems())
            c.title = 'Ticket:list'
            html = render('/derived/projects/ticketindex.html')

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 23
0
    def wiki(self, environ, projectname, wurl=None):
        """Project wiki pages.
        URLS :
            /p/{projectname}/wiki/*(wurl)
            /p/{projectname}/wiki/*(wurl)?ver=<num>
            /p/{projectname}/wiki/*(wurl)?wikiedit=1
            /p/{projectname}/wiki/*(wurl)?wikitalkpage=1
            /p/{projectname}/wiki/*(wurl)?wikihistory=1
            /p/{projectname}/wiki/*(wurl)?wikidiff=1
            /p/{projectname}/wiki/*(wurl)?translate=1
            /p/{projectname}/wiki/*(wurl)?downloadas=text
            /p/{projectname}/wiki/*(wurl)?downloadas=ps
            /p/{projectname}/wiki/*(wurl)?downloadas=pdf
            /p/{projectname}/wiki/*(wurl)?jsonobj=wikicomments&view=js
            /p/{projectname}/wiki/*(wurl)?jsonobj=wikircomments&view=js
            /p/{projectname}/wiki/*(wurl)?jsonobj=wikiattach&view=js
            /p/{projectname}/wiki/*(wurl)?jsonobj=wikitag&view=js
            /p/{projectname}/wiki/*(wurl)?textobj=wikipreview&view=text
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=addwikiattachs&view=js
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=delwikiattachs&view=js
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=addwikitags&view=js
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=delwikitags&view=js
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=wikicont&view=js
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=createwcmt&view=js
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=updatewcmt&view=js
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=replywcmt&view=js
            /p/{projectname}/wiki/*(wurl)?wikidiff=1&form=submit&formname=wikidiff
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=wikifav&view=js
            /p/{projectname}/wiki/*(wurl)?form=submit&formname=votewiki&view=js
        """
        from zeta.config.environment import projcomp, wikicomp, votcomp, vfcomp

        version = request.params.get('ver', None)
        wurl = wurl.rstrip('/')
        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % tckperm[c.formname]
        else:
            vfcomp.process(request,
                           c,
                           defer=True,
                           errhandler=h.hitchfn(errhandler),
                           formnames=[
                               'addwikiattachs', 'delwikiattachs',
                               'addwikitags', 'delwikitags', 'wikicont',
                               'createwcmt', 'updatewcmt', 'replywcmt',
                               'wikidiff', 'wikifav', 'votewiki'
                           ],
                           user=c.authuser)

        # Setup context for page generation
        c.projsummary = c.project.summary
        if not c.jsonobj:
            c.wikipagenames = self.wikipagename(wikicomp.wikiurls(c.project))
            c.wikipagename = wurl
            c.wikieditable = h.authorized(h.HasPermname('WIKI_CREATE'))
            c.wiki = c.wiki or wikicomp.get_wiki(unicode(c.pathinfo))

        # If there is no wiki page by that name then create the wiki and
        # show the edit page.
        if not c.wiki and c.wikieditable:
            c.wiki = wikicomp.create_wiki(unicode(c.pathinfo),
                                          wtype=c.sysentries.get(
                                              'def_wikitype', None),
                                          creator=c.authusername)
            c.project and wikicomp.config_wiki(c.wiki, project=c.project)
            c.wikiedit = '1'

        elif not c.wiki:
            raise NotAuthorizedError(
                'Do not have permission to create wiki page, WIKI_CREATE')

        # If the wiki page is empty (ie) no wiki content ever created, then
        # show the edit page.
        if not c.wiki.latest_version and c.wikieditable:
            h.flash(MESSAGE_FLASH + 'Empty page, write some text ...')
            c.wikiedit = '1'

        elif not c.wiki.latest_version:
            raise NotAuthorizedError(
                'Do not have permission to create wiki page, WIKI_CREATE')

        if c.wiki:
            c.isuserfavorite = wikicomp.isfavorite(c.authuser.id, c.wiki.id)

        c.title = wurl

        # HTML page generation
        html = ''
        typename = c.wiki.type.wiki_typename
        if c.errmsg:
            html = self.returnerrmsg(environ)

        if c.view == 'js' and c.formname in ['addwikiattachs']:
            html = IFRAME_RET

        elif c.view == 'js' and c.jsonobj:
            html = self.handlejson(environ)

        elif c.view == 'text' and c.textobj:
            html = self.handletext(environ)

        elif typename == h.WIKITYPE_REDIRECT and c.wiki.sourceurl:  # Page redirect
            h.redirect_url(c.wiki.sourceurl)

        elif c.wikiedit:
            c.wcnt = wikicomp.get_content(c.wiki)
            c.wikitypenames = wikicomp.typenames
            c.title += ':edit'
            html = render('/derived/projects/wiki.html')

        elif c.wtalkpage:
            c.items_wikicomments = self._json_wikicomments()
            c.title += ':talkpage'
            html = render('/derived/projects/wiki.html')

        elif c.whistory:
            c.wikicontents = wikicomp.get_content(c.wiki, all=True)
            c.title += ':history'
            html = render('/derived/projects/wiki.html')

        elif c.wikidiff:
            v = c.oldver or 1
            c.wcnt_oldver = wikicomp.get_content(c.wiki, version=v)
            c.wcnt_newver = wikicomp.get_content(c.wiki, version=c.newver)
            c.oldver = c.wcnt_oldver.id
            c.newver = c.wcnt_newver.id
            c.title += ':diff'
            html = render('/derived/projects/wiki.html')

        elif c.downloadas:
            c.wcnt = wikicomp.get_content(c.wiki)
            wikihtml = c.wcnt.translate(
                wiki=c.wiki,
                cache=True) if not c.wcnt.texthtml else c.wcnt.texthtml
            fmtobj = h.Html2Doc(wikihtml, format=c.downloadas)
            c.title = '-Skip-'
            html = fmtobj.convert()

            response.headers['Content-disposition'] = \
                str( 'attachment; filename="%s.%s"' % (c.wiki.wikiurl, c.downloadas) )

        elif c.view != 'js':
            # Refetch the wiki entry from DB with prepared query
            c.attachs = self._wikiattachs(c.wiki)
            c.tags = self._wikitags(c.wiki)
            c.att_editable = c.tag_editable = c.wikieditable
            c.wcnts = wikicomp.get_content(c.wiki, all=True)
            c.wikiauthors = h.computecount(c.wcnts, lambda x: x.author)
            c.wcnt = (version and c.wcnts[int(version) - 1]
                      or c.wcnts[-1]) if c.wcnts else None
            c.wikitypenames = wikicomp.typenames

            c.wikihtml = ''
            if c.wcnt:
                if not c.wcnt.texthtml:
                    c.wikihtml = c.wcnt.translate(wiki=c.wiki, cache=True)
                elif c.translate:
                    c.wikihtml = c.wcnt.translate(wiki=c.wiki, cache=True)
                else:
                    c.wikihtml = c.wcnt.texthtml

            lastver = c.wiki.latest_version
            fn = lambda v: [
                self.url_wikiurl(projectname, wurl, ver=str(v)),
                str(v)
            ]
            c.wversions = map(fn, range(1, lastver + 1))
            c.wdownload = [
                [h.url_wikidownastext, 'as text'],
                [h.url_wikidownasps, 'as post-script'],
                [h.url_wikidownaspdf, 'as pdf'],
            ]
            uservote = votcomp.get_wikivote(c.authuser, c.wiki)
            votes = wikicomp.countvotes(votes=c.wiki.votes)
            c.upvotes = votes.get('up', 0)
            c.downvotes = votes.get('down', 0)
            c.currvote = uservote and uservote.votedas or ''
            h.url_reviewwiki = self.url_wikireview(projectname, c.wiki.wikiurl,
                                                   c.wcnt.id)
            html = render('/derived/projects/wiki.html')

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 24
0
    def review(self, environ, projectname, revwid):
        """Create a new project review
        URLS : 
            /p/{projectname}/r/{rewid}
            /p/{projectname}/r/{rewid}?withsource=1
            /p/{projectname}/r/{rewid}?jsonobj=revwattach&view=js
            /p/{projectname}/r/{rewid}?jsonobj=revwtag&view=js
            /p/{projectname}/r/{rewid}?jsonobj=revwrcomments&view=js
            /p/{projectname}/r/{rewid}?form=submit&formname=creatercmt&view=js
            /p/{projectname}/r/{rewid}?form=submit&formname=replyrcmt&view=js
            /p/{projectname}/r/{rewid}?form=submit&formname=processrcmt&view=js
            /p/{projectname}/r/{rewid}?form=submit&formname=revwfav&view=js
            /p/{projectname}/r/{rewid}?form=submit&formname=closerev&view=js
        """
        from zeta.config.environment import userscomp, projcomp, revcomp, vfcomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % revwperm[c.formname]
        else:
            vfcomp.process(request,
                           c,
                           defer=True,
                           errhandler=h.hitchfn(errhandler),
                           formnames=[
                               'creatercmt', 'replyrcmt', 'processrcmt',
                               'revwfav', 'closerev'
                           ],
                           user=c.authuser)

        # Setup context for page generation
        c.projsummary = c.project.summary
        if not c.jsonobj:
            c.projusers = self.projusers(c.project)
            c.usernames = userscomp.usernames
            c.naturenames = revcomp.naturenames
            c.actionnames = revcomp.actionnames
            c.revweditable = c.att_editable = c.tag_editable = h.authorized(
                h.HasPermname('REVIEW_CREATE'))
            commentors = [c.review.participants
                          ] + [c.review.author, c.review.moderator]
            c.revwcmtable = c.authuser in commentors
            c.revwmoderated = c.authuser == c.review.moderator
            c.revwauthored = c.authuser == c.review.author
            c.title = 'Review:%s' % revwid
            c.isuserfavorite = revcomp.isfavorite(c.authuser.id, c.review.id)

        c.revwsource = None
        if c.withsource:
            c.revwsource, c.sourcediff = revcomp.guess_revwsource(c.review)
            c.diffsec = c.sourcediff and c.sourcediff.pop(0)
            c.diffpri = c.sourcediff and c.sourcediff.pop(0)

        c.attachs = self._revwattachs(c.review)
        c.tags = self._revwtags(c.review)

        # HTML page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)

        elif c.jsonobj and c.view == 'js':
            html = self.returnerrmsg(environ)

        elif c.view != 'js':
            c.items_revwrcomments, items = self._revwrcomments()
            c.cnt_comments = len(items)
            c.cnt_pending = len(filter(lambda x: not x['approved'], items))
            if c.revwsource:
                c.cmtsatpos = [d['position'] for d in items]
                html = render('/derived/projects/reviewsource.html')
            else:
                html = render('/derived/projects/review.html')

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 25
0
    def mounts(self, environ, projectname):
        """List of Repository mount points
        URLS :
            /p/<projectname>/mnt
            /p/<projectname>/mnt?name=<name>
            /p/<projectname>/mnt?changeid=<mountid>
            /p/<projectname>/mnt?jsonobj=mountlist&view=js
            /p/<projectname>/mnt?form=submit&formname=createmount
            /p/<projectname>/mnt?form=submit&formname=updatemount
            /p/<projectname>/mnt?form=submit&formname=deletemount
            /p/<projectname>/mnt?form=submit&formname=createmount&view=js
            /p/<projectname>/mnt?form=submit&formname=deletemount&view=js
        """
        from zeta.config.environment import vfcomp, projcomp, vcscomp

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % mountperm[c.formname]
        else:
            vfcomp.process(
                request,
                c,
                defer=True,
                errhandler=h.hitchfn(errhandler),
                formnames=['createmount', 'updatemount', 'deletemount'])

        # Setup context for page generation
        c.projsummary = c.project.summary
        c.mnt = vcscomp.get_mount(int(c.changeid),
                                  attrload=['vcs']) if c.changeid else None
        c.title = '-Skip-' if c.form else '%s:mounts' % projectname

        # HTML page generation
        if c.errmsg:
            html = self.returnerrmsg(environ)

        elif c.form == 'submit' and (c.view != 'js') and \
           c.formname in [ 'createmount', 'updatemount' ]:
            h.redirect_url(h.url_projmounts)

        elif c.view == 'js' and c.jsonobj:
            html = self.handlejson(environ)

        elif c.form and c.view == 'js':
            html = ''

        else:
            c.contents = vcscomp.mountcontents
            c.vcslist = [(v.id, v.name) for v in c.project.vcslist]
            c.pmounts = [
                list(vals[:3]) +
                [h.fix2repospath(vals[3], [vals[7]]).lstrip('/')] +
                list(vals[4:]) for vals in vcscomp.projmounts(c.project)
            ]
            html = render('/derived/projects/projmounts.html')

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 26
0
    def index(self, environ, projectname):
        """List all project review
        URLS :
            /p/{projectname}/r
            /p/{projectname}/r?jsonobj=revwlist&view=js
            /p/{projectname}/r?form=submit&formname=configrev&view=js
            /p/{projectname}/r?form=submit&formname=revwauthor&view=js
            /p/{projectname}/r?form=submit&formname=revwmoderator&view=js
            /p/{projectname}/r?form=submit&formname=closerev&view=js
            /p/{projectname}/r?form=submit&formname=addparts&view=js
            /p/{projectname}/r?form=submit&formname=delparts&view=js
            /p/{projectname}/r?form=submit&formname=addrevattachs&view=js
            /p/{projectname}/r?form=submit&formname=delrevattachs&view=js
            /p/{projectname}/r?form=submit&formname=addrevtags&view=js
            /p/{projectname}/r?form=submit&formname=delrevtags&view=js
        """
        from zeta.config.environment import projcomp, vfcomp

        c.rclose = h.ZResp()

        # Handle forms
        def errhandler(errmsg):
            c.errmsg = errmsg

        if self.formpermission():
            c.errmsg = 'Do not have %s permission !!' % revwperm[c.formname]
        else:
            vfcomp.process(request,
                           c,
                           defer=True,
                           errhandler=h.hitchfn(errhandler),
                           formnames=[
                               'configrev', 'revwauthor', 'revwmoderator',
                               'addparts', 'delparts', 'closerev',
                               'addrevattachs', 'delrevattachs', 'addrevtags',
                               'delrevtags'
                           ],
                           user=c.authuser)

        # Setup context for page generation
        c.projsummary = c.project.summary
        c.revweditable = h.authorized(h.HasPermname('REVIEW_CREATE'))
        c.title = '-Skip-' if c.form == 'submit' else 'Review:list'

        # HTML page generation
        html = ''
        if c.errmsg:
            html = self.returnerrmsg(environ)

        elif c.view == 'js' and c.formname in ['addrevattachs']:
            html = IFRAME_RET

        elif c.view == 'js' and c.jsonobj:
            html = self.handlejson(environ)

        elif c.view != 'js':
            c.projusers = self.projusers(c.project)
            html = render('/derived/projects/reviewindex.html')

        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 27
0
    def license(self, environ, licid):
        """Action for all license pages.
        URLS :
            /license/<licid>
            /license/<licid>?jsonobj=licattach&view=js
            /license/<licid>?jsonobj=lictag&view=js
            /license/<licid>?form=request&formname=updatelic
            /license/<licid>?form=submit&formname=updatelic&view=js
            /license/<licid>?form=submit&formname=rmlic
            /license/<licid>?form=submit&formname=addlicattachs&view=js
            /license/<licid>?form=submit&formname=dellicattachs&view=js
            /license/<licid>?form=submit&formname=addlictags&view=js
            /license/<licid>?form=submit&formname=dellictags&view=js
        """
        from zeta.config.environment import liccomp, vfcomp

        c.rclose = h.ZResp()

        # Setting up urls to be stuffed into the page
        def errhandler(errmsg):
            c.errmsg = errmsg

        c.liceditable = h.authorized(h.HasPermname(['LICENSE_CREATE']))
        c.att_editable = c.liceditable
        c.tag_editable = c.liceditable
        if c.form == 'submit' and c.liceditable:
            vfcomp.process(request,
                           c,
                           defer=True,
                           errhandler=h.hitchfn(errhandler),
                           formnames=[
                               'updatelic', 'rmlic', 'addlictags',
                               'dellictags', 'addlicattachs', 'dellicattachs'
                           ],
                           licid=c.licid_i,
                           user=c.authuser)
        else:
            c.errmsg = 'Need `LICENSE_CREATE` to access the page'

        # Setup context for page generation
        c.licprojects = c.licensetable = []
        c.licensenames, c.licenselist, licfields = self._selectoptions()
        c.uplic = (c.form == 'request') and (c.formname == 'updatelic')

        if c.license and c.uplic:  # Edit license
            c.title = '%s:edit' % c.license.licensename
        elif c.license:  # License page
            lprjs = liccomp.licprojects(c.license.id)
            c.licprojects = [(p, self.url_forproject(p))
                             for p in lprjs[c.license.id] if p]
            c.attachs = self.modelattachments(c.license)
            c.tags = self.modeltags(c.license)
            c.title = c.license.licensename

        # Html page generation
        html = ''
        if c.view == 'js' and c.formname in ['addlicattachs']:
            html = IFRAME_RET

        elif c.view == 'js' and c.jsonobj and c.license:
            html = self.handlejson(environ)

        elif c.formname == 'rmlic' and c.licid:
            # when removing the displayed license, redirect to first license
            remaining = [
                i for i, _, projects in licfields if licid_i != int(i)
            ]
            h.redirect_url(self.url_forlicense(
                remaining[0])) if remaining else h.redirec(h.url_crlic)

        elif (c.form == 'submit') and (c.formname == 'updatelic'):
            h.redirect_url(self.url_forlicense(licid))

        elif c.view != 'js':
            html = render('/derived/license/license.html')
        c.rclose.append(html)
        return c.rclose
Ejemplo n.º 28
0
    def admin( self, environ, projectname ) :
        """Project administration page
        URLS :
            /p/<projectname>/admin?jsonobj=pcomplist&view=js
            /p/<projectname>/admin?jsonobj=mstnlist&view=js
            /p/<projectname>/admin?jsonobj=verlist&view=js
            /p/<projectname>/admin?jsonobj=projectteams&view=js
            /p/<projectname>/admin?jsonobj=teamperms&view=js
            /p/<projectname>/admin?jsonobj=prjattach&view=js
            /p/<projectname>/admin?jsonobj=prjtag&view=js
            /p/<projectname>/admin?jsonobj=prjtag&view=js
            /p/<projectname>/admin?form=request
            /p/<projectname>/admin?form=submit&formname=updateprj&view=js
            /p/<projectname>/admin?form=submit&formname=prjexp&view=js
            /p/<projectname>/admin?form=submit&formname=prjml&view=js
            /p/<projectname>/admin?form=submit&formname=prjirc&view=js
            /p/<projectname>/admin?form=submit&formname=addprjlogo&view=js
            /p/<projectname>/admin?form=submit&formname=delprjlogo&view=js
            /p/<projectname>/admin?form=submit&formname=addprjicon&view=js
            /p/<projectname>/admin?form=submit&formname=delprjicon&view=js
            /p/<projectname>/admin?form=submit&formname=createpcomp&view=js
            /p/<projectname>/admin?form=submit&formname=updatepcomp&view=js
            /p/<projectname>/admin?form=submit&formname=rmpcomp&view=js
            /p/<projectname>/admin?form=submit&formname=createmstn&view=js
            /p/<projectname>/admin?form=submit&formname=updatemstn&view=js
            /p/<projectname>/admin?form=submit&formname=mstnclose&view=js
            /p/<projectname>/admin?form=submit&formname=rmmstn&view=js
            /p/<projectname>/admin?form=submit&formname=createver&view=js
            /p/<projectname>/admin?form=submit&formname=updatever&view=js
            /p/<projectname>/admin?form=submit&formname=rmver&view=js
            /p/<projectname>/admin?form=submit&formname=addprjteam&view=js
            /p/<projectname>/admin?form=submit&formname=delprjteam&view=js
            /p/<projectname>/admin?form=submit&formname=addteamperms&view=js
            /p/<projectname>/admin?form=submit&formname=delteamperms&view=js
            /p/<projectname>/admin?form=submit&formname=addprjattachs&view=js
            /p/<projectname>/admin?form=submit&formname=delprjattachs&view=js
            /p/<projectname>/admin?form=submit&formname=addprjtags&view=js
            /p/<projectname>/admin?form=submit&formname=delprjtags&view=js
        """
        from zeta.config.environment import userscomp, liccomp, projcomp, vfcomp
    
        formnames = [ 'updateprj', 'prjexp', 'prjml', 'prjirc', 'addprjlogo',
                      'delprjlogo', 'addprjicon', 'delprjicon', 'createpcomp',
                      'updatepcomp', 'rmpcomp', 'createmstn', 'updatemstn',
                      'mstnclose', 'rmmstn', 'createver', 'updatever', 'rmver',
                      'addprjteam', 'delprjteam', 'addteamperms',
                      'delteamperms', 'addprjattachs', 'delprjattachs',
                      'addprjtags', 'delprjtags', ]

        c.rclose = h.ZResp()

        # Form handling
        def errhandler(errmsg) :
            c.errmsg = errmsg
        vfcomp.process(
            request, c, defer=True, errhandler=h.hitchfn(errhandler),
            formnames=formnames, user=c.authuser, project=c.project
        )

        # Setup context for page generation
        c.projsummary = c.project.summary
        c.logo_editable= c.icon_editable= c.tag_editable = True
        c.pcomplist = c.mstnlist = c.verlist = []
        c.title = projectname+':admin'
        if c.view != 'js' :
            c.licensenames = sorted(liccomp.licensenames)
            c.projusers    = sorted(
                                projcomp.projusernames( c.project ) + \
                                [ c.project.admin.username ]
                             )
            c.usernames = userscomp.usernames
            c.teamtypes_p  = projcomp.teams
            c.teamtypes = c.teamtypes_p[:]
            c.teamtypes.remove( projcomp.team_nomember )
            c.logoattach = self._projlogo( c.project )
            c.iconattach = self._projicon( c.project )

        # Html page generation
        if c.errmsg :
            html = self.returnerrmsg(environ)

        elif c.view == 'js' and \
           c.formname in [ 'addprjlogo', 'addprjicon', 'addprjattachs' ] :
            html = IFRAME_RET

        elif c.view == 'js' and c.jsonobj :
            html = self.handlejson(environ)

        elif c.view == 'js' :
            html = ''

        else :
            # Context specific to project admin form
            c.projectteams = projcomp.projectteams(
                                project=c.project, teamnames=c.teamtypes_p,
                                usernames=c.usernames,
                             )
            c.isfavorite = projcomp.checkfavorite( c.project.id, c.authuser.id )

            deftt = sorted(c.projectteams.keys())[0]
            c.defteamtype= deftt
            c.teamusers = map( lambda pr : pr[1], c.projectteams[deftt][0] )
            c.x_teamusers = c.projectteams[deftt][1]

            c.teamperms = projcomp.teamperms(
                                project=c.project, teamnames=c.teamtypes_p,
                          )
            c.teampgroups = map( lambda pr : pr[1], c.teamperms[deftt][0] )
            c.x_teampgroups= c.teamperms[deftt][1]

            html = render( '/derived/projects/admin.html' )
        c.rclose.append(html)
        return c.rclose