def scaffold_list_columns_respecting_roles(self):
    """ Respect a new view option, `role_only_columns`,
        in the list view. Must be a dictionary mapping
        between role names and columns which only users
        with this role are allowed to see. """
    columns = SQLAModelView.scaffold_list_columns(self)
    role_only_columns = self.role_only_columns or dict()
    super_only_columns = role_only_columns.get(SUPER_ROLE) or []
    if current_user and not current_user.has_role(SUPER_ROLE):
        columns = [c for c in columns if c not in super_only_columns]
    return columns
Ejemplo n.º 2
0
def init_admin(urlprefix="", secret="fKY7kJ2xSrbPC5yieEjV", override_admin=None, override_flaskadminapp=None):
    global adminapp, admin

    class TranslationInlineModelForm(InlineFormAdmin):
        form_columns = ('id', 'language', 'text')

    class ModelViewTranslationVariable(ModelView):
        column_list = ('name',)
        column_searchable_list = ('name',)
        inline_models = (TranslationInlineModelForm(Translation),)

        def __init__(self, session, **kwargs):
            super(ModelViewTranslationVariable, self).__init__(TranslationVariable, session, **kwargs)

    class ModelViewAchievementCategory(ModelView):
        column_list = ('name',)
        column_searchable_list = ('name',)
        form_excluded_columns = ('achievements',)
        fast_mass_delete = True

        def __init__(self, session, **kwargs):
            super(ModelViewAchievementCategory, self).__init__(AchievementCategory, session, **kwargs)

    class ModelViewAchievement(ModelView):
        column_list = (
        'name', 'evaluation', 'valid_start', 'valid_end', 'relevance', 'condition', 'operator', 'goal', 'timespan',
        'priority', 'achievement')
        column_searchable_list = ('name',)
        form_excluded_columns = ('rewards', 'subjects', 'goals', 'properties', 'updated_at', 'properties', 'triggers')
        fast_mass_delete = True

        def __init__(self, session, **kwargs):
            super(ModelViewAchievement, self).__init__(Achievement, session, **kwargs)

    class ModelViewVariable(ModelView):
        form_excluded_columns = ('values',)

        def __init__(self, session, **kwargs):
            super(ModelViewVariable, self).__init__(Variable, session, **kwargs)

    class AchievementTriggerStepInlineModelForm(InlineFormAdmin):
        form_columns = (
            'id',
            'step',
            'condition_type',
            'condition_percentage',
            'action_type',
            'action_translation',
            'action_subjecttype',
            'action_value',
            'action_variable'
        )

    class ModelViewAchievementTrigger(ModelView):
        form_columns = (
            'name',
            'achievement',
            'steps',
            'execute_when_complete',
        )
        inline_models = (AchievementTriggerStepInlineModelForm(AchievementTriggerStep),)

        def __init__(self, session, **kwargs):
            super(ModelViewAchievementTrigger, self).__init__(AchievementTrigger, session, **kwargs)

    class ModelViewValue(ModelView):
        # Disable model creation
        can_create = False
        can_edit = False
        can_delete = False

        # Override displayed fields
        column_list = ('subject', 'variable', 'datetime', 'key', 'value')

        fast_mass_delete = True

        def __init__(self, session, **kwargs):
            super(ModelViewValue, self).__init__(Value, session, **kwargs)

    class ModelViewProgress(ModelView):
        # Disable model creation
        can_create = False
        can_edit = False
        can_delete = False

        # Override displayed fields
        column_list = ('goal', 'subject', 'value', 'updated_at')

        column_filters = (IntEqualFilter(Subject.id, 'SubjectID'),
                          Achievement.id)

        fast_mass_delete = True

        def __init__(self, session, **kwargs):
            super(ModelViewProgress, self).__init__(Progress, session, **kwargs)

    class ModelViewAchievementProperty(ModelView):
        column_list = ('id', 'name')
        form_excluded_columns = ('achievements',)
        fast_mass_delete = True

        def __init__(self, session, **kwargs):
            super(ModelViewAchievementProperty, self).__init__(AchievementProperty, session, **kwargs)

    class ModelViewLanguage(ModelView):
        column_list = ('id', 'name')
        form_excluded_columns = ('subjects',)

        def __init__(self, session, **kwargs):
            super(ModelViewLanguage, self).__init__(Language, session, **kwargs)

    class ModelViewReward(ModelView):
        column_list = ('id', 'name')
        form_excluded_columns = ('achievements',)
        fast_mass_delete = True

        def __init__(self, session, **kwargs):
            super(ModelViewReward, self).__init__(Reward, session, **kwargs)

    class ModelViewSubject(ModelView):
        column_list = ('id', 'type', 'name', 'lat', 'lng', 'timezone', 'country', 'region', 'city', 'created_at')
        form_columns = ('name', 'type', 'timezone', 'language', 'lat', 'lng', 'additional_public_data')
        fast_mass_delete = True

        def __init__(self, session, **kwargs):
            super(ModelViewSubject, self).__init__(Subject, session, **kwargs)

    class ClearCacheForm(Form):
        clear_check = BooleanField(label="Delete all caches?")

    class MaintenanceView(BaseView):
        @expose('/', methods=('GET', 'POST',))
        def index(self):
            self._template_args['msgs'] = []
            self._template_args['clear_caches_form'] = self.clear_caches_form = ClearCacheForm(request.form)

            if request.method == 'POST':
                from gengine.app.cache import clear_all_caches
                if self.clear_caches_form.clear_check.data:
                    clear_all_caches()
                    self._template_args['msgs'].append("All caches cleared!")
            return self.render(template="admin_maintenance.html")

    class ModelViewAuthUser(ModelView):
        column_list = ('id', 'subject_id', 'email', 'active', 'created_at')
        form_columns = ('subject_id', 'email', 'password', 'active', 'roles')
        column_labels = {'password': '******'}

        def __init__(self, session, **kwargs):
            super(ModelViewAuthUser, self).__init__(AuthUser, session, **kwargs)

    class PermissionInlineModelForm(InlineFormAdmin):
        form_columns = ('id', 'name')
        form_choices = {
            "name": sorted(list(yield_all_perms()), key=lambda x: x[1])
        }

    class ModelViewAuthRole(ModelView):
        column_list = ('id', 'name', 'permissions')
        form_excluded_columns = ('users',)
        inline_models = (PermissionInlineModelForm(AuthRolePermission),)

        def __init__(self, session, **kwargs):
            super(ModelViewAuthRole, self).__init__(AuthRole, session, **kwargs)

    class ModelViewSubjectMessage(ModelView):
        column_list = ('subject', 'text', 'created_at', 'is_read')
        column_details_list = ('subject', 'text', 'created_at', 'is_read', 'params')
        can_edit = False
        can_view_details = True

        def __init__(self, session, **kwargs):
            super(ModelViewSubjectMessage, self).__init__(SubjectMessage, session, **kwargs)

    from gengine.app.registries import get_task_registry
    enginetasks = get_task_registry().registrations

    class ModelViewTask(ModelView):
        can_view_details = True

        column_list = ('entry_name', 'task_name', 'config', 'cron')
        column_details_list = (
        'id', 'entry_name', 'task_name', 'config', 'cron', 'is_removed', 'is_auto_created', 'is_manually_modified')
        form_excluded_columns = ('is_removed', 'is_auto_created', 'is_manually_modified', 'executions')
        form_choices = {'task_name': [
            (x, x) for x in enginetasks.keys()
        ]}

        def __init__(self, session, **kwargs):
            super(ModelViewTask, self).__init__(Task, session, **kwargs)

        @action('execute', 'Execute now', 'Are you sure you want to execute the selected task?')
        def action_execute(self, ids):
            from gengine.metadata import DBSession
            from gengine.app.model import t_tasks, t_taskexecutions
            from gengine.app.registries import get_task_registry
            tasks = DBSession.execute(
                t_tasks.select().where(t_tasks.c.id.in_(*ids))
            ).fetchall()

            for task in tasks:
                result = get_task_registry().execute(
                    name=task["task_name"],
                    config=task["config"]
                )
                logged = result.get("log", None)
                success = result.get("success", True)

                DBSession.bind.execute(
                    t_taskexecutions.insert().values({
                        'task_id': task["id"],
                        'planned_at': dt_now(),
                        'finished_at': dt_now(),
                        'log': logged,
                        'success': success
                    })
                )

            flash("Executed")

    class ModelViewTaskExecution(ModelView):
        column_list = ('task.entry_name', 'task.task_name', 'planned_at', 'finished_at', 'success')
        column_details_list = ('id', 'task.entry_name', 'task.task_name', 'planned_at', 'finished_at', 'success', 'log')
        can_create = False
        can_edit = False
        can_view_details = True

        def __init__(self, session, **kwargs):
            super(ModelViewTaskExecution, self).__init__(TaskExecution, session, **kwargs)

    class ModelViewSubjectType(ModelView):
        column_list = ('id', 'name')
        form_columns = ('name', 'part_of_types')
        can_view_details = True

        def __init__(self, session, **kwargs):
            super(ModelViewSubjectType, self).__init__(SubjectType, session, **kwargs)

    if not override_flaskadminapp:
        adminapp = Flask(__name__)
        adminapp.debug = True
        adminapp.secret_key = secret
        adminapp.config.update(dict(
            PREFERRED_URL_SCHEME='https'
        ))
    else:
        adminapp = override_flaskadminapp

    # lets add our template directory
    my_loader = jinja2.ChoiceLoader([
        adminapp.jinja_loader,
        jinja2.FileSystemLoader(resole_uri("gengine:app/templates")),
    ])

    adminapp.jinja_loader = my_loader

    adminapp.add_url_rule('/static_gengine/<path:filename>',
                          endpoint='static_gengine',
                          view_func=get_static_view('gengine:app/static', adminapp))

    @adminapp.context_processor
    def inject_version():
        return {"gamification_engine_version": pkg_resources.get_distribution("gamification-engine").version,
                "settings_enable_authentication": asbool(get_settings().get("enable_user_authentication", False)),
                "urlprefix": get_settings().get("urlprefix", "/"),
                "jsmain": get_jsmain(),
                "cssmain": get_cssmain()
                }

    if not override_admin:
        admin = Admin(adminapp,
                      name="Gamification Engine - Admin Control Panel",
                      base_template='admin_layout.html',
                      url=urlprefix + ""
                      )
    else:
        admin = override_admin

    admin.add_view(ModelViewAchievement(DBSession, category="Rules"))
    admin.add_view(ModelViewAchievementTrigger(DBSession, category="Rules"))

    admin.add_view(
        ModelView(AchievementAchievementProperty, DBSession, category="Rules", name="Achievement Property Values"))
    admin.add_view(ModelView(AchievementReward, DBSession, category="Rules", name="Achievement Reward Values"))
    admin.add_view(ModelViewTranslationVariable(DBSession, category="Rules"))
    admin.add_view(ModelView(Translation, DBSession, category="Rules"))

    admin.add_view(ModelViewAchievementCategory(DBSession, category="Settings"))
    admin.add_view(ModelViewVariable(DBSession, category="Settings"))
    admin.add_view(ModelViewAchievementProperty(DBSession, category="Settings", name="Achievement Property Types"))
    admin.add_view(ModelViewReward(DBSession, category="Settings", name="Achievement Reward Types"))
    admin.add_view(ModelViewLanguage(DBSession, category="Settings"))
    admin.add_view(ModelViewTask(DBSession, category="Settings"))
    admin.add_view(ModelViewTaskExecution(DBSession, category="Settings"))
    admin.add_view(MaintenanceView(name="Maintenance", category="Settings", url="maintenance"))

    admin.add_view(ModelViewAuthUser(DBSession, category="Authentication"))
    admin.add_view(ModelViewAuthRole(DBSession, category="Authentication"))

    admin.add_view(ModelViewSubjectType(DBSession, category="Subjects"))

    admin.add_view(ModelViewValue(DBSession, category="Debug"))
    admin.add_view(ModelViewProgress(DBSession, category="Debug"))
    admin.add_view(ModelViewSubject(DBSession, category="Subjects"))
    admin.add_view(ModelView(Evaluation, DBSession, category="Debug"))
    admin.add_view(ModelViewSubjectMessage(DBSession, category="Debug"))

    from gengine.app.registries import get_admin_extension_registry
    get_admin_extension_registry().run_extensions(adminapp=adminapp, admin=admin)

    class GroupAssignmentView(BaseView):
        @expose('/', methods=('GET', 'POST'))
        def index(self):
            return self.render(template='jscomponent.html', component="GroupAssignment")

    admin.add_view(GroupAssignmentView(name='Assign Subjects', endpoint='group_assignment', category="Subjects"))

    class LeaderboardCreationView(BaseView):
        @expose('/', methods=('GET', 'POST'))
        def index(self):
            return self.render(template='jscomponent.html', component="LeaderboardCreation")

    admin.add_view(
        LeaderboardCreationView(name='Create Leaderboards', endpoint='leaderboard_creation', category="Rules"))
