Example #1
0
def on_identity_loaded(sender, identity):
    identity.user = current_user
    if hasattr(current_user, 'role'):
        if current_user.get_role() == customer:
            identity.provides.add(customer_role)
        if current_user.get_role() == member:
            identity.provides.add(customer_role)
            identity.provides.add(member_role)
        if current_user.get_role() == admin:
            identity.provides.add(customer_role)
            identity.provides.add(member_role)
            identity.provides.add(admin_role)
Example #2
0
def get_current_user_dashboard():
    """
    Returns a url_for object, for the current
    user's dashboard page.
    """
    # Redirect them to their dashboard page.
    if current_user.get_role() == "STU":
        # Student
        return url_for('student.dashboard')
    elif current_user.get_role() == "STA":
        # Staff
        return url_for('staff.dashboard')
    elif current_user.get_role() == "TUT":
        # Tutor
        return url_for('tutor.dashboard')
Example #3
0
def staged_files():
    if current_user.get_role() == "Site Admin":
        return redirect(url_for("content.activity"))

    path = request.url_root
    if path.startswith("http://"):
        path = path.replace("http://", "")

    if path.startswith("https://"):
        path = path.replace("https://", "")

    if path.endswith("/"):
        path = path[:-1]

    if ":" in path:
        splitz = path.split(":")
        # if path.startswith("https://"):
        #     path = splitz[0] + ":" + splitz[1]
        # else:
        path = splitz[0]

    # TODO: Can make this a config option that allows us to exclude certain addresses for external port config
    # Allows us to have a different port for LAN and WAN - may be necessary with certain configs
    if path.startswith("10") or path.startswith("127"):
        port = "22"
    else:
        port = current_app.config["EXTERNAL_SFTP_PORT"]

    return render_template("staged_files.html", title="My Files", path=path, port=port)
Example #4
0
def display_pipeline_instances(page=1):
    if current_user.get_role() == "Site Admin":
        obs = PipelineInstance.query.paginate(page=page, per_page=20)
    else:
        obs = current_user.group.pipeline_instances.paginate(page=page, per_page=20)

    return render_template("pipeline_instances.html", title="Pipeline Instances", page=page, obs=obs)
Example #5
0
def index():
    if current_user.is_authenticated():
        if current_user.get_role() == "1":
            appslist = UserDetail.query.filter_by(uid=current_user.get_id()).order_by(db.desc(UserDetail.website))
            return render_template("index.html", appslist=appslist)

    return render_template("welcome.html")
Example #6
0
def remove_document(oid="", did=""):
    if current_user.get_role() == "Site Admin":
        return redirect(url_for("content.activity"))

    if oid == "" or did == "":
        flash("Incorrect arguments for query provided", "error")
        return redirect(url_for("index"))

    doc = None
    pro = None
    projects = current_user.group.projects.all()
    for project in projects:
        documents = project.documents
        for document in documents:
            if document.display_key == did:
                doc = document
                pro = project

    if doc is None:
        flash("Incorrect arguments for query provided", "error")
        return redirect(url_for("index"))

    filepath = os.path.join(os.path.join(utils.get_path("project_data", "webserver"), pro.display_key), doc.name)
    if os.path.exists(filepath):
        os.remove(filepath)

    doc.delete()
    return redirect(url_for("manage.project", oid=oid))
Example #7
0
def restart_pipeline(oid="", force=0):
    if current_user.get_role() == "Site Admin":
        return redirect(url_for("content.activity"))

    if force != 1:
        return render_template("confirm.html",
                               message="Are you sure you wish to restart the current pipeline?",
                               oid=oid,
                               url="pipelines.restart_pipeline")

    if oid == "":
        flash("Could not load the provided pipeline instance", "error")
        return redirect(url_for("empty"))

    pipeline_instance = current_user.group.pipeline_instances.filter_by(display_key=oid).first()
    if pipeline_instance is None:
        flash("Could not load the provided pipeline instance", "error")
        return redirect(url_for("empty"))

    pipeline_instance.update(current_execution_status="STOPPED")

    # TODO - If module is running parse for job id and kill all

    data_source = pipeline_instance.data_consignor
    data_source.run_pipelines.append(pipeline_instance)
    data_source.update(running_pipeline=None)

    flash("The previous pipeline has been removed, follow the instructions below to restart.", "success")
    return redirect(url_for("pipelines.build_pipeline_instance",
                            pid=pipeline_instance.pipeline.display_key,
                            oid=data_source.display_key,
                            runtime_type=data_source.type))
