예제 #1
0
    def post(self, member_no):
        member = self.get_member(member_no)

        member.name = self.get_required('name')
        member.address = self.get_required('address')
        member.zipcode = self.get_required('zip')
        member.city = self.get_required('city')
        country = Country.get(self.get_required('country'))

        email = self.get_required('email')
        if email != '':
            member.email = db.Email(email)

        mobile = self.get_required('mobile')
        if mobile != '':
            member.phone = db.PhoneNumber(mobile)

        home = self.request.get('fixed')
        if home != '':
            member.phone_home = db.PhoneNumber(home)

        work = self.request.get('work')
        if work != '':
            member.phone_work = db.PhoneNumber(work)

        member.put()

        template = JINJA_ENVIRONMENT.get_template('templates/selfservice/profile_edit.html')
        countries = Country.all().order('order').fetch(FETCH_LIMIT)

        data = { 'message': 'Medlemsprofilen din er oppdatert.', 'member': member, 'countries': countries }
        self.response.write(template.render(data))
예제 #2
0
    def apply(self):
        try:
            if self.subject is None:
                self.delete_instance()
                return False
        except Bot.DoesNotExist:
            self.delete_instance()
            return False

        if self.action == 'category':
            from model import Category
            try:
                cat = Category.get(Category.id == self.value)
                self.subject.category = cat
            except Category.DoesNotExist:
                raise AttributeError("Category to change to does not exist.")
        elif self.action == 'name':
            self.subject.name = self.value
        elif self.action == 'username':
            self.subject.username = self.value
        elif self.action == 'description':
            self.subject.description = self.value
        elif self.action == 'extra':
            self.subject.extra = self.value
        elif self.action == 'country':
            if self._value == 'None' or self._value is None:
                self.subject.country = None
            else:
                from model import Country
                try:
                    con = Country.get(id=self._value)
                    self.subject.country = con
                except Country.DoesNotExist:
                    raise AttributeError(
                        "Country to change to does not exist.")
        elif self.action == 'inlinequeries':
            self.subject.inlinequeries = bool(self.value)
        elif self.action == 'official':
            self.subject.official = bool(self.value)
        elif self.action == 'offline':
            self.subject.offline = bool(self.value)
        elif self.action == 'spam':
            self.subject.spam = bool(self.value)
        elif self.action == 'add_keyword':
            kw_obj = Keyword(name=self.value, entity=self.subject)
            kw_obj.save()
        elif self.action == 'remove_keyword':
            try:
                kw_obj = Keyword.get(name=self.value, entity=self.subject)
                kw_obj.delete_instance()
            except Keyword.DoesNotExist:
                raise AttributeError(
                    "Keyword to delete does not exist anymore.")

        self.subject.save()

        self.executed = True
        self.save()
        return True
예제 #3
0
    def post(self, country_key):
        if (self.request.get('cancel') == '1'):
            return self.redirect('/countries')

        country = Country.get(country_key)
        country.order = int(self.request.get('order'))
        country.name = self.request.get('countryname')
        country.put()
        return self.redirect('/countries')
예제 #4
0
    def post(self):
        if self.request.get('store') != '1':
            self.redirect('/members')
            return

        try:
            member = Member()
            member.name = self.get_var('name')
            member.address = self.get_var('address')
            member.zipcode = self.get_var('zip')
            member.city = self.get_var('city')
            member.country = Country.get(self.get_var('country'))
            member.email = self.get_var('email', optional=True)
            member.mobile = self.get_var('mobile', optional=True)
            member.home = self.get_var('home', optional=True)
            member.work = self.get_var('work', optional=True)
            member.membertype = MemberType.get(self.get_var('type'))
            member.notes = self.get_var('comment', optional=True)
            member.status = Status.get(self.get_var('status'))
            member.number = dbutils.create_new_member_no()
            member.member_since = datetime.date.today()
            member.generate_access_code()
            mcount = self.get_var('magazine_count', optional=True)
            member.magazine_count = int(mcount) if mcount else 1
            member.put()
            self.redirect('/members/%s/edit' % member.key())
            return
        except MissingField:
            # TODO: Redirect
            template = JINJA_ENVIRONMENT.get_template(
                'templates/members/new_member.html')
            countries = Country.all().order('order').fetch(LIMIT)
            statuses = Status.all().order('order').fetch(LIMIT)
            types = MemberType.all().order('order').fetch(LIMIT)
            data = {}
            for name in [
                    'name', 'address', 'zip', 'country', 'email', 'mobile',
                    'home', 'work', 'type', 'comment', 'status'
            ]:
                data[name] = self.request.get(name)

            params = {
                'countries': countries,
                'statuses': statuses,
                'types': types,
                'data': data
            }
            self.response.write(template.render(params))
            return

        self.redirect('/members')
