def POST(self, world):

        cur_world = world_exists(world)
        self.redirect_if_not_admin(cur_world)

        o = cur_world.is_open

        world_menu = self.get_or_put_menu(cur_world, "admin")

        f = self.world_form()
        form = CombinedForm([f], **self.formargs)

        if not f.validates():
            section = render().section_world(form)
            return render().admin(cur_world, section, world_menu, "%s on Palimpsest" % cur_world.title)
        else:
            edit_world = World.get_by_id(world)
            edit_world.title=f.d.title
            edit_world.blurb=f.d.blurb
            edit_world.publish=f.d.publish
            edit_world.void_text=f.d.void_text
            edit_world.is_open=f.d.is_open
            edit_world.put()

            if o != edit_world.is_open:
                # update menu
                world_menu = self.replace_or_put_and_get_menu(edit_world, "admin")
            
            section = render().section_world(form)
            return render().admin(edit_world, section, world_menu, "%s on Palimpsest" % cur_world.title)
    def GET(self, world, prop):
        
        cur_world = world_exists(world)
        cur_prop = property_exists(prop)

        a = cur_world.get_access_string(self.page_user)
        menu = self.get_or_put_menu(cur_world, a)
        menu['properties'][0][2] = "active"

        param = web.input()
        if hasattr(param, 'r'): # In read-only mode
            section = render().section_property_read(cur_prop)
            return render().admin(cur_world, section, menu, "%s's %s on Palimpsest" % (cur_world.title, cur_prop.name))

        self.redirect_if_not_edit(cur_world, cur_prop)

        if cur_prop.valid_values == "|text|" or cur_prop.valid_values == "|num|":
            valid_vals = cur_prop.valid_values
        else:
            valid_vals = 0

        f = self.properties_form()
        f.fill(**{'name':cur_prop.name,'valid_values':valid_vals,'fixed_values':cur_prop.valid_values,'sorter':cur_prop.sorter,'info':cur_prop.info,'discrete':cur_prop.discrete})
        edit_form = CombinedForm([f], **self.formargs)
        del_form = CombinedForm([self.delete_form()], **self.formargs)

        section = render().section_property(edit_form, del_form, True)
        return render().admin(cur_world, section, menu, "%s's %s on Palimpsest" % (cur_world.title, cur_prop.name), pre=["/js/showhide_form_fields.js"])