Example #8
0
 def decorated_view(*args, **kwargs):
     if not current_user.is_authenticated():
         return current_app.login_manager.unauthorized()
     urole = current_user.get_role()
     if ( (urole != role) and (role != "ANY")):
         flash(u'Du har inte behörighet att göra detta.', 'primary')
         return redirect(url_for("index"))
     return fn(*args, **kwargs)
Example #9
0
        def decorated_view(*args, **kwargs):
            if not current_user.is_authenticated or \
                    not current_user.is_authenticated():
                return current_app.login_manager.unauthorized()

            urole = current_user.get_role()
            if (roles and (urole not in roles)):
                flask_abort(403)
            return fn(*args, **kwargs)
Example #10
0
def index():
    if current_user.is_authenticated():
        if current_user.get_role() == '1':
            appslist = userdetail.query \
                                 .filter_by(uid=current_user.get_id()) \
                                 .order_by(db.desc(userdetail.website))
            return render_template('index.html', appslist=appslist)

    return render_template('welcome.html')
Example #11
0
        def decorated_view(*args, **kwargs):
            if not current_user.is_authenticated or \
                    not current_user.is_authenticated():
                return current_app.login_manager.unauthorized()

            urole = current_user.get_role()
            if (roles and (urole not in roles)):
                flask_abort(403)
            return fn(*args, **kwargs)
Example #12
0
def index():
    if current_user.is_authenticated():
        if current_user.get_role() == '1':
            appslist = UserDetail.query \
                                 .filter_by(uid=current_user.get_id()) \
                                 .order_by(db.desc(UserDetail.website))
            return render_template('index.html', appslist=appslist)

    return render_template('welcome.html')
Example #13
0
def on_identity_loaded(sender,identity):
    identity.user = current_user

    identity.provides.add(UserNeed(current_user.get_id()))

    for role in current_user.get_role():
        identity.provides.add(RoleNeed(role))
    
    for project in current_user.get_project():
        identity.provides.add(edit_project_need(project))
Example #14
0
def submissions(page=1):
    if current_user.get_role() == "Site Admin":
        items = Submission.query.filter_by(validated=True)
    else:
        items = current_user.group.submissions.filter_by(validated=True)

    if items is not None:
        items = items.paginate(page=page, per_page=20)

    return render_template("submissions.html", title="Submissions", page=page, obs=items)
Example #15
0
def data_groups(page=1):
    if current_user.get_role() == "Site Admin":
        items = DataGroup.query.filter(DataGroup.pipeline_source != None)
    else:
        items = current_user.group.data_groups.filter(DataGroup.pipeline_source != None)

    if items is not None:
        items = items.paginate(page=page, per_page=20)

    return render_template("data_groups.html", title="Data Groups", page=page, obs=items)
Example #16
0
def projects(page=1):
    if current_user.get_role() == "Site Admin":
        items = Project.query
    else:
        items = current_user.group.projects

    if items is not None:
        items = items.paginate(page=page, per_page=20)

    return render_template("projects.html", title="Projects", page=page, obs=items)
Example #17
0
def samples(page=1):
    if current_user.get_role() == "Site Admin":
        items = Sample.query
    else:
        items = current_user.group.samples

    if items is not None:
        items = items.paginate(page=page, per_page=20)

    return render_template("samples.html", title="Samples", page=page, obs=items)