예제 #5
0
    def post(self):
        if self.request.get('store') != '1':
            self.redirect('/members')
            return

        try:
            member = Member()
            member.name = self.get_var('name')
            member.address = self.get_var('address')
            member.zipcode = self.get_var('zip')
            member.city = self.get_var('city')
            member.country = Country.get(self.get_var('country'))
            member.email = self.get_var('email', optional=True)
            member.mobile = self.get_var('mobile', optional=True)
            member.home = self.get_var('home', optional=True)
            member.work = self.get_var('work', optional=True)
            member.membertype = MemberType.get(self.get_var('type'))
            member.notes = self.get_var('comment', optional=True)
            member.status = Status.get(self.get_var('status'))
            member.number = dbutils.create_new_member_no()
            member.member_since = datetime.date.today()
            member.generate_access_code()
            mcount = self.get_var('magazine_count', optional=True)
            member.magazine_count = int(mcount) if mcount else 1
            member.put()
            self.redirect('/members/%s/edit' % member.key())
            return
        except MissingField:
            # TODO: Redirect
            template = JINJA_ENVIRONMENT.get_template('templates/members/new_member.html')
            countries = Country.all().order('order').fetch(LIMIT)
            statuses = Status.all().order('order').fetch(LIMIT)
            types = MemberType.all().order('order').fetch(LIMIT)
            data = { }
            for name in [ 'name', 'address', 'zip', 'country', 'email', 'mobile', 'home', 'work', 'type', 'comment', 'status']:
                data[name] = self.request.get(name)

            params = {
                'countries': countries,
                'statuses': statuses,
                'types': types,
                'data': data
            }
            self.response.write(template.render(params))
            return

        self.redirect('/members')
예제 #6
0
    def _md_plaintext(self):
        uname = util.escape_markdown(self.subject.username)
        value = self.value

        text = ''
        if self.action == 'category':
            from model import Category
            try:
                cat = Category.get(id=self.value)
                text += "move {} ➜ {}".format(uname, cat.name)
            except Category.DoesNotExist:
                raise AttributeError("Category to change to does not exist.")
        elif self.action == 'name':
            text += "set name {} ➜ {}".format(uname, str(value))
        elif self.action == 'username':
            text += "set username {} ➜ {}".format(uname, str(value))
        elif self.action == 'description':
            text += "change description text of {}".format(uname)
        elif self.action == 'extra':
            text += "change extra text {}".format(uname)
        elif self.action == 'country':
            text += "change country {} ➜ ".format(uname)
            if self._value == 'None' or self._value is None:
                text += "None"
            else:
                from model import Country
                try:
                    con = Country.get(id=self._value)
                    text += str(con)
                except Country.DoesNotExist:
                    raise AttributeError(
                        "Country to change to does not exist.")
        elif self.action == 'inlinequeries':
            text += "toggle inlinequeries {} ➜ {}".format(uname, str(value))
        elif self.action == 'official':
            text += "toggle official {} ➜ {}".format(uname, str(value))
        elif self.action == 'offline':
            text += "set {} {}".format('💤' if bool(value) else 'online',
                                       uname)
        elif self.action == 'spam':
            text += "mark {} as spammy".format(uname)
        elif self.action == 'add_keyword':
            text += "add keyword #{} to {}".format(str(value), uname)
        elif self.action == 'remove_keyword':
            text += "remove keyword #{} from {}".format(str(value), uname)
        return text
예제 #7
0
    def value(self):
        # cast types
        from model import Category
        from model import Country

        if self._value == 'None':
            return None

        if self.action in self.BOOLEAN_ACTIONS:
            return bool(self._value)
        elif self.action == 'category':
            return Category.get(id=self._value)
        elif self.action == 'country':
            if self._value is None:
                return None
            return Country.get(id=self._value)
        else:
            return str(self._value) if self._value else None