Example #3
0
    def POST(self, world):
        cur_world = world_exists(world)
        self.redirect_if_not_create(cur_world)

        f = self.properties_form()
        form = CombinedForm([f], **self.formargs)

        if not f.validates():
            access = cur_world.get_access_string(self.page_user)
            world_menu = self.get_or_put_menu(cur_world, access)
            section = render().section_properties(form)
            return render().admin(
                cur_world,
                section,
                world_menu,
                title="Add a new property to %s on Palimpsest" %
                cur_world.title,
                pre=["/js/showhide_form_fields.js"])
        else:

            access = cur_world.get_access_string(self.page_user)

            try:
                if int(f.d.valid_values) == 0:
                    valid_values = f.d.fixed_values
                else:
                    valid_values = f.d.valid_values
            except ValueError:
                valid_values = f.d.valid_values

            if f.d.discrete == "True":
                discrete = True
            else:
                discrete = False

            if cur_world.is_mod(self.page_user):
                visible = True
                """ Flush menus and available properties for everyone so they get reset"""
                # TODO: Fix this
                memcache.delete("%s-admin" % cur_world.key.id())
                memcache.delete("%s-closed" % cur_world.key.id())
            else:
                visible = False

            new_property = Property(name=f.d.name,
                                    sorter=f.d.sorter,
                                    info=f.d.info,
                                    discrete=discrete,
                                    valid_values=valid_values,
                                    world=cur_world.key,
                                    added_by=self.page_user.key,
                                    visible=visible,
                                    rejected=False)
            new_property.put()

            self.set_menu(cur_world, access)
            memcache.delete("_properties-%s-global" % cur_world.key.id())

            return web.seeother('/%s/property/%s' %
                                (cur_world.key.id(), new_property.key.id()))
    def GET(self, world, text):
        cur_world = world_exists(world)
        cur_text = text_exists(text)

        access = cur_world.get_access_string(self.page_user)
        world_menu = self.get_or_put_menu(cur_world, access)
        world_menu['texts'][0][2] = "active"

        param = web.input()
        if hasattr(param, 'r'): # In read-only mode
            world_properties = cur_world.get_properties_allowed(self.page_user).get_result()
            try:
                js = self.js_add_properties(world_properties, cur_world)
                properties_available = True
            except IndexError:
                properties_available = False
            property_values = cur_text.get_allowed_property_values(self.page_user).get_result()
            js += self.js_one_room_on_map(cur_text)
            section = render().section_texts_read(cur_text, cur_world.is_open, properties_available, property_values)
            return render().admin(cur_world, section, world_menu, "%s on Palimpsest" % cur_text.name, pre = ['http://maps.google.com/maps/api/js?sensor=false'], js=js, post=['/js/viewroomcoords.js', '/js/add_text_properties.js'])

        self.redirect_if_not_edit(cur_world, cur_text)

        form = self.text_form()
        form.fill(**{'name':cur_text.name, 'short_desc':cur_text.short_desc, 'long_desc':cur_text.long_desc})
        return self.reset_text_page(cur_world, form, access, world_menu, cur_text)
    def GET(self):

        f = self.world_form()
        form = CombinedForm([f], **self.formargs)
        f.fill(**{'void_text':get_default_void()})

        section = render().section_world(form)

        return render().admin(self.def_world, section, self.empty_menu, "Palimpsest: Create an experience")
    def POST(self, world, prop):
        cur_world = world_exists(world)
        cur_prop = property_exists(prop)
        self.redirect_if_not_edit(cur_world, cur_prop)

        a = cur_world.get_access_string(self.page_user)

        post = web.input()
        if hasattr(post, 'delete'):
            
            PropertyValue.delete_all_for_property(cur_prop)
            cur_prop.key.delete()

            """ Flush menus and available properties for everyone so they get reset"""
            # TODO: Fix cache flushing for everyone else
            memcache.delete("_properties-%s-global" % cur_world.key.id())
            if a == "admin":
                memcache.delete("%s-closed" % cur_world.key.id())
            elif a == "closed":
                memcache.delete("%s-admin" % cur_world.key.id())
            self.replace_or_put_menu(cur_world, a)

            raise web.seeother("/%s/property" % cur_world.key.id())

        f = self.properties_form()
        if not f.validates():
            menu = self.get_or_put_menu(cur_world, a)
            edit_form = CombinedForm([f], **self.formargs)
            section = render().section_property(edit_form)
            return render().admin(cur_world, section, menu, "%s's %s on Palimpsest" % (cur_world.title, cur_prop.name), pre=["/js/showhide_form_fields.js"])
        else:

            try:
                if int(f.d.valid_values) == 0:
                    valid_values = f.d.fixed_values
                else:
                    valid_values = f.d.valid_values
            except ValueError:
                valid_values = f.d.valid_values

            if f.d.discrete == "True":
                discrete = True
            else:
                discrete = False

            to_edit = cur_prop
            to_edit.name=f.d.name
            to_edit.sorter=f.d.sorter
            to_edit.info=f.d.info
            to_edit.discrete=discrete
            to_edit.valid_values=valid_values
            to_edit.last_modified_by=self.page_user.key

            to_edit.put()

        return web.seeother("/%s/property/%s" % (cur_world.key.id(), cur_prop.key.id()))
 def POST(self):
     f = self.u_form()
     form = CombinedForm([f], **self.formargs)
     if not f.validates():
         return render().user(form, self.delform)
     else:
         user_ftr = self.page_user.set_info(**{'penname':f.d.penname, 'realname':f.d.realname, 'contact':f.d.contact})
         page = render().user(form, self.delform, "Saved.")
         user_ftr.get_result()
         return page