Example #18
0
        def decorated_view(*args, **kwargs):

            if current_app.login_manager._login_disabled:
                return func(*args, **kwargs)

            if not current_user.is_authenticated():
                return current_app.login_manager.unauthorized()

            if (len(roles) > 0) and (current_user.get_role() not in roles):
                logout_user()
                return current_app.login_manager.unauthorized()
            return func(*args, **kwargs)
Example #19
0
        def decorated_view(*args, **kwargs):

            if current_app.login_manager._login_disabled:
                return func(*args, **kwargs)

            if not current_user.is_authenticated():
                return current_app.login_manager.unauthorized()

            usuario_role = current_user.get_role()
            if (len(roles) > 0) and (usuario_role not in roles):
                logout_user()
                return current_app.login_manager.unauthorized()
            return func(*args, **kwargs)
Example #20
0
        def decorated_view(*args, **kwargs):
            # Ensure the current user is actually authenticated.
            if not current_user.is_authenticated:
                # The user is not authenticated.
                return login_manager.unauthorized()
            
            # If roles has been set to a list or tuple.
            if roles and isinstance(roles, (list, tuple)):
                # Check that the user's role is in roles.
                user_role = current_user.get_role()
                if user_role not in roles:
                    return unauthorized_role()

            return func(*args, **kwargs)
Example #21
0
def display_pipeline_instance(oid=""):
    if oid == "":
        flash("Could not identify the provided pipeline run", "warning")
        return redirect(url_for("index"))

    if current_user.get_role() == "Site Admin":
        pipeline_instance = PipelineInstance.query.filter_by(display_key=oid).first()
    else:
        pipeline_instance = current_user.group.pipeline_instances.filter_by(display_key=oid).first()

    if pipeline_instance is None:
        flash("Could not locate the provided pipeline instance", "warning")
        return redirect(url_for("empty"))

    return render_template("pipeline_instance.html", title="Pipeline Instance", pipeline_instance=pipeline_instance)
Example #22
0
def add_detail():
    if current_user.get_role() == '1':
        form = DetailForm()
        if form.validate_on_submit():
            _detail = UserDetail(form.name.data, form.street.data,
                                 form.city.data, form.phone.data,
                                 form.website.data, date.today(),
                                 current_user.get_id())
            _detail.date = datetime.now()
            db.session.add(_detail)
            db.session.commit()
            flash(u'Your details were submitted succsessfully.')
            return redirect(url_for('index'))
        return render_template('add_detail.html', form=form)
    return redirect(url_for('index'))
Example #23
0
def sample(oid=""):
    if oid == "":
        flash("Could not locate the provided sample", "warning")
        return redirect(url_for("empty"))

    if current_user.get_role() == "Site Admin":
        sample = Sample.query.filter_by(display_key=oid).first()
    else:
        sample = current_user.group.samples.filter_by(display_key=oid).first()

    if sample is None:
        flash("Could not locate the provided sample", "warning")
        return redirect(url_for("empty"))

    return render_template("sample.html", title="Sample " + sample.name, sample=sample)