예제 #8
0
    def post(self, member_no):
        member = self.get_member(member_no)

        member.name = self.get_required('name')
        member.address = self.get_required('address')
        member.zipcode = self.get_required('zip')
        member.city = self.get_required('city')
        country = Country.get(self.get_required('country'))

        email = self.get_required('email')
        if email != '':
            member.email = db.Email(email)

        mobile = self.get_required('mobile')
        if mobile != '':
            member.phone = db.PhoneNumber(mobile)

        home = self.request.get('fixed')
        if home != '':
            member.phone_home = db.PhoneNumber(home)

        work = self.request.get('work')
        if work != '':
            member.phone_work = db.PhoneNumber(work)

        member.put()
        member.update_index()

        template = JINJA_ENVIRONMENT.get_template(
            'templates/selfservice/profile_edit.html')
        countries = Country.all().order('order').fetch(FETCH_LIMIT)

        data = {
            'message': 'Medlemsprofilen din er oppdatert.',
            'member': member,
            'countries': countries
        }
        self.response.write(template.render(data))
예제 #9
0
    def post(self):
        complete = []
        incomplete = []
        values = {}

        # Holy crap this is ugly. There has to be a better way.

        name = self.request.get('name')
        if not name or name.strip() == '' or name.strip().startswith('http'):
            incomplete.append('name')
        else:
            values['name'] = name
            complete.append('name')

        address = self.request.get('address')
        # Spammers put URLs in the address field so we reject those right away
        if not address or address.strip() == '' or address.strip().startswith(
                'http'):
            incomplete.append('address')
        else:
            values['address'] = address
            complete.append('address')

        zipcode = self.request.get('zip')
        if (not zipcode or zipcode.strip() == '') or len(zipcode.strip()) < 4:
            incomplete.append('zip')
        else:
            values['zip'] = zipcode
            complete.append('zip')

        city = self.request.get('city')
        if not city or city.strip() == '':
            incomplete.append('city')
        else:
            values['city'] = city
            complete.append('city')

        if 'zip' in incomplete or 'city' in incomplete:
            incomplete.append('zipcity')

        country_key = self.request.get('country').strip()
        country = Country.get(country_key)

        countries = Country.all().order('order').fetch(100)

        if not country or not country_key or country_key.strip() == '':
            incomplete.append('country')
            # retrieve countries since we're going to need them
        else:
            values['country'] = country.name
            complete.append('country')

        email = self.request.get('email')
        if not email or email.strip() == '' or not mail.is_email_valid(email):
            incomplete.append('email')
        else:
            values['email'] = email
            complete.append('email')

        mobile = self.request.get('mobile')
        if mobile and mobile.strip() == '':
            mobile = None
        values['mobile'] = mobile

        home = self.request.get('home')
        if home and home.strip() == '':
            home = None
        values['home'] = home

        work = self.request.get('work')
        if work and work.strip() == '':
            work = None
        values['work'] = work

        member_type = self.request.get('type')
        if not member_type or member_type.strip() == '':
            member_type = '1'

        types = MemberType.all().fetch(100)

        mtype = None

        # TODO: Custom settings? Constants at least.
        if member_type == '1':
            mtype = next(t for t in types if t.name == DEFAULT_MEMBER_NAME)
        else:
            mtype = next(t for t in types
                         if t.name == DEFAULT_SUPPORT_MEMBER_NAME)

        values['type'] = mtype.name
        comment = self.request.get('comment')
        complete.append('comment')
        values['comment'] = comment

        error_message = ''

        # Check if member exists;
        existing = Member.all().filter('email', email).fetch(1)

        if len(existing) > 0:
            incomplete.append('email')
            error_message = 'Det er allerede registrert noen i medlemsregisteret med denne epostadressen!'
            # TODO: Error message

        if len(incomplete) > 0:
            # missing field, redirect to signup page again
            template = JINJA_ENVIRONMENT.get_template(
                'templates/selfservice/signup.html')
            return self.response.write(
                template.render({
                    'countries': countries,
                    'incomplete': incomplete,
                    'complete': complete,
                    'error_message': error_message,
                    'values': values
                }))

        # invariant: fields are OK, create new member, send mail,
        # create payment history on member.
        template = JINJA_ENVIRONMENT.get_template(
            'templates/selfservice/signup_receipt.html')
        data = {'values': values, 'profile_url': PROFILE_URL}

        statuses = Status.all().fetch(100)

        # TODO: Handle existing members signing up again

        new_member = Member()

        new_member.name = name
        new_member.address = address
        new_member.zipcode = zipcode
        new_member.city = city
        new_member.notes = comment
        new_member.country = country
        new_member.membertype = mtype

        status = next(s for s in statuses if s.name == SIGNUP_STATUS_NAME)
        new_member.status = status

        new_member.number = dbutils.create_new_member_no()

        new_member.email = email
        new_member.member_since = datetime.date.today()
        if mobile:
            new_member.phone = mobile
        if work:
            new_member.phone_work = work
        if home:
            new_member.phone_home = home
        new_member.generate_access_code()
        new_member.member_since = datetime.date.today()
        new_member.member_type = mtype
        new_member.put()
        new_member.update_index()

        self.send_welcome_mail(new_member)
        self.send_notification_mails(new_member)

        # TODO: Invalidate counts for categories
        # Handle mutations on members gracefully

        return self.response.write(template.render(data))