Example #8
0
    def GET(self):

        f = self.world_form()
        form = CombinedForm([f], **self.formargs)
        f.fill(**{'void_text': get_default_void()})

        section = render().section_world(form)

        return render().admin(self.def_world, section, self.empty_menu,
                              "Palimpsest: Create an experience")
    def POST(self, world):
        cur_world = world_exists(world)
        self.redirect_if_not_create(cur_world)

        f = self.properties_form()
        form = CombinedForm([f], **self.formargs)

        if not f.validates():
            access = cur_world.get_access_string(self.page_user)
            world_menu = self.get_or_put_menu(cur_world, access)
            section = render().section_properties(form)
            return render().admin(cur_world, section, world_menu, title="Add a new property to %s on Palimpsest" % cur_world.title, pre=["/js/showhide_form_fields.js"])
        else:

            access = cur_world.get_access_string(self.page_user)

            try:
                if int(f.d.valid_values) == 0:
                    valid_values = f.d.fixed_values
                else:
                    valid_values = f.d.valid_values
            except ValueError:
                valid_values = f.d.valid_values

            if f.d.discrete == "True":
                discrete = True
            else:
                discrete = False

            if cur_world.is_mod(self.page_user):
                visible = True
                """ Flush menus and available properties for everyone so they get reset"""
                # TODO: Fix this
                memcache.delete("%s-admin" % cur_world.key.id())
                memcache.delete("%s-closed" % cur_world.key.id())
            else:
                visible = False

            new_property = Property(name=f.d.name,
                                    sorter=f.d.sorter,
                                    info=f.d.info,
                                    discrete=discrete,
                                    valid_values=valid_values,
                                    world=cur_world.key,
                                    added_by=self.page_user.key,
                                    visible=visible,
                                    rejected=False
                )
            new_property.put()

            self.set_menu(cur_world, access)
            memcache.delete("_properties-%s-global" % cur_world.key.id())

            return web.seeother('/%s/property/%s' % (cur_world.key.id(), new_property.key.id()))
    def GET(self, world):

        cur_world = world_exists(world)
        self.redirect_if_not_admin(cur_world)

        world_menu = self.get_or_put_menu(cur_world, "admin")

        f = self.world_form()
        form = CombinedForm([f], **self.formargs)
        f.fill(**{'title':cur_world.title,'blurb':cur_world.blurb,'publish':cur_world.publish,'is_open':cur_world.is_open,'void_text':cur_world.void_text})

        section = render().section_world(form)

        return render().admin(cur_world, section, world_menu, "%s on Palimpsest" % cur_world.title)
    def GET(self, world):
        cur_world = world_exists(world)
        self.redirect_if_not_create(cur_world)

        access = cur_world.get_access_string(self.page_user)
        world_menu = self.get_or_put_menu(cur_world, access)
        world_menu['properties'][0][2] = "active"

        logging.warning(access)

        f = self.properties_form()
        form = CombinedForm([f], **self.formargs)
        section = render().section_property(form)
        return render().admin(cur_world, section, world_menu, title="Add a new property to %s on Palimpsest" % cur_world.title, pre=["/js/showhide_form_fields.js"])