Ejemplo n.º 3
0
 def __init__(self, *args, **kwargs):
     ModelView.__init__(self,
                        model=Comment,
                        session=Model._session,
                        *args,
                        **kwargs)
Ejemplo n.º 4
0
 def __init__(self, *args, **kwargs):
     ModelView.__init__(self,
                        model=Category,
                        session=Model._session,
                        *args,
                        **kwargs)
Ejemplo n.º 5
0
 def __init__(self, *args, **kwargs):
     ModelView.__init__(self,
                        model=ProductImage,
                        session=Model._session,
                        *args,
                        **kwargs)
Ejemplo n.º 6
0
from flask_bootstrap import Bootstrap
from models import Post, Category, User
from flask_sqlalchemy import  SQLAlchemy
from forms import loginForm, signupForm, categoryForm, contactForm, searchForm, categories_,postForm
from flask_admin import Admin
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import LoginManager, login_required, login_user, logout_user, current_user
from models import db, app


Bootstrap(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'

admin = Admin(app)
admin.add_view(ModelView(User, db.session))
admin.add_view(ModelView(Category, db.session))
admin.add_view(ModelView(Post, db.session))


@login_manager.user_loader
def load(user_id):
    return User.query.get(int(user_id))


###########################################################################################

########################################################################################
def format_date(t):
    t = datetime.strptime(t[:-7], '%Y-%m-%d %H:%M:%S%f')
    f_t = datetime.strftime(t, '%B %d, %Y at %I:%M %p')
Ejemplo n.º 7
0
            app.logger.addHandler(stream_handler)
        else:
            if not os.path.exists('logs'):
                os.mkdir('logs')
            file_handler = RotatingFileHandler('logs/microblog.log',
                                               maxBytes=10240,
                                               backupCount=10)
            file_handler.setFormatter(
                logging.Formatter('%(asctime)s %(levelname)s: %(message)s '
                                  '[in %(pathname)s:%(lineno)d]'))
            file_handler.setLevel(logging.INFO)
            app.logger.addHandler(file_handler)

        app.logger.setLevel(logging.INFO)
        app.logger.info('Microblog startup')

    return app


# @babel.localeselector
# def get_locale():
#     # return request.accept_languages.best_match(current_app.config['LANGUAGES'])
#     return 'ru'

from app import models
from flask_admin.contrib.sqla.view import ModelView
admin.add_view(ModelView(models.User, db.session))
admin.add_view(ModelView(models.Post, db.session))
admin.add_view(ModelView(models.Message, db.session))
admin.add_view(ModelView(models.Notification, db.session))
admin.add_view(ModelView(models.Task, db.session))
Ejemplo n.º 8
0
def register_admin(app):
    """ Register admin views """
    admin = Admin(app, name='Admin', template_mode='bootstrap3')
    admin.add_view(ModelView(BaseCurrency, db.session))
    admin.add_view(ModelView(CurrencyRate, db.session))
Ejemplo n.º 9
0

# Customized Role model for SQL-Admin
class RoleAdmin(sqla.ModelView):

    # Prevent administration of Roles unless the currently logged-in user has the "admin" role
    def is_accessible(self):
        return current_user.has_role('admin')

# Initialize Flask-Admin
admin = Admin(app)

# Add Flask-Admin views for Users and Roles
admin.add_view(UserAdmin(User, db.session))
admin.add_view(RoleAdmin(Role, db.session))
admin.add_view(ModelView(bookdata, db.session))
admin.add_view(ModelView(orders, db.session))
admin.add_view(ModelView(wishlist, db.session))

@app.before_first_request
def create_user():
    try:
        db.create_all()
        admin_user=user_datastore.create_user(email='*****@*****.**', username='******', password='******', last_login_at=datetime.now(), \
            current_login_at=datetime.now(), last_login_ip=request.environ.get('HTTP_X_REAL_IP', request.remote_addr), current_login_ip=request.environ.get('HTTP_X_REAL_IP', request.remote_addr), login_count=0, confirmed_at=datetime.now() )
        admin=user_datastore.find_or_create_role('admin')
        user=user_datastore.find_or_create_role('user')
        user_datastore.add_role_to_user(admin_user, admin)
        db.session.commit()
    except:
        pass
Ejemplo n.º 10
0
 def __init__(self,*args,**kwargs):
     ModelView.__init__(self,model=Category,session=Category._session,*args,**kwargs)
Ejemplo n.º 11
0
 def __init__(self,*args,**kwargs):
     ModelView.__init__(self,model=Page,session=Page._session,*args,**kwargs)
Ejemplo n.º 12
0
def init_admin(urlprefix="",
               secret="fKY7kJ2xSrbPC5yieEjV",
               override_admin=None,
               override_flaskadminapp=None):
    global adminapp, admin

    if not override_flaskadminapp:
        adminapp = Flask(__name__)
        adminapp.debug = True
        adminapp.secret_key = secret
        adminapp.config.update(dict(PREFERRED_URL_SCHEME='https'))
    else:
        adminapp = override_flaskadminapp

    # lets add our template directory
    my_loader = jinja2.ChoiceLoader([
        adminapp.jinja_loader,
        jinja2.FileSystemLoader(resole_uri("gengine:app/templates")),
    ])

    adminapp.jinja_loader = my_loader

    adminapp.add_url_rule('/static_gengine/<path:filename>',
                          endpoint='static_gengine',
                          view_func=get_static_view('gengine:app/static',
                                                    adminapp))

    @adminapp.context_processor
    def inject_version():
        return {
            "gamification_engine_version":
            pkg_resources.get_distribution("gamification-engine").version,
            "settings_enable_authentication":
            asbool(get_settings().get("enable_user_authentication", False)),
            "urlprefix":
            get_settings().get("urlprefix", "/")
        }

    if not override_admin:
        admin = Admin(adminapp,
                      name="Gamification Engine - Admin Control Panel",
                      base_template='admin_layout.html',
                      url=urlprefix + "")
    else:
        admin = override_admin

    admin.add_view(ModelViewAchievement(DBSession, category="Rules"))
    admin.add_view(ModelViewGoal(DBSession, category="Rules"))
    admin.add_view(ModelViewGoalTrigger(DBSession, category="Rules"))

    admin.add_view(
        ModelView(AchievementAchievementProperty,
                  DBSession,
                  category="Rules",
                  name="Achievement Property Values"))
    admin.add_view(
        ModelView(AchievementReward,
                  DBSession,
                  category="Rules",
                  name="Achievement Reward Values"))
    admin.add_view(
        ModelView(GoalGoalProperty,
                  DBSession,
                  category="Rules",
                  name="Goal Property Values"))
    admin.add_view(ModelViewTranslationVariable(DBSession, category="Rules"))
    admin.add_view(ModelView(Translation, DBSession, category="Rules"))

    admin.add_view(ModelViewAchievementCategory(DBSession,
                                                category="Settings"))
    admin.add_view(ModelViewVariable(DBSession, category="Settings"))
    admin.add_view(
        ModelViewAchievementProperty(DBSession,
                                     category="Settings",
                                     name="Achievement Property Types"))
    admin.add_view(
        ModelViewReward(DBSession,
                        category="Settings",
                        name="Achievement Reward Types"))
    admin.add_view(
        ModelViewGoalProperty(DBSession,
                              category="Settings",
                              name="Goal Property Types"))
    admin.add_view(ModelView(Language, DBSession, category="Settings"))
    admin.add_view(
        MaintenanceView(name="Maintenance",
                        category="Settings",
                        url="maintenance"))

    admin.add_view(ModelViewAuthUser(DBSession, category="Authentication"))
    admin.add_view(ModelViewAuthRole(DBSession, category="Authentication"))

    admin.add_view(ModelViewValue(DBSession, category="Debug"))
    admin.add_view(ModelViewGoalEvaluationCache(DBSession, category="Debug"))
    admin.add_view(ModelViewUser(DBSession, category="Debug"))
    admin.add_view(ModelView(AchievementUser, DBSession, category="Debug"))
    admin.add_view(ModelViewUserMessage(DBSession, category="Debug"))