예제 #10
0
    def post(self):
        complete = []
        incomplete = []
        values = {}

        # Holy crap this is ugly. There has to be a better way.

        name = self.request.get('name')
        if not name or name.strip() == '':
            incomplete.append('name')
        else:
            values['name'] = name
            complete.append('name')


        address = self.request.get('address')
        if not address or address.strip() == '':
            incomplete.append('address')
        else:
            values['address'] = address
            complete.append('address')


        zipcode = self.request.get('zip')
        if (not zipcode or zipcode.strip() == '') or len(zipcode.strip()) < 4:
            incomplete.append('zip')
        else:
            values['zip'] = zipcode
            complete.append('zip')


        city = self.request.get('city')
        if not city or city.strip() == '':
            incomplete.append('city')
        else:
            values['city'] = city
            complete.append('city')

        if 'zip' in incomplete or 'city' in incomplete:
            incomplete.append('zipcity')


        country_key = self.request.get('country').strip()
        country = Country.get(country_key)

        countries = Country.all().order('order').fetch(100)

        if not country or not country_key or country_key.strip() == '':
            incomplete.append('country')
            # retrieve countries since we're going to need them
        else:
            values['country'] = country.name
            complete.append('country')

        email = self.request.get('email')
        if not email or email.strip() == '' or not mail.is_email_valid(email):
            incomplete.append('email')
        else:
            values['email'] = email
            complete.append('email')

        mobile = self.request.get('mobile')
        if mobile and mobile.strip() == '':
            mobile = None
        values['mobile'] = mobile

        home = self.request.get('home')
        if home and home.strip() == '':
            home = None
        values['home'] = home

        work = self.request.get('work')
        if work and work.strip() == '':
            work = None
        values['work'] = work

        member_type = self.request.get('type')
        if not member_type or member_type.strip() == '':
            member_type = '1'

        types = MemberType.all().fetch(100)

        mtype = None

        # TODO: Custom settings? Constants at least.
        if member_type == '1':
            mtype = next(t for t in types if t.name == DEFAULT_MEMBER_NAME)
        else:
            mtype = next(t for t in types if t.name == DEFAULT_SUPPORT_MEMBER_NAME)

        values['type'] = mtype.name
        comment = self.request.get('comment')
        complete.append('comment')
        values['comment'] = comment

        error_message = ''

        # Check if member exists;
        existing = Member.all().filter('email', email).fetch(1)

        if len(existing) > 0:
            incomplete.append('email')
            error_message = 'Det er allerede registrert noen i medlemsregisteret med denne epostadressen!'
            # TODO: Error message

        if len(incomplete) > 0:
            # missing field, redirect to signup page again
            template = JINJA_ENVIRONMENT.get_template('templates/selfservice/signup.html')
            return self.response.write(template.render({
                'countries': countries,
                'incomplete': incomplete,
                'complete': complete,
                'error_message': error_message,
                'values': values }))

        # invariant: fields are OK, create new member, send mail,
        # create payment history on member.
        template = JINJA_ENVIRONMENT.get_template('templates/selfservice/signup_receipt.html')
        data = {
            'values': values,
            'profile_url': PROFILE_URL
        }

        statuses = Status.all().fetch(100)

        # TODO: Handle existing members signing up again

        new_member = Member()

        new_member.name = name
        new_member.address = address
        new_member.zipcode = zipcode
        new_member.city = city
        new_member.notes = comment
        new_member.country = country
        new_member.membertype = mtype

        status = next(s for s in statuses if s.name == SIGNUP_STATUS_NAME)
        new_member.status = status

        new_member.number = dbutils.create_new_member_no()

        new_member.email = email
        new_member.member_since = datetime.date.today()
        if mobile:
            new_member.phone = mobile
        if work:
            new_member.phone_work = work
        if home:
            new_member.phone_home = home
        new_member.generate_access_code()
        new_member.member_since = datetime.date.today()
        new_member.member_type = mtype
        new_member.put()

        self.send_welcome_mail(new_member)
        self.send_notification_mails(new_member)

        # TODO: Invalidate counts for categories
        # Handle mutations on members gracefully

        return self.response.write(template.render(data))