Example #12
0
    def reset_text_page(self, world, form, access, world_menu, text=None):

        js = self.js_all_rooms_on_map(world)
        world_properties = world.get_properties_allowed(self.page_user)

        if text is not None:
            del_form = CombinedForm([self.delete_form()], **{'method': 'post'})
            edit = True
            title = "Edit %s in %s on Palimpsest" % (text.name, world.title)
            js += self.js_editable_room_on_map(text)
            post = ['/js/editroomcoords.js']

            propvals = {}
            allowed_ftr = text.get_allowed_property_values(self.page_user)
            if world.is_mod(self.page_user):
                pending_ftr = text.get_pending_property_values()
            propvals['visible'] = allowed_ftr.get_result()
            if world.is_mod(self.page_user):
                propvals['pending'] = pending_ftr.get_result()
            else:
                propvals['pending'] = []

        else:
            del_form = None
            edit = False
            propvals = []
            title = "Add a new text to %s on Palimpsest" % world.title
            post = ['/js/addroomcoords.js']

        try:
            js += self.js_add_properties(world_properties, world)
            properties_available = True
        except IndexError:
            properties_available = False

        pre = [
            'http://maps.google.com/maps/api/js?sensor=false',
            '/js/add_text_properties.js'
        ]
        section = render().section_texts(form, properties_available, del_form,
                                         edit, propvals)

        return render().admin(world,
                              section,
                              world_menu,
                              title=title,
                              pre=pre,
                              js=js,
                              post=post)
Example #13
0
 def POST(self):
     f = self.u_form()
     form = CombinedForm([f], **self.formargs)
     if not f.validates():
         return render().user(form, self.delform)
     else:
         user_ftr = self.page_user.set_info(
             **{
                 'penname': f.d.penname,
                 'realname': f.d.realname,
                 'contact': f.d.contact
             })
         page = render().user(form, self.delform, "Saved.")
         user_ftr.get_result()
         return page
    def GET(self, world):
        cur_world = world_exists(world)
        self.redirect_if_not_admin(cur_world)

        mods_ftr = cur_world.get_moderators()

        access = cur_world.get_access_string(self.page_user)
        world_menu = self.get_or_put_menu(cur_world, access)
        world_menu['contributors'][0][2] = "active"

        f = self.moderator_form()
        form = CombinedForm([f], **self.formargs)
        cur_mods = mods_ftr.get_result()
        section = render().section_moderators(form, cur_mods)
        return render().admin(cur_world, section, world_menu, title="Moderators of %s on Palimpsest" % cur_world.title, post=self.epost)
    def GET(self):
        user = self.page_user
        f = self.u_form()
        form = CombinedForm([f], **self.formargs)
        f.fill(**{'penname':user.penname, 'realname':user.name, 'contact':user.contact})

        return render().user(form, self.delform)
Example #16
0
    def GET(self, worldkey, save):
        world = world_exists(worldkey)
        save = save_exists(save)
        self.redirect_if_not_exists(world, "/yours/saves")
        self.redirect_if_not_exists(save, "/yours/saves")
        #self.can_access_world(world)
        self.can_edit_save(save)
        if not world.publish:
            raise web.notfound()

        sofaUrl = "/%s/save/%s?s=1" % (world.key.id(), save.key.id())

        param = web.input()
        if hasattr(param, 's'): # In sofa mode
            post = ['/js/maps.google.polygon.containsLatLng.js', '/js/page_scroll.js', '/js/text_queue.js', '/js/room_expand.js','/js/sofa_location.js', '/js/toggle_info.js']
        else:
            post = ['/js/maps.google.polygon.containsLatLng.js', '/js/page_scroll.js', '/js/text_queue.js', '/js/room_expand.js','/js/get_location.js', '/js/toggle_info.js']
        
        js = self.js_coords_list(world, "/%s/save/%s" % (world.key.id(), save.key.id()), sofaUrl)

        return render().go(title="%s on Palimpsest" % world.title
                        ,navleft=[('Back to %s' % world.title,'/%s' % world.key.id())]
                        ,pre=['http://maps.google.com/maps/api/js?sensor=false', '/js/set_page_height.js']
                        ,js=js
                        ,post=post
                    )
    def GET(self):

        everything = self.page_user.get_works().get_result()
        
        bys = everything[0]
        mods = everything[1]
        opens = everything[2]

        yours_menu = copy.deepcopy(self.menu)

        for by in bys:
            yours_menu['yours'].append((by.title, "/%s/edit" % by.key.id(), ""))

        for mod in mods:
            w = mod.world.get()
            yours_menu['unmod'].append((w.title, "/%s/texts" % w.key.id(), ""))
        if len(mods) < 1:
            yours_menu['unmod'][0][2] = "disabled"

        for o in opens:
            yours_menu['contr'].append((o.title, "/%s/texts" % o.key.id(), ""))
        if len(opens) < 1:
            yours_menu['contr'][0][2] = "disabled"

        return render().yours(yours_menu, "Palimpsest: Your experiences")