Example #24
0
def module_instance(pid="", oid=""):
    if pid == "" or oid == "":
        flash("No instance identifiers were provided.", "warning")
        return redirect(url_for("empty"))

    if current_user.get_role() == "Site Admin":
        pipeline_instance = PipelineInstance.query.filter_by(display_key=pid).first()
    else:
        pipeline_instance = current_user.group.pipeline_instances.filter_by(display_key=pid).first()

    if pipeline_instance is None:
        flash("Could not identify the module parent", "warning")
        return redirect(url_for("index"))

    m_instance = None
    module_instances = pipeline_instance.module_instances.all()
    for module_instance in module_instances:
        if module_instance.display_key == oid:
            m_instance = module_instance
            break

    if m_instance is None:
        flash("Could not locate the provided module instance", "warning")
        return redirect(url_for("empty"))

    # Conditionally index the module files so that we can view them on the web page whilst executing - if the module is done (for whatever reason) instead, make use of the indexed files
    files = []
    if pipeline_instance.current_execution_status != "FINISHED" and pipeline_instance.current_execution_status != "STOPPED" and pipeline_instance.current_execution_status != "ERROR":
        local_pipeline_directory = os.path.join(utils.get_path("pipeline_data", "webserver"), pipeline_instance.display_key)
        local_module_directory = os.path.join(os.path.join(local_pipeline_directory, "modules_output"), m_instance.module.name)
        filepaths = next(os.walk(local_module_directory))
        for file in filepaths[1]:
            path = os.path.join(os.path.join(os.path.join(pipeline_instance.display_key, "modules_output"), m_instance.display_key), file)
            files.append({
                "name": file,
                "path": path
            })

        for file in filepaths[2]:
            path = os.path.join(local_module_directory, file)
            files.append({
                "name": file,
                "path": path
            })

    return render_template("module_instance.html", title="Module Instance", module_instance=m_instance, files=files)
Example #25
0
def new_project():
    if current_user.get_role() == "Site Admin":
        return redirect(url_for("content.activity"))

    from biocomputedm.manage import forms
    form = forms.NewProjectForm()
    if request.method == "GET":
        return render_template("new_project.html", title="New Project", form=form)

    else:
        if form.validate_on_submit():
            project = Project.create(name=str(form.investigation_name.data), description=str(form.investigation_description.data), creator=current_user)
            utils.make_directory(os.path.join(utils.get_path("project_data", "webserver"), project.display_key))
            flash("Project successfully registered.", "info")
            return redirect(url_for("manage.project", oid=project.display_key))

        return render_template("new_project.html", title="New Project", form=form)
Example #26
0
def show_users(page=1, oid=""):
    if current_user.get_role() == "Site Admin":
        u = Person.query.paginate(page=page, per_page=20)

    else:
        if oid != "":
            p = current_user.group.members.filte_by(display_key=oid).first()
            if p is not None:
                p.set_role("Group Admin")
                p.save()

        if current_user.type == "Customer":
            u = current_user.group.members.order_by(Person.role).paginate(page=page, per_page=20)

        else:
            u = current_user.group.members.order_by(Person.role).paginate(page=page, per_page=20)

    return render_template("people.html", title="Users", page=page, obs=u)
Example #27
0
def add_document(oid=""):
    if current_user.get_role() == "Site Admin":
        return redirect(url_for("content.activity"))

    if oid == "":
        flash("Incorrect arguments for query provided", "error")
        return redirect(url_for("index"))

    project = current_user.group.projects.filter_by(display_key=oid).first()
    if project is None:
        flash("Could not identify the provided project.", "error")
        return redirect(url_for("index"))

    from biocomputedm.manage import forms
    form = forms.AddDocumentForm()
    if request.method == "POST":
        if form.validate_on_submit():
            # Handle maliciously named files (i.e. ../..)
            from werkzeug.utils import secure_filename
            filename = secure_filename(form.file_upload.data.filename).replace(" ", "_")
            filepath = os.path.join(os.path.join(utils.get_path("project_data", "webserver"), project.display_key),
                                    filename)

            # Handle a document already existing
            if os.path.exists(filepath):
                flash("A document with this location (i.e. filename) already exists", "error")
                return redirect(url_for("projects"))

            # Save the file to the given path
            form.file_upload.data.save(filepath)

            # Save the document to the db
            document = Document.create(name=filename, description=str(form.description.data))
            project.documents.append(document)
            project.save()

            # Inform and redirect
            flash("Document uploaded successfully", "success")
            return redirect(url_for("manage.project", oid=oid))

    # Fail scenario
    return render_template("add_document.html", title="Add Document", form=form, oid=oid)