예제 #11
0
    def post(self, member_id):

        if self.request.get('cancel') == '1':
            return self.redirect('/members')

        if self.request.get('operation') == 'delete_car':
            car = Car.get(self.request.get('car_key'))
            if car:
                car.delete()
            return self.redirect('/members/' + member_id + '/edit')

        member = Member.get(member_id)

        if self.request.get('operation') == 'new_car':
            car = Car()
            car.member = member
            car.model = dbutils.get_default_model()
            car.registration = ''
            car.year = 0
            car.notes = ''
            car.serial_no = ''
            car.put()
            return self.redirect('/members/' + member_id + '/car/' + str(car.key()) + '/edit' )

        member.name = self.request.get('name')
        member.address = self.request.get('address')
        member.zipcode = self.request.get('zip')
        member.city = self.request.get('city')
        member.country = Country.get(self.request.get('country'))
        phone = self.request.get('mobile').strip()
        if phone != '':
            member.phone = db.PhoneNumber(phone)
        else:
            member.phone = None
        email = self.request.get('email').strip()
        if email != '':
            member.email = db.Email(email)
        else:
            member.email = None
        home = self.request.get('fixed').strip()
        if home != '':
            member.phone_home = db.PhoneNumber(home)
        else:
            member.phone_home = None
        work = self.request.get('work').strip()
        if work != '':
            member.phone_work = db.PhoneNumber(work)
        else:
            member.phone_work = None
        member.membertype = MemberType.get(self.request.get('type'))
        member.status = Status.get(self.request.get('status'))
        member.notes = self.request.get('note')

        if self.request.get('access_code') == '':
            member.generate_access_code()

        if self.request.get('magazine_count') != '':
            try:
                member.magazine_count = int(self.request.get('magazine_count'))
            except ValueError:
                pass

        member.put()
        member.update_index()

        # save membership dues
        self.save_dues(member)


        return self.redirect('/members')