Example #18
0
    def GET(self):

        everything = self.page_user.get_works().get_result()

        bys = everything[0]
        mods = everything[1]
        opens = everything[2]

        yours_menu = copy.deepcopy(self.menu)

        for by in bys:
            yours_menu['yours'].append(
                (by.title, "/%s/edit" % by.key.id(), ""))

        for mod in mods:
            w = mod.world.get()
            yours_menu['unmod'].append((w.title, "/%s/texts" % w.key.id(), ""))
        if len(mods) < 1:
            yours_menu['unmod'][0][2] = "disabled"

        for o in opens:
            yours_menu['contr'].append((o.title, "/%s/texts" % o.key.id(), ""))
        if len(opens) < 1:
            yours_menu['contr'][0][2] = "disabled"

        return render().yours(yours_menu, "Palimpsest: Your experiences")
    def reset_text_page(self, world, form, access, world_menu, text=None):
        
        js = self.js_all_rooms_on_map(world)
        world_properties = world.get_properties_allowed(self.page_user)

        if text is not None:
            del_form = CombinedForm([self.delete_form()], **{'method':'post'})
            edit = True
            title = "Edit %s in %s on Palimpsest" % (text.name, world.title)
            js+= self.js_editable_room_on_map(text)
            post = ['/js/editroomcoords.js']

            propvals = {}
            allowed_ftr = text.get_allowed_property_values(self.page_user)
            if world.is_mod(self.page_user):
                pending_ftr = text.get_pending_property_values()
            propvals['visible'] = allowed_ftr.get_result()
            if world.is_mod(self.page_user):
                propvals['pending'] = pending_ftr.get_result()
            else:
                propvals['pending'] = []

        else:
            del_form = None
            edit = False
            propvals = []
            title = "Add a new text to %s on Palimpsest" % world.title
            post = ['/js/addroomcoords.js']

        try:
            js += self.js_add_properties(world_properties, world)
            properties_available = True
        except IndexError:
            properties_available = False

        pre = ['http://maps.google.com/maps/api/js?sensor=false', '/js/add_text_properties.js']
        section = render().section_texts(form, properties_available, del_form, edit, propvals)

        return render().admin(world, 
                              section, 
                              world_menu, 
                              title=title,
                              pre=pre,
                              js=js, 
                              post=post
                            )    
 def POST(self):
     f = self.world_form()
     form = CombinedForm([f], **self.formargs)
     if not f.validates():
         section = render().section_world(form)
         return render().admin(self.def_world, section, self.empty_menu, "Palimpsest: Create an experience")
     else:
         slug = make_world_slug(f.d.title)
         new_world = World(id=slug,
                           title=f.d.title, 
                           blurb=f.d.blurb, 
                           creator=self.page_user.key, 
                           publish=f.d.publish, 
                           void_text=f.d.void_text,
                           is_open=f.d.is_open
                     )
         new_world.put()
         #f.fill(**{'title':new_world.title,'blurb':new_world.blurb,'publish':new_world.publish,'is_open':new_world.is_open,'void_text':new_world.void_text})
         return web.seeother('/%s/edit' % new_world.key.id())