Example #28
0
def add_detail():
    if current_user.get_role() == '1':
        form = DetailForm()
        if form.validate_on_submit():
            _detail = UserDetail(
                form.name.data,
                form.street.data,
                form.city.data,
                form.phone.data,
                form.website.data,
                date.today(),
                current_user.get_id()
            )
            _detail.date = datetime.now()
            db.session.add(_detail)
            db.session.commit()
            flash(u'Your details were submitted succsessfully.')
            return redirect(url_for('index'))
        return render_template('add_detail.html', form=form)
    return redirect(url_for('index'))
Example #29
0
def delete_sample(oid="", force=0):
    if force != 1:
        return render_template(
            "confirm.html",
            message="Are you sure you wish to remove this sample?",
            oid=oid,
            url="manage.delete_sample"
        )

    if oid == "":
        flash("No instance identifiers were provided.", "warning")
        return redirect(url_for("empty"))

    if current_user.get_role() == "Site Admin":
        sample = Sample.query.filter_by(display_key=oid).first()
    else:
        flash("You do not have permission to do this.", "warning")
        return redirect(url_for("index"))

    if sample is None:
        flash("Could not identify the sample", "warning")
        return redirect(url_for("index"))

    for data in sample.data:
        data_group = data.data_group
        data.delete()
        if data_group.data is None or not data_group.data:
            data_group.delete()

    sample.delete()

    subprocess.Popen(
        [
            "sudo",
            os.path.join(os.path.join(utils.get_path("scripts", "webserver"), "io"), "delete.sh"),
            "-s=" + os.path.join(utils.get_path("sample_data", "webserver"), oid)
        ]
    )

    flash("Sample was deleted successfully", "success")
    return redirect(url_for("manage.samples"))
Example #30
0
def project(oid="", did=""):
    if oid == "":
        flash("Could not identify the provided project.", "error")
        return redirect(url_for("index"))

    if current_user.get_role() == "Site Admin":
        project = Project.query.filter_by(display_key=oid).first()

    else:
        project = current_user.group.projects.filter_by(display_key=oid).first()

    if project is None:
        flash("Could not identify the provided project.", "error")
        return redirect(url_for("index"))

    if did != "":
        for document in project.documents:
            if document.display_key == did:
                return send_from_directory(os.path.join(utils.get_path("project_data", "webserver"), project.display_key), document.name, as_attachment=True, attachment_filename=document.name)

    return render_template("project.html", title="Project", project=project)
Example #31
0
	def check_role(self):
		""" 
			Check if the current user has the required role to access this view.
			If the function returns:
			True : User has the required role/permission to access this page.
			False: User does not have required role/permission to access this page.
			Available  roles:
				anon - not logged in user
				viewer - is the default role of a logged in user.
				provider - Ad space provider, who will have access to add their media to the system.
				buyer - Consumer looking for ad spaces, has access to the search module.
				subscriber - A subscribed user
		"""
		if not self.required_roles or not self.available_roles:
			return True
		elif current_user.is_authenticated():
			current_user_role = current_user.get_role()
			if current_user_role in self.available_roles:
				if current_user_role==self.admin_role or current_user_role in self.required_roles:
					return True

		return False
Example #32
0
def remove_submission(oid="", force=0):
    if force != 1:
        return render_template(
            "confirm.html",
            message="Are you sure you wish to remove this submission?",
            oid=oid,
            url="manage.remove_submission"
        )

    if oid == "":
        flash("Could not identify the provided object", "warning")
        return redirect(url_for("manage.submissions"))

    if current_user.get_role() == "Site Admin":
        submission = Submission.query.filter_by(display_key=oid).first()
    else:
        submission = current_user.group.submissions.filter_by(display_key=oid).first()

    if submission is None:
        flash("Could not identify the provided object", "warning")
        return redirect(url_for("manage.submissions"))

    # Execute our delete script synchronously
    script_path = os.path.join(utils.get_path("scripts", "webserver"), "io")
    script_path = os.path.join(script_path, "delete.sh")
    source = os.path.join(utils.get_path("submission_data", "webserver"), submission.display_key)
    subprocess.Popen(
        [
            "sudo",
            script_path,
            "-s=" + source
        ]
    ).wait()

    submission.delete()

    flash("Submission deletion was successful", "success")
    return redirect(url_for("manage.submissions"))