예제 #12
0
def callback_router(bot, update, chat_data, user_data, job_queue):
    obj = json.loads(str(update.callback_query.data))
    user = User.from_update(update)

    try:
        if 'a' in obj:
            action = obj['a']

            # BOTLISTCHAT
            if action == CallbackActions.DELETE_CONVERSATION:
                botlistchat.delete_conversation(bot, update, chat_data)
            # HELP
            elif action == CallbackActions.HELP:
                help.help(bot, update)
            elif action == CallbackActions.CONTRIBUTING:
                help.contributing(bot, update)
            elif action == CallbackActions.EXAMPLES:
                help.examples(bot, update)
            # BASIC QUERYING
            elif action == CallbackActions.SELECT_CATEGORY:
                select_category(bot, update, chat_data)
            elif action == CallbackActions.SELECT_BOT_FROM_CATEGORY:
                category = Category.get(id=obj['id'])
                send_category(bot, update, chat_data, category)
            elif action == CallbackActions.SEND_BOT_DETAILS:
                item = Bot.get(id=obj['id'])
                send_bot_details(bot, update, chat_data, item)
            # FAVORITES
            elif action == CallbackActions.TOGGLE_FAVORITES_LAYOUT:
                value = obj['v']
                favorites.toggle_favorites_layout(bot, update, value)
            elif action == CallbackActions.ADD_FAVORITE:
                favorites.add_favorite_handler(bot, update)
            elif action == CallbackActions.REMOVE_FAVORITE_MENU:
                favorites.remove_favorite_menu(bot, update)
            elif action == CallbackActions.REMOVE_FAVORITE:
                to_remove = Favorite.get(id=obj['id'])
                bot_details = to_remove.bot
                to_remove.delete_instance()
                if obj.get('details'):
                    send_bot_details(bot, update, chat_data, bot_details)
                else:
                    favorites.remove_favorite_menu(bot, update)
            elif action == CallbackActions.SEND_FAVORITES_LIST:
                favorites.send_favorites_list(bot, update)
            elif action == CallbackActions.ADD_ANYWAY:
                favorites.add_custom(bot, update, obj['u'])
            elif action == CallbackActions.ADD_TO_FAVORITES:
                details = obj.get('details')
                discreet = obj.get('discreet', False) or details
                item = Bot.get(id=obj['id'])
                favorites.add_favorite(bot,
                                       update,
                                       item,
                                       callback_alert=discreet)
                if details:
                    send_bot_details(bot, update, chat_data, item)
            # ACCEPT/REJECT BOT SUBMISSIONS
            elif action == CallbackActions.APPROVE_REJECT_BOTS:
                custom_approve_list = [Bot.get(id=obj['id'])]
                admin.approve_bots(bot,
                                   update,
                                   override_list=custom_approve_list)
            elif action == CallbackActions.ACCEPT_BOT:
                to_accept = Bot.get(id=obj['id'])
                admin.edit_bot_category(bot, update, to_accept,
                                        CallbackActions.BOT_ACCEPTED)
                # Run in x minutes, giving the moderator enough time to edit bot details
                job_queue.run_once(
                    lambda b, job: botlistchat.
                    notify_group_submission_accepted(b, job, to_accept),
                    settings.BOT_ACCEPTED_IDLE_TIME * 60)
            elif action == CallbackActions.RECOMMEND_MODERATOR:
                bot_in_question = Bot.get(id=obj['id'])
                admin.recommend_moderator(bot, update, bot_in_question,
                                          obj['page'])
            elif action == CallbackActions.SELECT_MODERATOR:
                bot_in_question = Bot.get(id=obj['bot_id'])
                moderator = User.get(id=obj['uid'])
                admin.share_with_moderator(bot, update, bot_in_question,
                                           moderator)
                admin.approve_bots(bot, update, obj['page'])
            elif action == CallbackActions.REJECT_BOT:
                to_reject = Bot.get(id=obj['id'])
                notification = obj.get('ntfc', True)
                admin.reject_bot_submission(bot,
                                            update,
                                            to_reject,
                                            verbose=False,
                                            notify_submittant=notification)
                admin.approve_bots(bot, update, obj['page'])
            elif action == CallbackActions.BOT_ACCEPTED:
                to_accept = Bot.get(id=obj['bid'])
                category = Category.get(id=obj['cid'])
                admin.accept_bot_submission(bot, update, to_accept, category)
            elif action == CallbackActions.COUNT_THANK_YOU:
                new_count = obj.get('count', 1)
                basic.count_thank_you(bot, update, new_count)
            # ADD BOT
            # elif action == CallbackActions.ADD_BOT_SELECT_CAT:
            #     category = Category.get(id=obj['id'])
            #     admin.add_bot(bot, update, chat_data, category)
            # EDIT BOT
            elif action == CallbackActions.EDIT_BOT:
                to_edit = Bot.get(id=obj['id'])
                admin.edit_bot(bot, update, chat_data, to_edit)
            elif action == CallbackActions.EDIT_BOT_SELECT_CAT:
                to_edit = Bot.get(id=obj['id'])
                admin.edit_bot_category(bot, update, to_edit)
            elif action == CallbackActions.EDIT_BOT_CAT_SELECTED:
                to_edit = Bot.get(id=obj['bid'])
                cat = Category.get(id=obj['cid'])
                botproperties.change_category(bot, update, to_edit, cat)
                admin.edit_bot(bot, update, chat_data, to_edit)
            elif action == CallbackActions.EDIT_BOT_COUNTRY:
                to_edit = Bot.get(id=obj['id'])
                botproperties.set_country_menu(bot, update, to_edit)
            elif action == CallbackActions.SET_COUNTRY:
                to_edit = Bot.get(id=obj['bid'])
                if obj['cid'] == 'None':
                    country = None
                else:
                    country = Country.get(id=obj['cid'])
                botproperties.set_country(bot, update, to_edit, country)
                admin.edit_bot(bot, update, chat_data, to_edit)
            elif action == CallbackActions.EDIT_BOT_DESCRIPTION:
                to_edit = Bot.get(id=obj['id'])
                botproperties.set_text_property(bot, update, chat_data,
                                                'description', to_edit)
            elif action == CallbackActions.EDIT_BOT_EXTRA:
                to_edit = Bot.get(id=obj['id'])
                botproperties.set_text_property(bot, update, chat_data,
                                                'extra', to_edit)
            elif action == CallbackActions.EDIT_BOT_NAME:
                to_edit = Bot.get(id=obj['id'])
                botproperties.set_text_property(bot, update, chat_data, 'name',
                                                to_edit)
            elif action == CallbackActions.EDIT_BOT_USERNAME:
                to_edit = Bot.get(id=obj['id'])
                botproperties.set_text_property(bot, update, chat_data,
                                                'username', to_edit)
            # elif action == CallbackActions.EDIT_BOT_KEYWORDS:
            #     to_edit = Bot.get(id=obj['id'])
            #     botproperties.set_keywords_init(bot, update, chat_data, to_edit)
            elif action == CallbackActions.APPLY_ALL_CHANGES:
                to_edit = Bot.get(id=obj['id'])
                admin.apply_all_changes(bot, update, chat_data, to_edit)
            elif action == CallbackActions.EDIT_BOT_INLINEQUERIES:
                to_edit = Bot.get(id=obj['id'])
                value = bool(obj['value'])
                botproperties.toggle_value(bot, update, 'inlinequeries',
                                           to_edit, value)
                admin.edit_bot(bot, update, chat_data, to_edit)
            elif action == CallbackActions.EDIT_BOT_OFFICIAL:
                to_edit = Bot.get(id=obj['id'])
                value = bool(obj['value'])
                botproperties.toggle_value(bot, update, 'official', to_edit,
                                           value)
                admin.edit_bot(bot, update, chat_data, to_edit)
            elif action == CallbackActions.EDIT_BOT_OFFLINE:
                to_edit = Bot.get(id=obj['id'])
                value = bool(obj['value'])
                botproperties.toggle_value(bot, update, 'offline', to_edit,
                                           value)
                admin.edit_bot(bot, update, chat_data, to_edit)
            elif action == CallbackActions.EDIT_BOT_SPAM:
                to_edit = Bot.get(id=obj['id'])
                value = bool(obj['value'])
                botproperties.toggle_value(bot, update, 'spam', to_edit, value)
                admin.edit_bot(bot, update, chat_data, to_edit)
            elif action == CallbackActions.CONFIRM_DELETE_BOT:
                to_delete = Bot.get(id=obj['id'])
                botproperties.delete_bot_confirm(bot, update, to_delete)
            elif action == CallbackActions.DELETE_BOT:
                to_edit = Bot.get(id=obj['id'])
                botproperties.delete_bot(bot, update, to_edit)
                send_category(bot, update, to_edit.category)
            elif action == CallbackActions.ACCEPT_SUGGESTION:
                suggestion = Suggestion.get(id=obj['id'])
                components.botproperties.accept_suggestion(
                    bot, update, suggestion)
                admin.approve_suggestions(bot, update, page=obj['page'])
            elif action == CallbackActions.REJECT_SUGGESTION:
                suggestion = Suggestion.get(id=obj['id'])
                suggestion.delete_instance()
                admin.approve_suggestions(bot, update, page=obj['page'])
            elif action == CallbackActions.CHANGE_SUGGESTION:
                suggestion = Suggestion.get(id=obj['id'])
                botproperties.change_suggestion(bot,
                                                update,
                                                suggestion,
                                                page_handover=obj['page'])
            elif action == CallbackActions.SWITCH_SUGGESTIONS_PAGE:
                page = obj['page']
                admin.approve_suggestions(bot, update, page)
            elif action == CallbackActions.SWITCH_APPROVALS_PAGE:
                admin.approve_bots(bot, update, page=obj['page'])
            elif action == CallbackActions.SET_NOTIFICATIONS:
                set_notifications(bot, update, obj['value'])
            elif action == CallbackActions.NEW_BOTS_SELECTED:
                show_new_bots(bot, update, chat_data, back_button=True)
            elif action == CallbackActions.ABORT_SETTING_KEYWORDS:
                to_edit = Bot.get(id=obj['id'])
                admin.edit_bot(bot, update, chat_data, to_edit)
            # SENDING BOTLIST
            elif action == CallbackActions.SEND_BOTLIST:
                silent = obj.get('silent', False)
                re_send = obj.get('re', False)
                botlist.send_botlist(bot,
                                     update,
                                     resend=re_send,
                                     silent=silent)
            elif action == CallbackActions.RESEND_BOTLIST:
                botlist.send_botlist(bot, update, resend=True)
            # BROADCASTING
            elif action == 'send_broadcast':
                broadcasts.send_broadcast(bot, update, user_data)
            elif action == 'pin_message':
                broadcasts.pin_message(bot, update, obj['mid'])
            elif action == 'add_thank_you':
                basic.add_thank_you_button(bot, update, obj['cid'], obj['mid'])
            # EXPLORING
            elif action == CallbackActions.EXPLORE_NEXT:
                explore.explore(bot, update, chat_data)
    except Exception as e:
        traceback.print_exc()

        # get the callback action in plaintext
        actions = dict(CallbackActions.__dict__)
        a = next(k for k, v in actions.items() if v == obj.get('a'))
        util.send_md_message(
            bot, settings.ADMINS[0],
            "Exception in callback query for {}:\n{}\n\nWith CallbackAction {}\n\nWith data:\n{}"
            .format(user.markdown_short, util.escape_markdown(e),
                    util.escape_markdown(a), util.escape_markdown(str(obj))))
    finally:
        bot.answerCallbackQuery(update.callback_query.id)
        return ConversationHandler.END