Example #21
0
 def POST(self):
     f = self.world_form()
     form = CombinedForm([f], **self.formargs)
     if not f.validates():
         section = render().section_world(form)
         return render().admin(self.def_world, section, self.empty_menu,
                               "Palimpsest: Create an experience")
     else:
         slug = make_world_slug(f.d.title)
         new_world = World(id=slug,
                           title=f.d.title,
                           blurb=f.d.blurb,
                           creator=self.page_user.key,
                           publish=f.d.publish,
                           void_text=f.d.void_text,
                           is_open=f.d.is_open)
         new_world.put()
         #f.fill(**{'title':new_world.title,'blurb':new_world.blurb,'publish':new_world.publish,'is_open':new_world.is_open,'void_text':new_world.void_text})
         return web.seeother('/%s/edit' % new_world.key.id())
Example #22
0
    def GET(self, world):
        cur_world = world_exists(world)
        self.redirect_if_not_create(cur_world)

        access = cur_world.get_access_string(self.page_user)
        world_menu = self.get_or_put_menu(cur_world, access)
        world_menu['properties'][0][2] = "active"

        logging.warning(access)

        f = self.properties_form()
        form = CombinedForm([f], **self.formargs)
        section = render().section_property(form)
        return render().admin(cur_world,
                              section,
                              world_menu,
                              title="Add a new property to %s on Palimpsest" %
                              cur_world.title,
                              pre=["/js/showhide_form_fields.js"])
Example #23
0
    def GET(self, world):
        cur_world = world_exists(world)
        self.redirect_if_not_admin(cur_world)

        mods_ftr = cur_world.get_moderators()

        access = cur_world.get_access_string(self.page_user)
        world_menu = self.get_or_put_menu(cur_world, access)
        world_menu['contributors'][0][2] = "active"

        f = self.moderator_form()
        form = CombinedForm([f], **self.formargs)
        cur_mods = mods_ftr.get_result()
        section = render().section_moderators(form, cur_mods)
        return render().admin(cur_world,
                              section,
                              world_menu,
                              title="Moderators of %s on Palimpsest" %
                              cur_world.title,
                              post=self.epost)
Example #24
0
    def GET(self):
        user = self.page_user
        f = self.u_form()
        form = CombinedForm([f], **self.formargs)
        f.fill(
            **{
                'penname': user.penname,
                'realname': user.name,
                'contact': user.contact
            })

        return render().user(form, self.delform)
Example #25
0
    def GET(self, worldkey):
        world = world_exists(worldkey)
        #self.can_access_world(world)
        self.redirect_if_not_exists(world, "/yours/new")
        try:
            if not world.publish:
                raise web.notfound()
        except AttributeError:
            web.seeother("/yours/new")

        js = self.js_all_rooms_on_map(world)

        return render().cover(world, pre=['http://maps.google.com/maps/api/js?sensor=false'], js=js, post=['/js/all_rooms_on_map.js'])
Example #26
0
    def GET(self, worldkey):
        world = world_exists(worldkey)
        #self.can_access_world(world)
        self.redirect_if_not_exists(world, "/yours/new")
        try:
            if not world.publish:
                raise web.notfound()
        except AttributeError:
            web.seeother("/yours/new")

        js = self.js_all_rooms_on_map(world)

        return render().cover(
            world,
            pre=['http://maps.google.com/maps/api/js?sensor=false'],
            js=js,
            post=['/js/all_rooms_on_map.js'])
    def GET(self, save):
        save = SavePath.get_by_id(int(save))
        self.can_access_save(save)
        texts = []
        ftrs = []
        prev = None
        for text in save.texts:
            ftrs.append(text.get_async())
        for ftr in ftrs:
            t = ftr.get_result()
            if prev is None or t.key != prev.key:
                texts.append(t)
            prev = t

        if self.page_user:
            access = save.user == self.page_user.key
        else:
            access = False

        return render().save(save, texts, access)