Example #33
0
def finish_pipeline(oid="", force=0):
    if current_user.get_role() == "Site Admin":
        return redirect(url_for("content.activity"))

    if force != 1:
        return render_template("confirm.html",
                               message="Are you sure you wish to quit the current pipeline?",
                               oid=oid,
                               url="pipelines.finish_pipeline")

    if oid == "":
        flash("Could not load the provided pipeline instance", "error")
        return redirect(url_for("empty"))

    pipeline_instance = current_user.group.pipeline_instances.filter_by(display_key=oid).first()
    if pipeline_instance is None:
        flash("Could not load the provided pipeline instance", "error")
        return redirect(url_for("empty"))

    pipeline_instance.update(current_execution_status="STOPPED")

    flash("The pipeline was stopped and disassociated with your parent data set", "success")
    return redirect(url_for("index"))
Example #34
0
def copy_to_staging_drive(oid="", data_type="", move_type=""):
    if move_type == "":
        return render_template("transfer_target.html", oid=oid, data_type=data_type)

    if current_user.get_role() == "Site Admin":
        return redirect(url_for("activity"))

    if oid == "":
        flash("Could not identify the provided object.", "warning")
        return redirect(url_for("index"))

    if data_type != "pipeline_output" and data_type != "pipeline_sample_group" and data_type != "project_sample_group" and data_type != "project_pipeline_output" and data_type != "sample":
        flash("Could not identify the object type.", "warning")
        return redirect(url_for("index"))

    from biocomputedm.manage.helpers.manage_helper import copy_data_to_staging
    if move_type == "self":
        copy_data_to_staging(current_app._get_current_object(), oid, data_type, current_user.display_key)
    else:
        copy_data_to_staging(current_app._get_current_object(), oid, data_type, current_user.display_key, "yes")

    flash("Your files are now being moved to a secure location. This may take some time to complete. You will receive an email when this process is finished.", "success")
    return redirect(url_for("index"))
Example #35
0
def login():
    # Ensure the current user's not authenticated and redirect appropriately if so
    if current_user is not None and current_user.is_authenticated():
        role = current_user.get_role()
        if role == 'admin':
            return redirect(url_for('admin_cp'))
        elif role == 'instructor':
            return redirect(url_for('instructor_cp'))
        elif role == 'ta':
            return redirect(url_for('ta_cp'))
        elif role == 'student':
            return redirect(url_for('student_cp'))
        else:
            return "Everybody's special."

    # Validate credentials
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        hashed_pwd = User.get(username)
        if hashed_pwd and check_login(username, password):
            user = User(username)
            login_user(user)
            if user.get_role() == 'admin':
                return redirect(url_for('admin_cp'))
            elif user.get_role() == 'student':
                return redirect(url_for('student_cp'))
            elif user.get_role() == 'ta':
                return redirect(url_for('ta_cp'))
            elif user.get_role() == 'instructor':
                return redirect(url_for('instructor_cp'))
            else:
                return redirect(url_for('hello_world'))
        else:
            return redirect(url_for('login'))
    return render_template('login.html')
Example #36
0
 def wrapped(*args, **kwargs):
     if current_user.get_role() not in roles:
         return login_manager.unauthorized()
     return f(*args, **kwargs)