예제 #13
0
    def post(self, member_id):

        if self.request.get('cancel') == '1':
            return self.redirect('/members')

        if self.request.get('operation') == 'delete_car':
            car = Car.get(self.request.get('car_key'))
            if car:
                car.delete()
            return self.redirect('/members/' + member_id + '/edit')

        member = Member.get(member_id)

        if self.request.get('operation') == 'new_car':
            car = Car()
            car.member = member
            car.model = dbutils.get_default_model()
            car.registration = ''
            car.year = 0
            car.notes = ''
            car.serial_no = ''
            car.put()
            return self.redirect('/members/' + member_id + '/car/' +
                                 str(car.key()) + '/edit')

        member.name = self.request.get('name')
        member.address = self.request.get('address')
        member.zipcode = self.request.get('zip')
        member.city = self.request.get('city')
        member.country = Country.get(self.request.get('country'))
        phone = self.request.get('mobile').strip()
        if phone != '':
            member.phone = db.PhoneNumber(phone)
        else:
            member.phone = None
        email = self.request.get('email').strip()
        if email != '':
            member.email = db.Email(email)
        else:
            member.email = None
        home = self.request.get('fixed').strip()
        if home != '':
            member.phone_home = db.PhoneNumber(home)
        else:
            member.phone_home = None
        work = self.request.get('work').strip()
        if work != '':
            member.phone_work = db.PhoneNumber(work)
        else:
            member.phone_work = None
        member.membertype = MemberType.get(self.request.get('type'))
        member.status = Status.get(self.request.get('status'))
        member.notes = self.request.get('note')

        if self.request.get('access_code') == '':
            member.generate_access_code()

        if self.request.get('magazine_count') != '':
            try:
                member.magazine_count = int(self.request.get('magazine_count'))
            except ValueError:
                pass

        member.put()
        member.update_index()

        # save membership dues
        self.save_dues(member)

        return self.redirect('/members')
예제 #14
0
 def get(self, country_key):
     template = JINJA_ENVIRONMENT.get_template('templates/countries/detail.html')
     country = Country.get(country_key)
     data = { 'country_key': country_key, 'country': country }
     self.response.write(template.render(data))