Example #28
0
    def GET(self, save):
        save = SavePath.get_by_id(int(save))
        self.can_access_save(save)
        texts = []
        ftrs = []
        prev = None
        for text in save.texts:
            ftrs.append(text.get_async())
        for ftr in ftrs:
            t = ftr.get_result()
            if prev is None or t.key != prev.key:
                texts.append(t)
            prev = t

        if self.page_user:
            access = save.user == self.page_user.key
        else:
            access = False

        return render().save(save, texts, access)
Example #29
0
    def GET(self, worldkey, save):
        world = world_exists(worldkey)
        save = save_exists(save)
        self.redirect_if_not_exists(world, "/yours/saves")
        self.redirect_if_not_exists(save, "/yours/saves")
        #self.can_access_world(world)
        self.can_edit_save(save)
        if not world.publish:
            raise web.notfound()

        sofaUrl = "/%s/save/%s?s=1" % (world.key.id(), save.key.id())

        param = web.input()
        if hasattr(param, 's'):  # In sofa mode
            post = [
                '/js/maps.google.polygon.containsLatLng.js',
                '/js/page_scroll.js', '/js/text_queue.js',
                '/js/room_expand.js', '/js/sofa_location.js',
                '/js/toggle_info.js'
            ]
        else:
            post = [
                '/js/maps.google.polygon.containsLatLng.js',
                '/js/page_scroll.js', '/js/text_queue.js',
                '/js/room_expand.js', '/js/get_location.js',
                '/js/toggle_info.js'
            ]

        js = self.js_coords_list(
            world, "/%s/save/%s" % (world.key.id(), save.key.id()), sofaUrl)

        return render().go(
            title="%s on Palimpsest" % world.title,
            navleft=[('Back to %s' % world.title, '/%s' % world.key.id())],
            pre=[
                'http://maps.google.com/maps/api/js?sensor=false',
                '/js/set_page_height.js'
            ],
            js=js,
            post=post)
