def get(self):
     url = users.create_logout_url(self.request.uri)
     url_linktext = 'Logout'
     # if there is a 'key' in query string then it is a view for a specific template...
     if self.request.get('keyname'):
         kn = self.request.get('keyname')
         template_file = 'templates/admin/cert_temp.html'
         url = users.create_logout_url(self.request.uri)
         url_linktext = 'Logout'
         ctemp = CertificationTemplate.get_by_key_name(kn)
         if ctemp:
             ctemp.code4 = ctemp.key().name()
             ctemp.els = ctemp.elements
         template_values = {'url': url,'url_linktext': url_linktext,'ctemp': ctemp}
     else:
         template_file = 'templates/admin/cert_temps.html'
         ctemps_query = CertificationTemplate.all()
         ctemps = ctemps_query.fetch(100)
         for ctemp in ctemps:
             ctemp.code4 = ctemp.key().name()
             if ctemp.prereq:
                 ctemp.p = ctemp.prereq.key().name()
         template_values = {'url': url,'url_linktext': url_linktext,'ctemps': ctemps}
     path = os.path.join(os.path.dirname(__file__), template_file)
     self.response.out.write(template.render(path, template_values))
    def get(self):
        user = users.get_current_user()
        url = users.create_logout_url(self.request.uri)
        url_linktext = 'Logout'
        member = Member.get_by_key_name(user.email())
        # if there is a 'id' in query string then it is a view for a specific cert...
        if self.request.get('certid'):
            cid = int(self.request.get('certid'))
            template_file = 'templates/master/cert.html'
            user = users.get_current_user()
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            c = Certification.get_by_id(cid)
            if c:
                # i dunno
                pass


            #get all cert_temps
            ctemps_query = CertificationTemplate.all()
            ctemps = ctemps_query.fetch(100)
            for ctemp in ctemps:
                ctemp.code4 = ctemp.key().name()
            template_values = {'url': url,'url_linktext': url_linktext,'cert': c, 'ctemps':ctemps}
        else:
            member.canteach = ['KB1','KB2','KB3','IK1','IK2','IK3','EX1','EX2']
            template_file = 'templates/master/certs.html'
            cs_query = Certification.gql("WHERE createdBy= :1", users.get_current_user())
            cs = cs_query.fetch(100)
            template_values = {'url': url,'url_linktext': url_linktext, 'member':member,'certs':cs}
        path = os.path.join(os.path.dirname(__file__), template_file)
        self.response.out.write(template.render(path, template_values))
    def post(self):
        method =  self.request.get('method')
        ctkey = self.request.get('ctkey') # required for redirect
        elkey = self.request.get('elkey')
        if method == 'delete':
            k = db.Key.from_path("Element", elkey)
            db.delete(k)
        elif method == 'update' or method == 'post':
            short = self.request.get('short')
            desc = self.request.get('desc')
            note = self.request.get('note')
            prereq = self.request.get('prereq')
            # save or update the element or task
            if method == 'post':
                ordstr = self.request.get('ord')
                ord = int(ordstr)
                ct = CertificationTemplate.get_by_key_name(ctkey)
                if ct:
                    kn = ctkey + '-' + ordstr
                    el = Element(key_name=kn,certtemp=ct,short=short,ord=ord)
                    # continue setting Element fields
                    if desc: el.desc = desc
                    if note: el.note = note
                    if prereq:
                        el_pre = Element.get_by_key_name(prereq)
                        if el_pre: el.prereq = el_pre
                        else:
                            # todo : raise error - Element prereq does not exist
                            pass
                    elkey = el.put()
                else:
                    # todo - raise error - can't create Element without CertificationTemplate
                    pass
            else:  # method == 'update'
                el = Element.get_by_key_name(elkey)
                if el:
                    # update element
                    if desc : el.desc = desc
                    if note : el.note = note
                    if prereq:
                        el_pre = Element.get_by_key_name(prereq)
                        if el_pre: el.prereq = el_pre
                        else:
                            # todo : raise error - Element prereq does not exist
                            pass
                    elkey = el.put()
                else:
                    # todo raise error - can't located Element to update
                    pass

        else:
            # todo : raise error - method not supplied or supported
            pass
        self.redirect('/admin/templates?keyname='+ctkey)
    def get(self):
        url = users.create_logout_url(self.request.uri)
        url_linktext = 'Logout'
        # if there is a 'id' in query string then it is a view for a specific cert...
        if self.request.get('certid'):
            cid = int(self.request.get('certid'))
            template_file = 'templates/admin/cert.html'
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            c = Certification.get_by_id(cid)
            if c:
                # i dunno
                pass


            #get all cert_temps
            ctemps_query = CertificationTemplate.all()
            ctemps = ctemps_query.fetch(100)
            for ctemp in ctemps:
                ctemp.code4 = ctemp.key().name()
            template_values = {'url': url,'url_linktext': url_linktext,'cert': c, 'ctemps':ctemps}
        else:
            template_file = 'templates/admin/certs.html'
            cs_query = Certification.all()
            cs = cs_query.fetch(100)
            for c in cs:
                c.id = c.key().id()
                c.templatekeyname = c.template.key().name()
            #get all cert_temps
            ctemps_query = CertificationTemplate.all()
            ctemps = ctemps_query.fetch(100)
            for ctemp in ctemps:
                ctemp.code4 = ctemp.key().name()
            template_values = {'url': url,'url_linktext': url_linktext,'certs': cs, 'ctemps':ctemps}
        path = os.path.join(os.path.dirname(__file__), template_file)
        self.response.out.write(template.render(path, template_values))
    def get(self):
        user = users.get_current_user()
        url = users.create_logout_url(self.request.uri)
        url_linktext = "Logout"
        member = Member.get_by_key_name(user.email())
        # if there is a 'id' in query string then it is a view for a specific cert...
        if self.request.get("certid"):
            cid = int(self.request.get("certid"))
            template_file = "templates/examiner/cert.html"
            user = users.get_current_user()
            url = users.create_logout_url(self.request.uri)
            url_linktext = "Logout"
            c = Certification.get_by_id(cid)
            if c:
                # i dunno
                pass

            # get all cert_temps
            ctemps_query = CertificationTemplate.all()
            ctemps = ctemps_query.fetch(100)
            for ctemp in ctemps:
                ctemp.code4 = ctemp.key().name()
            template_values = {"url": url, "url_linktext": url_linktext, "cert": c, "ctemps": ctemps}
        else:
            if member.level == 7:
                member.canteach = [
                    {"level": "KB1"},
                    {"level": "KB2"},
                    {"level": "KB3"},
                    {"level": "IK1", "mustscore": True},
                    {"level": "IK2", "mustscore": True},
                ]
            elif member.level == 8:
                member.canteach = [
                    {"level": "KB1"},
                    {"level": "KB2"},
                    {"level": "KB3"},
                    {"level": "IK1"},
                    {"level": "IK2"},
                    {"level": "IK3", "mustscore": True},
                ]
            template_file = "templates/examiner/certs.html"
            cs_query = Certification.gql("WHERE createdBy= :1", users.get_current_user())
            cs = cs_query.fetch(100)
            template_values = {"url": url, "url_linktext": url_linktext, "member": member, "certs": cs}
        path = os.path.join(os.path.dirname(__file__), template_file)
        self.response.out.write(template.render(path, template_values))
 def get(self):
     url = users.create_logout_url(self.request.uri)
     url_linktext = 'Logout'
     # provide an email: get one, no email, get all
     mkey = self.request.get('memberkey')
     if mkey:
         # get specific member
         member = Member.get_by_key_name(mkey)
         ctemps_query = CertificationTemplate.all()
         ctemps = ctemps_query.fetch(100)
         template_file = 'templates/admin/member.html'
         template_values = {'url': url,'url_linktext': url_linktext,'member': member, 'ctemps': ctemps}
     else:
         # get all members
         members = Member.all()
         template_file = 'templates/admin/members.html'
         template_values = {'url': url,'url_linktext': url_linktext,'members': members}
     path = os.path.join(os.path.dirname(__file__), template_file)
     self.response.out.write(template.render(path, template_values))
 def get(self):
     user = users.get_current_user()
     url = users.create_logout_url(self.request.uri)
     url_linktext = 'Logout'
     member = Member.get_by_key_name(user.email())
     if member.level == 4:
         member.canteach = [{'level':'KB1','musttaskscore':True},{'level':'KB2','mustscore':True}]
         member.musttaskscore = {'KB1':True,'KB2':True}
         member.musttaskscorejson = "{'KB1':true,'KB2':true}"
     elif member.level == 5:
         member.canteach = [{'level':'KB1','mustscore':True},{'level':'KB2','mustscore':True},{'level':'KB3','mustscore':True}]
         member.musttaskscore = {'KB1':False,'KB2':False,'KB3':True}
         member.musttaskscorejson = "{'KB1':false,'KB2':false,'KB3':true}"
     elif member.level == 6:
         member.canteach = [{'level':'KB1'},{'level':'KB2'},{'level':'KB3','mustscore':True}]
         member.musttaskscore = {'KB1':False,'KB2':False,'KB3':False}
         member.musttaskscorejson = "{'KB1':false,'KB2':false,'KB3':false}"
         # if there is a 'id' in query string then it is a view for a specific cert...
     if self.request.get('certid'):
         cid = int(self.request.get('certid'))
         template_file = 'templates/instructor/cert.html'
         user = users.get_current_user()
         url = users.create_logout_url(self.request.uri)
         url_linktext = 'Logout'
         c = Certification.get_by_id(cid)
         if c:
             ctkn = c.template.key().name()
             c.musttaskscore = member.musttaskscore[ctkn]
         #get all cert_temps
         ctemps_query = CertificationTemplate.all()
         ctemps = ctemps_query.fetch(100)
         for ctemp in ctemps:
             ctemp.code4 = ctemp.key().name()
         template_values = {'url': url,'url_linktext': url_linktext,'cert': c,'member':member, 'ctemps':ctemps}
     else:
         template_file = 'templates/instructor/certs.html'
         cs_query = Certification.gql("WHERE createdBy= :1", users.get_current_user())
         cs = cs_query.fetch(100)
         template_values = {'url': url,'url_linktext': url_linktext,'member':member,'certs':cs}
     path = os.path.join(os.path.dirname(__file__), template_file)
     self.response.out.write(template.render(path, template_values))
    def post(self):
        method = self.request.get("method")
        if self.request.get("id"):
            cert_id = int(self.request.get("id"))
        email = self.request.get("recipient")
        fnam = self.request.get("fnam")
        lnam = self.request.get("lnam")
        if self.request.get("completed") == "1":
            completed = True
        else:
            completed = False
        templatekey = self.request.get("ctemp")
        if method == "update":
            # an edit
            c = Certification.get_by_id(cert_id)
            if completed:
                if c.completed:
                    # already completed
                    pass
                else:
                    # update their level (member record)
                    if templatekey == "KB1":
                        level = 1
                    elif templatekey == "KB2":
                        level = 2
                    elif templatekey == "KB3":
                        level = 3
                    elif templatekey == "IK1":
                        level = 4
                    elif templatekey == "IK2":
                        level = 5
                    elif templatekey == "IK3":
                        level = 6
                    elif templatekey == "EX1":
                        level = 7
                    elif templatekey == "EX2":
                        level = 8
                    elif templatekey == "M":
                        level = 9
                    else:
                        pass
                    c.completed = True
                    c.owner.level = level
                    # updated Member's level using an algorithm to evaluate elements
            if c.put() and c.completed:
                # triggers an email to email
                pass
            self.redirect("/examiner/certifications")
        elif method == "delete":
            # delete the record and related scores
            c = Certification.get_by_id(cert_id)
            for s in c.scores:
                s.delete()
            # also delete the member if there are no other certs related and the member has no user
            mem = c.owner
            c.delete()
            if mem.user:
                pass
            else:
                memcs = Certification.all()
                memcs = Certification.gql("WHERE owner= :1", c.owner)
                if memcs.count(limit=2) > 0:
                    pass
                else:
                    # also check to see if this user is the creater of the record...
                    if mem.createdBy == users.get_current_user():
                        mem.delete()

            self.redirect("/examiner/certifications")
            # TODO adjust level
        else:
            # a new post
            c = Certification()
            template = CertificationTemplate.get_by_key_name(templatekey)

            c.template = template
            mem = Member.get_by_key_name(email)
            if mem:
                # ... what if the fnam and lnam are different? an update?
                pass
            else:
                # create a new member
                mem = Member(key_name=email, fnam=fnam, lnam=lnam)
                mem.put()
            if completed:
                c.completed = True
                if templatekey == "KB1":
                    level = 1
                elif templatekey == "KB2":
                    level = 2
                elif templatekey == "KB3":
                    level = 3
                elif templatekey == "IK1":
                    level = 4
                elif templatekey == "IK2":
                    level = 5
                elif templatekey == "IK3":
                    level = 6
                elif templatekey == "EX1":
                    level = 7
                elif templatekey == "EX2":
                    level = 8
                elif templatekey == "M":
                    level = 9
                mem.level = level
            mem.put()
            c.owner = mem
            c.put()
            # Trigger email to certification recipient
            from google.appengine.api import mail

            message = mail.EmailMessage(
                sender="WorldKiteOrg-DoNotReply <*****@*****.**>",
                subject="Congratulations - your WorldKite Certification is completed",
            )
            message.to = mem.key().name()
            message.body = "Congratulations" + mem.fnam + " " + mem.lnam
            message.body += """

"""
            message.body += c.template.key().name() + " " + c.template.short
            message.body += """

Visit http://worldkite.org and login with the email address
you provided for your World Kite certification. We use Google's
system for authentication so if you email account is not already
registered with Google then you will be prompted to do so.

Please let us know if you have any questions by dropping an email to:
[email protected]

Welcome to our team!

World Kite Organization
"""
            message.send()
            # now check the template and create new scores for each Element related to the CertTemp
            # first, get all CertificationTemplate.elements
            for el in template.elements:
                # now for each el, create a new ElemScore
                elsc = ElemScore()
                elsc.certtemp_elem = el
                elsc.certification = c
                if completed:
                    elsc.score = 1
                else:
                    elsc.score = 0
                elsc.put()
            self.redirect("/examiner/certifications?certid=" + str(c.key().id()))
    def post(self):
        method = self.request.get('method')
        if self.request.get('id'): cert_id = int(self.request.get('id'))
        email = self.request.get('recipient')
        fnam = self.request.get('fnam')
        lnam = self.request.get('lnam')
        if self.request.get('completed') == '1': completed = True
        else: completed = False
        templatekey = self.request.get('ctemp')
        if method == "update":
            # an edit
            c = Certification.get_by_id(cert_id)
            if completed:
                if c.completed:
                    #already completed
                    pass
                else:
                    #update their level (member record)
                    if templatekey == 'KB1': level = 1
                    elif templatekey == 'KB2': level = 2
                    elif templatekey == 'KB3': level = 3
                    elif templatekey == 'IK1': level = 4
                    elif templatekey == 'IK2': level = 5
                    elif templatekey == 'IK3': level = 6
                    elif templatekey == 'EX1': level = 7
                    elif templatekey == 'EX2': level = 8
                    elif templatekey == 'M': level = 9
                    else: pass
                    c.completed = True
                    c.owner.level = level
                    #updated Member's level using an algorithm to evaluate elements
            if c.put() and c.completed:
                #triggers an email to email
                pass
            self.redirect('/master/certifications')
        elif method == "delete":
            # delete the record and related scores
            c = Certification.get_by_id(cert_id)
            for s in c.scores:
                s.delete()
            #also delete the member if there are no other certs related and the member has no user
            mem = c.owner
            c.delete()
            if mem.user: pass
            else:
                memcs = Certification.all()
                memcs = Certification.gql("WHERE owner= :1", c.owner)
                if memcs.count(limit=2) > 0: pass
                else:
                    # also check to see if this user is the creater of the record...
                    if mem.createdBy == users.get_current_user(): mem.delete()

            self.redirect('/master/certifications')
            # TODO adjust level
        else:
            # a new post
            c = Certification()
            template = CertificationTemplate.get_by_key_name(templatekey)

            c.template = template
            mem = Member.get_by_key_name(email)
            if (mem):
                #... what if the fnam and lnam are different? an update?
                pass
            else:
                # create a new member
                mem = Member(key_name=email,fnam=fnam,lnam=lnam)
                mem.put()
                # TODO don't forget to send them an email to confirm membership!!!
            if completed:
                c.completed = True
                if templatekey == 'KB1': level = 1
                elif templatekey == 'KB2': level = 2
                elif templatekey == 'KB3': level = 3
                elif templatekey == 'IK1': level = 4
                elif templatekey == 'IK2': level = 5
                elif templatekey == 'IK3': level = 6
                elif templatekey == 'EX1': level = 7
                elif templatekey == 'EX2': level = 8
                elif templatekey == 'M': level = 9
                mem.level = level
            mem.put()
            c.owner = mem
            c.put()
            # now check the template and create new scores for each Element related to the CertTemp
            # first, get all CertificationTemplate.elements
            for el in template.elements:
                # now for each el, create a new ElemScore
                elsc = ElemScore()
                elsc.certtemp_elem = el
                elsc.certification = c
                if completed: elsc.score = 1
                else: elsc.score = 0
                elsc.put()
            self.redirect('/master/certifications?certid=' + str(c.key().id()))
    def post(self):
        method = self.request.get('method')
        cert_id = None
        if self.request.get('id'): cert_id = int(self.request.get('id'))
        email = self.request.get('recipient')
        fnam = self.request.get('fnam')
        lnam = self.request.get('lnam')
        if self.request.get('completed') == '1': completed = True
        else: completed = False
        templatekey = self.request.get('ctemp')
        if method == "update":
            # an edit
            c = Certification.get_by_id(cert_id)
            if completed:
                if c.completed:
                    #already completed
                    pass
                else:
                    #update their level (member record)
                    if templatekey == 'KB1': level = 1
                    elif templatekey == 'KB2': level = 2
                    elif templatekey == 'KB3': level = 3
                    elif templatekey == 'IK1': level = 4
                    elif templatekey == 'IK2': level = 5
                    elif templatekey == 'IK3': level = 6
                    elif templatekey == 'EX1': level = 7
                    elif templatekey == 'EX2': level = 8
                    elif templatekey == 'M': level = 9
                    else: level = 0
                    c.completed = True
                    c.owner.level = level
                    #updated Member's level using an algorithm to evaluate elements
            if c.put() and c.completed:
                #triggers an email to email
                pass
            self.redirect('/admin/certifications')
        elif method == "delete":
            # delete the record and related scores
            c = Certification.get_by_id(cert_id)
            for s in c.scores:
                s.delete()
            c.delete()
            self.redirect('/admin/certifications')
            # todo : adjust level
        else:
            # a new post
            c = Certification()
            template = CertificationTemplate.get_by_key_name(templatekey)

            c.template = template
            mem = Member.get_by_key_name(email)
            # goddamit, email should be the keyname for a member!!!
            if mem:
                #... what if the fnam and lnam are different? an update?
                pass
            else:
                # create a new member
                mem = Member(key_name=email,fnam=fnam,lnam=lnam)
                mem.put()
                # todo : don't forget to send them an email to confirm membership!!!
            if completed:
                c.completed = True
                if templatekey == 'KB1': level = 1
                elif templatekey == 'KB2': level = 2
                elif templatekey == 'KB3': level = 3
                elif templatekey == 'IK1': level = 4
                elif templatekey == 'IK2': level = 5
                elif templatekey == 'IK3': level = 6
                elif templatekey == 'EX1': level = 7
                elif templatekey == 'EX2': level = 8
                elif templatekey == 'M': level = 9
                else: level = 0
                mem.level = level
            mem.put()
            c.owner = mem
            c.put()
            # now check the template and create new scores for each Element related to the CertTemp
            # first, get all CertificationTemplate.elements
            for el in template.elements:
                # now for each el, create a new ElemScore
                elsc = ElemScore()
                elsc.certtemp_elem = el
                elsc.certification = c
                if completed: elsc.score = 1
                else: elsc.score = 0
                elsc.put()
            self.redirect('/admin/members?memberkey=' + email)
    def post(self):
        p = self.request.get('prereq')
        short = self.request.get('short')
        desc = self.request.get('desc')
        key3 = self.request.get('key3')
        method = self.request.get('method')
        if key3:
            ctemp = CertificationTemplate.get_by_key_name(key3)
            if method == "update":
                # an edit
                if p:
                    pr = CertificationTemplate.get_by_key_name(p)
                    ctemp.prereq = pr
                if short: ctemp.short = short
                if desc: ctemp.desc = desc
                ctemp.put()
            elif method == "delete":
                # a deletion
                # first delete all dependencies
                # ctemp.elements
                for el in ctemp.elements:
                    el.elem.delete()
                    el.delete()
                ctemp.delete()
        else:
            # a new post
            if p:
                ctp = CertificationTemplate.get_by_key_name(p)
                ctemp = CertificationTemplate(key_name=key3)
                ctemp.short = short
                ctemp.desc = desc
                ctemp.prereq = ctp
                ctemp.put()
            else:
                ctemp = CertificationTemplate(key_name=key3, short=short)
                ctemp.short = short
                ctemp.desc = desc
                ctemp.put()

        self.redirect('/admin/templates')