Example #37
0
File: view.py Project: jorluft/fla
    def show(self, action, media_id=None):
        """ Render respective templates for the static page"""
        # default page content and template
        try:
            data = {}
            media_template = "view"

            # Changing collection for listing media items added through the ad-publisher page
            if request.args.get("unverified-media-items") or request.args.get(
                    "unverified-media-item"):
                data.update({"unverified_items": True})
            else:
                data.update({"unverified_items": False})
            # ===

            if action == "view":
                MC = MediaController()

                if data["unverified_items"] == True:
                    MC.change_collection(name="media_items",
                                         new_col_name="public_media_items")

                if request.args.get("get") == "industries":
                    # return the list of industries as an array
                    return self.json_out(MC.get_industries(as_list=True))

                elif request.args.get("get") == "geographies":
                    return self.json_out(MC.get_geographies(as_list=True))

                elif media_id and current_user.is_authenticated():
                    # Show a single media item with all its info
                    media_template = "single-view"
                    media_item = {}
                    conditions = {"_id": media_id}
                    # prevent non-admin, non-owner users from viewing a media item
                    if not current_user.get_role() == self.admin_role:
                        conditions.update({"owner": current_user.get_id()})
                    # ===

                    for item in MC.get_media_items(conditions=conditions):
                        for key, value in item.iteritems():
                            if type(value) is list:
                                value = ", ".join(value)

                            elif key == "customer_type" and value == "both":
                                value = "Both B2B and B2C"

                            media_item.update({key: value})

                    data.update({"media_item": media_item})

                elif current_user.is_authenticated():
                    # List all media items, accessible ONLY to admins or display all provider media items.
                    # Each media item should/will have an "owner" attribute, which is the user ID of the
                    # user adding the media item.
                    conditions = {}
                    # if not an admin, only items owned by the user are displayed
                    if not current_user.get_role() == self.admin_role:
                        conditions.update({"owner": current_user.get_id()})
                    # ===

                    # Apply filters if any
                    if request.args.get("filter") and request.args.get("name"):
                        data.update({
                            "filter": {
                                "business": request.args.get("name").strip()
                            }
                        })
                        conditions.update(
                            {"name": request.args.get("name").strip()})
                    # ===

                    data.update({"media_items": []})
                    media_items = MC.get_media_items(conditions=conditions)

                    if len(media_items) > 0:
                        data["media_items"] = media_items

            elif action == "add" and current_user.is_authenticated():
                MC = MediaController()
                media_template = "add"
                AMF = AddMediaForm(request.form)
                AMF.demography.choices = [
                    (x.strip(), x.strip())
                    for x in MC.get_demographies(as_list=True)
                ]

                if request.form:
                    if data["unverified_items"] == True:
                        MC.change_collection(name="media_items",
                                             new_col_name="public_media_items")

                    if AMF.validate():
                        data.update({
                            "message":
                            MC.add_media_item(
                                MC.prepare_media_item(
                                    form_data=AMF.data))["message"],
                            "status":
                            "success"
                        })
                    else:
                        data.update({
                            "message": "There were some errors",
                            "status": "failed"
                        })

                data.update({"add_form": AMF})

            elif action == "public-add":
                ajx_resp = False
                MC = MediaController()
                # return the list of industries as an array
                if request.args.get("get") == "industries":
                    return self.json_out(MC.get_industries(as_list=True))

                # return the list of geographies as an array
                elif request.args.get("get") == "geographies":
                    return self.json_out(MC.get_geographies(as_list=True))

                if request.args.get("next") == "show-form":
                    data.update({"show_add_form": True})

                if request.args.get("ajax-response") == "true":
                    ajx_resp = True

                self.required_roles = []
                media_template = "public-add"

                AMF = AddMediaForm(request.form)
                AMF.demography.choices = [
                    (x.strip(), x.strip())
                    for x in MC.get_demographies(as_list=True)
                ]

                if request.form:
                    # Remove required validator from fields
                    AMF.price = AMF.removeValidators(AMF.price,
                                                     ["DataRequired"])
                    AMF.market_goal = AMF.removeValidators(
                        AMF.market_goal, ["DataRequired"])
                    AMF.customer_type = AMF.removeValidators(
                        AMF.customer_type, ["DataRequired"])
                    AMF.campaign_length = AMF.removeValidators(
                        AMF.campaign_length, ["DataRequired"])
                    AMF.provider_industry = AMF.removeValidators(
                        AMF.provider_industry, ["DataRequired"])
                    AMF.viewership_industry = AMF.removeValidators(
                        AMF.viewership_industry, ["DataRequired"])
                    AMF.demography = AMF.removeValidators(
                        AMF.demography, ["DataRequired"])
                    AMF.geography = AMF.removeValidators(
                        AMF.geography, ["DataRequired"])
                    AMF.ad_name = AMF.removeValidators(AMF.ad_name,
                                                       ["DataRequired"])
                    AMF.description = AMF.removeValidators(
                        AMF.description, ["DataRequired"])
                    # ==

                    status = {"message": "", "status": "success"}

                    if AMF.validate():
                        MC = MediaController()
                        MC.change_collection(name="media_items",
                                             new_col_name="public_media_items")

                        try:
                            if session["media-id"]:
                                result = MC.update_media_item(
                                    media_item=MC.prepare_media_item(
                                        form_data=AMF.data, no_owner=True),
                                    media_id=session["media-id"],
                                    conditions=None)
                            else:
                                result = MC.add_media_item(
                                    MC.prepare_media_item(form_data=AMF.data,
                                                          no_owner=True))
                                session["media-id"] = result["_id"]

                        except KeyError:
                            result = MC.add_media_item(
                                MC.prepare_media_item(form_data=AMF.data,
                                                      no_owner=True))
                            session["media-id"] = result["_id"]

                        if request.args.get("complete") and request.args.get(
                                "complete") == "true":
                            session.clear()

                        status = {
                            "message": result["message"],
                            "status": result["status"]
                        }
                    else:
                        status = {
                            "message": "There were some errors",
                            "status": "failed",
                            "errors": AMF.errors
                        }

                    if ajx_resp:
                        return self.json_out(status)

                    data.update(status)

                data.update({"add_form": AMF})

            elif action == "edit" and media_id and current_user.is_authenticated(
            ):
                MC = MediaController()
                media_template = "edit"
                AMF = AddMediaForm(request.form)
                AMF.demography.choices = [
                    (x.strip(), x.strip())
                    for x in MC.get_demographies(as_list=True)
                ]

                if data["unverified_items"] == True:
                    MC.change_collection(name="media_items",
                                         new_col_name="public_media_items")

                if request.args.get("save"):
                    if AMF.validate():
                        conditions = None
                        # prevent any non-admin, non-owner from updating a media item
                        if not current_user.get_role() == self.admin_role:
                            conditions = {"owner": current_user.get_id()}
                        # ===
                        data.update({
                            "message":
                            MC.update_media_item(
                                media_item=MC.prepare_media_item(
                                    form_data=AMF.data),
                                media_id=media_id,
                                conditions=conditions)["message"],
                            "status":
                            "success"
                        })

                    else:
                        data.update({"message": "Error", "status": "failed"})

                else:
                    media_item = {}
                    # the fields mentioned here will be converted to a comma seperated string from list
                    fields_to_join = [
                        "viewership_industry", "provider_industry",
                        "select_markets"
                    ]
                    # ==

                    conditions = {"_id": media_id}

                    if not current_user.get_role() == self.admin_role:
                        conditions.update({"owner": current_user.get_id()})

                    for item in MC.get_media_items(conditions=conditions):
                        for key, value in item.iteritems():
                            if key in fields_to_join:
                                value = ", ".join(value)

                            media_item.update({key: value})

                    for field, value in AMF.data.items():
                        if field in media_item:
                            AMF[field].data = media_item[field]

                    media_item["geography"]
                    media_item["demography"]

                data.update({"add_form": AMF})
                data.update({"media_id": media_id})
            return self.render("media/" + media_template + ".html", data=data)

        except Exception as e:
            self.error_handle.get_error(
                error=str(e), occurred_at="mad.modules.MediaView.show()")
            abort(401)
Example #38
0
 def is_accessible(self):
     if current_user.get_role() == '0':
         return current_user.is_authenticated()