Example #30
0
    def POST(self, world):
        cur_world = world_exists(world)
        self.redirect_if_not_admin(cur_world)

        param = web.input()
        if hasattr(param, 'mod'):
            # Access rights form submitted
            edit_mod = ndb.Key("Moderator", int(param.userid)).get()
            if int(param.action) == 1:
                edit_mod.admin = True
            if int(param.action) == 2:
                edit_mod.admin = False
            if int(param.action) == 0:
                try:
                    edit_mod.user_pending.delete()
                except AttributeError:
                    # (no pending user)
                    pass
                edit_mod.key.delete()
            else:
                edit_mod.put()
            raise web.seeother("/%s/mods" % world)

        f = self.moderator_form()
        form = CombinedForm([f], **self.formargs)
        if not f.validates():
            mods_ftr = cur_world.get_moderators()

            access = cur_world.get_access_string(self.page_user)
            world_menu = self.get_or_put_menu(cur_world, access)
            world_menu['contributors'][0][2] = "active"

            f = self.moderator_form()
            form = CombinedForm([f], **self.formargs)
            cur_mods = mods_ftr.get_result()
            section = render().section_moderators(form, cur_mods)
            return render().admin(cur_world,
                                  section,
                                  world_menu,
                                  title="Moderators of %s on Palimpsest" %
                                  cur_world.title,
                                  post=self.epost)

        else:

            try_user = users.User(f.d.add_contrib)
            user_result = get_google_user_key(try_user).get_result()
            if len(user_result) > 0 and user_result[0] is not None:
                user = user_exists_bykey(user_result[0])
                m = Moderator(world=cur_world.key, user=user.key, admin=False)
                msg = """You've been added as a contributor to %s.
This means you can add texts and properties which are published straight away.  You can also approve or reject publicly submitted texts and properties.
Try it out: %s/%s/texts""" % (cur_world.title, web.ctx.host,
                              cur_world.key.id())
            else:
                email = str(f.d.add_contrib).lower()
                # TODO: Check UserPending doesn't already exist with that email
                u_p = UserPending(email=email)
                u_p.put()
                m = Moderator(world=cur_world.key,
                              user_pending=u_p.key,
                              admin=False)
                msg = """You've been added as a contributor to %s.
This means you can add texts which bypass the moderation stage, and are published straight away.
Try it out: %s/%s/auth/%s""" % (cur_world.title, web.ctx.host,
                                cur_world.key.id(), str(u_p.key.id()))

            m.put()

            to_addr = f.d.add_contrib
            if not mail.is_email_valid(to_addr):
                return "Could not send: invalid email. Press back and try again."

            message = mail.EmailMessage()
            message.sender = get_current_user().user.email()
            message.to = to_addr
            message.subject = "Palimpsest: You have been added as a moderator of %s!" % cur_world.title
            message.body = msg

            message.send()

        return web.seeother('/%s/mods' % cur_world.key.id())
    def POST(self, world):
        cur_world = world_exists(world)
        self.redirect_if_not_admin(cur_world)

        param = web.input()
        if hasattr(param, 'mod'):
            # Access rights form submitted
            edit_mod = ndb.Key("Moderator", int(param.userid)).get()
            if int(param.action) == 1:
                edit_mod.admin = True
            if int(param.action) == 2:
                edit_mod.admin = False
            if int(param.action) == 0:
                try:
                    edit_mod.user_pending.delete()
                except AttributeError:
                    # (no pending user)
                    pass
                edit_mod.key.delete()
            else:
                edit_mod.put()
            raise web.seeother("/%s/mods" % world)

        f = self.moderator_form()
        form = CombinedForm([f], **self.formargs)
        if not f.validates():
            mods_ftr = cur_world.get_moderators()

            access = cur_world.get_access_string(self.page_user)
            world_menu = self.get_or_put_menu(cur_world, access)
            world_menu['contributors'][0][2] = "active"

            f = self.moderator_form()
            form = CombinedForm([f], **self.formargs)
            cur_mods = mods_ftr.get_result()
            section = render().section_moderators(form, cur_mods)
            return render().admin(cur_world, section, world_menu, title="Moderators of %s on Palimpsest" % cur_world.title, post=self.epost)
        
        else:

            try_user = users.User(f.d.add_contrib)
            user_result = get_google_user_key(try_user).get_result()
            if len(user_result) > 0 and user_result[0] is not None:
                user = user_exists_bykey(user_result[0])
                m = Moderator(world=cur_world.key, user=user.key, admin=False)
                msg = """You've been added as a contributor to %s.
This means you can add texts and properties which are published straight away.  You can also approve or reject publicly submitted texts and properties.
Try it out: %s/%s/texts""" % (cur_world.title, web.ctx.host, cur_world.key.id())
            else:
                email = str(f.d.add_contrib).lower()
                # TODO: Check UserPending doesn't already exist with that email
                u_p = UserPending(email=email)
                u_p.put()
                m = Moderator(world=cur_world.key, user_pending=u_p.key, admin=False)
                msg = """You've been added as a contributor to %s.
This means you can add texts which bypass the moderation stage, and are published straight away.
Try it out: %s/%s/auth/%s""" % (cur_world.title, web.ctx.host, cur_world.key.id(), str(u_p.key.id()))
            
            m.put()
            
            to_addr = f.d.add_contrib
            if not mail.is_email_valid(to_addr):
                return "Could not send: invalid email. Press back and try again."

            message = mail.EmailMessage()
            message.sender = get_current_user().user.email()
            message.to = to_addr
            message.subject = "Palimpsest: You have been added as a moderator of %s!" % cur_world.title
            message.body = msg

            message.send()

        return web.seeother('/%s/mods' % cur_world.key.id())
 def GET(self):
     user_saves = get_saves_by(self.page_user)
     return render().saves(user_saves)
Example #33
0
 def GET(self):
     user_saves = get_saves_by(self.page_user)
     return render().saves(user_saves)