Example #1
0
def access():
    """Access."""
    try:
        mail = mail_cookie_check_mail_activation(request.values['mailcookie'])

        u = User.query.filter(User.email == mail).one()
        u.note = 1
        try:
            db.session.commit()
        except SQLAlchemyError:
            db.session.rollback()
            flash(_('Authorization failled.'), 'error')
            redirect('/')

        if current_user.is_authenticated():
            current_user.reload()
            flash(_('Your email address has been validated'), 'success')
        else:
            UserInfo(u.id).reload()
            flash(
                _('Your email address has been validated, and you can '
                  'now proceed to sign-in.'),
                'success'
            )
    except Exception:
        current_app.logger.exception("Authorization failed.")
        flash(_('The authorization token is invalid.'), 'error')
    return redirect('/')
Example #2
0
    def update_profile(self, data):
        """Update user profile.

        Sends signal to allow other modules to subscribe to changes.
        """
        changed_attrs = {}
        for field in self.PROFILE_FIELDS:
            if field in data and getattr(self, field) != data[field]:
                changed_attrs[field] = getattr(self, field)
                setattr(self, field, data[field])

        if 'email' in changed_attrs:
            self.verify_email(force=True)

        try:
            db.session.commit()
        except Exception:
            db.session.rollback()
            raise
        current_user.reload()
        profile_updated.send(
            sender=self.id, user=self, changed_attrs=changed_attrs
        )

        return changed_attrs
Example #3
0
    def update_profile(self, data):
        """Update user profile.

        Sends signal to allow other modules to subscribe to changes.
        """
        changed_attrs = {}
        for field in self.PROFILE_FIELDS:
            if field in data and getattr(self, field) != data[field]:
                changed_attrs[field] = getattr(self, field)
                setattr(self, field, data[field])

        if 'email' in changed_attrs:
            self.verify_email(force=True)

        try:
            db.session.commit()
        except Exception:
            db.session.rollback()
            raise
        current_user.reload()
        profile_updated.send(sender=self.id,
                             user=self,
                             changed_attrs=changed_attrs)

        return changed_attrs
Example #4
0
def join(id_usergroup, id_user=None, status=None):
    """Join group."""
    group = Usergroup.query.get_or_404(id_usergroup)
    id_user2join = id_user or current_user.get_id()
    user2join = User.query.get_or_404(id_user2join)
    form = UserJoinGroupForm()
    user_status = None
    if form.user_status and form.user_status.data:
            user_status = UserUsergroup.USER_STATUS['ADMIN']

    try:
        group.join(user2join, status=user_status)
    except AccountSecurityError:
        flash(_(
            'You have not enough right to '
            'add user "%(x_nickname)s" to the group "%(x_groupname)s"',
            x_nickname=user2join.nickname, x_groupname=group.name), "error")
        return redirect(url_for('.index'))
    except SQLAlchemyError:
        flash(_('User "%(x_nickname)s" can\'t join the group "%(x_groupname)s"',
                x_nickname=user2join.nickname, x_groupname=group.name), "error")
        if id_user:
            return redirect(url_for('.members', id_usergroup=id_usergroup))
        else:
            return redirect(url_for('.index'))

    current_user.reload()
    flash(_('%(user)s join the group "%(name)s".',
            user='******'+user2join.nickname+'"' if id_user else "You",
            name=group.name), 'success')

    redirect_url = form.redirect_url.data or url_for('.index')
    return redirect(redirect_url)
Example #5
0
def join(id_usergroup, id_user=None, status=None):
    """Join group."""
    group = Usergroup.query.get_or_404(id_usergroup)
    id_user2join = id_user or current_user.get_id()
    user2join = User.query.get_or_404(id_user2join)
    form = UserJoinGroupForm()
    user_status = None
    if form.user_status and form.user_status.data:
            user_status = UserUsergroup.USER_STATUS['ADMIN']

    try:
        group.join(user2join, status=user_status)
    except AccountSecurityError:
        flash(_(
            'You have not enough right to '
            'add user "%(x_nickname)s" to the group "%(x_groupname)s"',
            x_nickname=user2join.nickname, x_groupname=group.name), "error")
        return redirect(url_for('.index'))
    except SQLAlchemyError:
        flash(_('User "%(x_nickname)s" can\'t join the group "%(x_groupname)s"',
                x_nickname=user2join.nickname, x_groupname=group.name), "error")
        if id_user:
            return redirect(url_for('.members', id_usergroup=id_usergroup))
        else:
            return redirect(url_for('.index'))

    current_user.reload()
    flash(_('%(user)s join the group "%(name)s".',
            user='******'+user2join.nickname+'"' if id_user else "You",
            name=group.name), 'success')

    redirect_url = form.redirect_url.data or url_for('.index')
    return redirect(redirect_url)
Example #6
0
def access():
    """Access."""
    try:
        mail = mail_cookie_check_mail_activation(request.values['mailcookie'])

        u = User.query.filter(User.email == mail).one()
        u.note = 1
        try:
            db.session.commit()
        except SQLAlchemyError:
            db.session.rollback()
            flash(_('Authorization failled.'), 'error')
            redirect('/')

        if current_user.is_authenticated():
            current_user.reload()
            flash(_('Your email address has been validated'), 'success')
        else:
            UserInfo(u.id).reload()
            flash(
                _('Your email address has been validated, and you can '
                  'now proceed to sign-in.'), 'success')
    except Exception:
        current_app.logger.exception("Authorization failed.")
        flash(_('The authorization token is invalid.'), 'error')
    return redirect('/')
Example #7
0
def updateLitSub(lit_id):
    form = AddLitForm()
    lit = Lit.objects(id__iexact=lit_id).first()

    # Update all the fields of the object ( Could possibly be done in a simpler fashion )
    if form.validate_on_submit():
        lit.update(set__title=form.title.data)
        lit.update(set__refType=form.refType.data)
        lit.update(set__author=form.author.data)
        lit.update(set__primaryField=form.primaryField.data)
        lit.update(set__yrPublished=form.yrPublished.data)
        lit.update(set__sourceTitle=form.sourceTitle.data)
        lit.update(set__editor=form.editor.data)
        lit.update(set__placePublished=form.placePublished.data)
        lit.update(set__publisher=form.publisher.data)
        lit.update(set__volume=form.volume.data)
        lit.update(set__number=form.number.data)
        lit.update(set__pages=form.pages.data)
        lit.update(set__abstract=form.abstract.data)
        lit.update(set__notes=form.notes.data)
        lit.update(set__secondaryField=form.secondaryField.data)
        lit.update(set__link=form.link.data)

        # Clear the objects keywords
        lit.update(set__keywords=[])

        # Separate the keywords field string by comma
        keywordslist = (form.keywords.data).split(",")

        # Push each key into the obj list field
        for x in range(0, len(keywordslist)):
            key = str(keywordslist[x].strip())
            if key is not None:
                lit.update(push__keywords=key)

        # Add new Lit history obj
        editHist = LitEditRecord(lastUserEdited=current_user.name)
        lit.update(push__l_edit_record=editHist)
        lit.update(set__last_edit=editHist)
        lit.reload()

        # Add new User edit history obj
        userHist = UserEditRecord(litEdited=str(lit.id),
                                  operation="update",
                                  litEditedTitle=lit.title)
        current_user.update(push__u_edit_record=userHist)
        current_user.reload()

        lit = Lit.objects(id__iexact=lit_id).first()
        flash(lit.title + " has been updated")
    else:
        flash(lit.title + " failed to be updated")
    return render_template('lit.html', lit=lit)
Example #8
0
def collect(movie_id):
    if len(current_user.collections) >= current_app.config['MAX_COLLECTIONS_NUM']:
        flash('收藏电影数量已达最大,请尽量不要收藏重复的电影', 'warning')
        return redirect_back()
    movie_id = ObjectId(movie_id)
    current_user.update(push__collections=movie_id)
    current_user.reload()
    if current_user.not_collect_again():
        flash("收藏成功", 'success')
    else:
        flash("该电影重复收藏成功,尽量不要有此操作,如需删除请到个人页面", 'warning')
    return redirect_back()
Example #9
0
def edit_profile():
    form = EditProfileForm()
    if form.validate_on_submit():
        current_user.update(about_me=form.about_me.data)
        current_user.reload()
        flash('Your changes have been saved.')
        return redirect(url_for('edit_profile'))
    elif request.method == 'GET':
        form.about_me.data = current_user.about_me
    return render_template('edit_profile.html',
                           title='Edit Profile',
                           form=form)
Example #10
0
def manage(id_usergroup):
    """Manage user group."""
    ug = Usergroup.query.filter_by(id=id_usergroup).one()
    form = UsergroupForm(request.form, obj=ug)

    if form.validate_on_submit():
        if not ug.is_admin(current_user.get_id()):
            # not enough right to modify group
            flash(
                _(
                    'Sorry, you don\'t have enough right to be able '
                    'to manage the group "%(name)s"',
                    name=ug.name), 'error')
            return redirect(url_for(".index"))

        # get form data
        ug2form = Usergroup()
        form.populate_obj(ug2form)
        # update group
        oldname = ug.name
        ug.name = ug2form.name
        ug.description = ug2form.description
        ug.join_policy = ug2form.join_policy
        ug.login_method = ug2form.login_method

        # update in db
        try:
            db.session.merge(ug)
            db.session.commit()
        except IntegrityError:
            db.session.rollback()
            flash(_('Group properies error'), 'error')
            # reload form with old values
            return render_template(
                "groups/new.html",
                form=form,
                action=_('Update'),
                subtitle=oldname,
            )
        except SQLAlchemyError:
            db.session.rollback()
            raise

        current_user.reload()
        return redirect(url_for(".index"))

    return render_template(
        "groups/new.html",
        form=form,
        action=_('Update'),
        subtitle=ug.name,
    )
Example #11
0
def delete(id_usergroup):
    """Delete a group."""
    group = Usergroup.query.get_or_404(id_usergroup)
    id_user = current_user.get_id()
    if group.is_admin(id_user):
        db.session.delete(group)
        db.session.commit()
        current_user.reload()
    else:
        flash(_('Sorry, but you are not an admin of the group "%(name)s".',
                name=group.name), "error")

    return redirect(url_for(".index"))
Example #12
0
def delete(id_usergroup):
    """Delete a group."""
    group = Usergroup.query.get_or_404(id_usergroup)
    id_user = current_user.get_id()
    if group.is_admin(id_user):
        db.session.delete(group)
        db.session.commit()
        current_user.reload()
    else:
        flash(_('Sorry, but you are not an admin of the group "%(name)s".',
                name=group.name), "error")

    return redirect(url_for(".index"))
Example #13
0
def manage(id_usergroup):
    """Manage user group."""
    ug = Usergroup.query.filter_by(id=id_usergroup).one()
    form = UsergroupForm(request.form, obj=ug)

    if form.validate_on_submit():
        if not ug.is_admin(current_user.get_id()):
            # not enough right to modify group
            flash(_('Sorry, you don\'t have enough right to be able '
                    'to manage the group "%(name)s"', name=ug.name), 'error')
            return redirect(url_for(".index"))

        # get form data
        ug2form = Usergroup()
        form.populate_obj(ug2form)
        # update group
        oldname = ug.name
        ug.name = ug2form.name
        ug.description = ug2form.description
        ug.join_policy = ug2form.join_policy
        ug.login_method = ug2form.login_method

        # update in db
        try:
            db.session.merge(ug)
            db.session.commit()
        except IntegrityError:
            db.session.rollback()
            flash(_('Group properies error'), 'error')
            # reload form with old values
            return render_template(
                "groups/new.html",
                form=form,
                action=_('Update'),
                subtitle=oldname,
            )
        except SQLAlchemyError:
            db.session.rollback()
            raise

        current_user.reload()
        return redirect(url_for(".index"))

    return render_template(
        "groups/new.html",
        form=form,
        action=_('Update'),
        subtitle=ug.name,
    )
Example #14
0
def index():
    """List all user groups."""
    uid = current_user.get_id()
    current_user.reload()
    form = JoinUsergroupForm()
    form.id_usergroup.set_remote(
        url_for('webgroup.search_groups', id_user=uid) + "?query=%QUERY")
    user = User.query.get(uid)
    uugs = dict(map(lambda uug: (uug.usergroup.name, uug), user.usergroups))

    return render_template(
        'groups/index.html',
        uugs=uugs,
        form=form,
    )
Example #15
0
def myposts():
    if request.method == 'POST':
        i =  int(request.form['btn']) - 1
        postid = current_user.posts[i][7]
        remove_post(postid)
        current_user.reload()
    posts = []
    if current_user.is_authenticated:
         posts = current_user.posts
         defaults = getdefaults(current_user.id)
    else:
        return redirect(url_for('login'))


    return render_template('saiddit/myposts.html',
                           title='myposts', posts=posts, defaults=defaults )
Example #16
0
def index():
    """List all user groups."""
    uid = current_user.get_id()
    current_user.reload()
    form = JoinUsergroupForm()
    form.id_usergroup.set_remote(
        url_for('webgroup.search_groups', id_user=uid)
        + "?query=%QUERY")
    user = User.query.get(uid)
    uugs = dict(map(lambda uug: (uug.usergroup.name, uug),
                    user.usergroups))

    return render_template(
        'groups/index.html',
        uugs=uugs,
        form=form,
    )
Example #17
0
def leave(id_usergroup, id_user=None):
    """Leave user group.

    :param id_usergroup: Identifier of user group.
    """
    group = Usergroup.query.get_or_404(id_usergroup)
    id_user2remove = id_user or current_user.get_id()
    user2remove = User.query.get_or_404(id_user2remove)
    try:
        group.leave(user2remove)
    except AccountSecurityError:
        flash(
            _(
                'You have not enough right to '
                'remove user "%(x_nickname)s" from group "%(x_groupname)s"',
                x_nickname=user2remove.nickname,
                x_groupname=group.name), "error")
        return redirect(url_for('.index'))
    except IntegrityUsergroupError:
        flash(
            _(
                'Sorry, user "%(x_nickname)s" can leave the group '
                '"%(x_groupname)s" without admins, please delete the '
                'group if you want to leave.',
                x_nickname=user2remove.nickname,
                x_groupname=group.name), "error")
        return redirect(url_for('.index'))

    try:
        db.session.merge(group)
        db.session.commit()
    except SQLAlchemyError:
        db.session.rollback()
        raise

    current_user.reload()
    flash(
        _('%(user)s left the group "%(name)s".',
          user='******' + user2remove.nickname + '"' if id_user else "You",
          name=group.name), 'success')
    if id_user and id_user != current_user.get_id():
        return redirect(url_for('.members', id_usergroup=id_usergroup))
    else:
        return redirect(url_for('.index'))
Example #18
0
def account_setup(remote, token):
    """Perform additional setup after user have been logged in."""
    from invenio.ext.sqlalchemy import db

    response = remote.get(REMOTE_APP_RESOURCE_API_URL)
    user = token.remote_account.user

    if response.status == requests.codes.ok:
        res = get_dict_from_response(response)
        current_user.info['group'] = fetch_groups(res['Group'])
        current_user.modified = True
        current_user.save()

        if user and not any([user.family_name, user.given_names]):
            user.family_name = res['Lastname'][0]
            user.given_names = res['Firstname'][0]

            db.session.add(user)
            current_user.reload()
Example #19
0
def account_setup(remote, token):
    """Perform additional setup after user have been logged in."""
    from invenio_ext.sqlalchemy import db

    response = remote.get(REMOTE_APP_RESOURCE_API_URL)
    user = token.remote_account.user

    if response.status == requests.codes.ok:
        res = get_dict_from_response(response)
        current_user.info['group'] = fetch_groups(res['Group'])
        current_user.modified = True
        current_user.save()

        if user and not any([user.family_name, user.given_names]):
            user.family_name = res['Lastname'][0]
            user.given_names = res['Firstname'][0]

            db.session.add(user)
            current_user.reload()
Example #20
0
def new():
    """Create new user group."""
    form = UsergroupForm(request.form)

    if form.validate_on_submit():
        ug = Usergroup()
        id_user = current_user.get_id()
        user2join = User.query.get_or_404(id_user)
        form.populate_obj(ug)
        ug.join(status=UserUsergroup.USER_STATUS['ADMIN'],
                user=user2join)
        db.session.add(ug)
        try:
            db.session.commit()
        except IntegrityError:
            # catch integrity error
            db.session.rollback()
            flash(_('Group properies error'), 'error')
            # reload form with old values
            return render_template(
                "groups/new.html",
                form=form,
                action=_('Create'),
                subtitle=_("New group"),
            )
        except Exception:
            # catch unknown error
            db.session.rollback()
            raise
        # group finally created
        current_user.reload()
        flash(_('Group "%(name)s" successfully created',
                name=ug.name), 'success')
        return redirect(url_for(".index"))

    return render_template(
        "groups/new.html",
        form=form,
        action=_('Create'),
        subtitle=_("New group"),
    )
Example #21
0
def new():
    """Create new user group."""
    form = UsergroupForm(request.form)

    if form.validate_on_submit():
        ug = Usergroup()
        id_user = current_user.get_id()
        user2join = User.query.get_or_404(id_user)
        form.populate_obj(ug)
        ug.join(status=UserUsergroup.USER_STATUS['ADMIN'],
                user=user2join)
        db.session.add(ug)
        try:
            db.session.commit()
        except IntegrityError:
            # catch integrity error
            db.session.rollback()
            flash(_('Group properies error'), 'error')
            # reload form with old values
            return render_template(
                "groups/new.html",
                form=form,
                action=_('Create'),
                subtitle=_("New group"),
            )
        except:
            # catch unknown error
            db.session.rollback()
            raise
        # group finally created
        current_user.reload()
        flash(_('Group "%(name)s" successfully created',
                name=ug.name), 'success')
        return redirect(url_for(".index"))

    return render_template(
        "groups/new.html",
        form=form,
        action=_('Create'),
        subtitle=_("New group"),
    )
Example #22
0
def edit_profile():
    form = EditProfileForm()
    if form.validate_on_submit():
        # if form.pic.data:
        #     picture_file = save_pic(form.pic.data)
        #     current_user.update(pic=picture_file)
        # current_user.update(about_me=form.about_me.data)
        Concrete_Builder = EditProfileBuilder.ConcreteBuilder()
        director = EditProfileBuilder.Director(form=form)
        director.construct(Concrete_Builder)
        user1 = Concrete_Builder.product
        user = ProfileAdapter.Adapter()
        user.request(user1)
        current_user.reload()
        flash("Your changes have been saved!")
        return redirect(url_for('user', username=current_user.username))
    elif request.method == 'GET':
        form.about_me.data = current_user.about_me
    return render_template('edit_profile.html',
                           title="Edit Profile",
                           form=form)
Example #23
0
def leave(id_usergroup, id_user=None):
    """Leave user group.

    :param id_usergroup: Identifier of user group.
    """
    group = Usergroup.query.get_or_404(id_usergroup)
    id_user2remove = id_user or current_user.get_id()
    user2remove = User.query.get_or_404(id_user2remove)
    try:
        group.leave(user2remove)
    except AccountSecurityError:
        flash(_(
            'You have not enough right to '
            'remove user "%(x_nickname)s" from group "%(x_groupname)s"',
            x_nickname=user2remove.nickname, x_groupname=group.name), "error")
        return redirect(url_for('.index'))
    except IntegrityUsergroupError:
        flash(_(
            'Sorry, user "%(x_nickname)s" can leave the group '
            '"%(x_groupname)s" without admins, please delete the '
            'group if you want to leave.',
            x_nickname=user2remove.nickname, x_groupname=group.name), "error")
        return redirect(url_for('.index'))

    try:
        db.session.merge(group)
        db.session.commit()
    except SQLAlchemyError:
        db.session.rollback()
        raise

    current_user.reload()
    flash(_('%(user)s left the group "%(name)s".',
            user='******'+user2remove.nickname+'"' if id_user else "You",
            name=group.name), 'success')
    if id_user and id_user != current_user.get_id():
        return redirect(url_for('.members', id_usergroup=id_usergroup))
    else:
        return redirect(url_for('.index'))
Example #24
0
def account_setup(remote, token, resp):
    """Perform additional setup after user have been logged in."""
    from invenio.modules.oauthclient.utils import oauth_link_external_id
    from invenio.ext.sqlalchemy import db

    # Retrieve ORCID from response.
    orcid = resp.get("orcid")

    # Set ORCID in extra_data.
    token.remote_account.extra_data = {"orcid": orcid}
    user = token.remote_account.user

    # Create user <-> external id link.
    oauth_link_external_id(user, dict(id=orcid, method="orcid"))

    # Fill user full name if not already set
    if user and not any([user.given_names, user.family_name]):
        # Query ORCID to get the real name
        response = remote.get("{0}/orcid-bio".format(orcid),
                              headers={'Accept': 'application/orcid+json'},
                              content_type="application/json")

        if response.status == 200:
            try:
                name = response.data["orcid-profile"]["orcid-bio"][
                    "personal-details"]
                user.given_names = name["given-names"]["value"]
                user.family_name = name["family-name"]["value"]
            except KeyError:
                current_app.logger.exception(
                    "Unexpected return format from ORCID: {0}".format(
                        repr(response.data)))
                return

            db.session.add(user)

            # Refresh user cache
            current_user.reload()
Example #25
0
def account_setup(remote, token, resp):
    """Perform additional setup after user have been logged in."""
    from invenio_oauthclient.utils import oauth_link_external_id
    from invenio_ext.sqlalchemy import db

    # Retrieve ORCID from response.
    orcid = resp.get("orcid")

    # Set ORCID in extra_data.
    token.remote_account.extra_data = {"orcid": orcid}
    user = token.remote_account.user

    # Create user <-> external id link.
    oauth_link_external_id(user, dict(id=orcid, method="orcid"))

    # Fill user full name if not already set
    if user and not any([user.given_names, user.family_name]):
        # Query ORCID to get the real name
        response = remote.get("{0}/orcid-bio".format(orcid),
                              headers={'Accept': 'application/orcid+json'},
                              content_type="application/json")

        if response.status == 200:
            try:
                name = response.data["orcid-profile"]["orcid-bio"][
                    "personal-details"]
                user.given_names = name["given-names"]["value"]
                user.family_name = name["family-name"]["value"]
            except KeyError:
                current_app.logger.exception(
                    "Unexpected return format from ORCID: {0}".format(
                        repr(response.data)))
                return

            db.session.add(user)

            # Refresh user cache
            current_user.reload()
Example #26
0
def access():
    """Access."""
    try:
        email = EmailConfirmationSerializer().load_token(request.values["mailcookie"])["data"]["email"]

        u = User.query.filter(User.email == email).one()
        u.note = 1
        try:
            db.session.commit()
        except SQLAlchemyError:
            db.session.rollback()
            flash(_("Authorization failled."), "error")
            redirect("/")

        if current_user.is_authenticated():
            current_user.reload()
            flash(_("Your email address has been validated"), "success")
        else:
            UserInfo(u.id).reload()
            flash(_("Your email address has been validated, and you can " "now proceed to sign-in."), "success")
    except Exception:
        current_app.logger.exception("Authorization failed.")
        flash(_("The authorization token is invalid."), "error")
    return redirect("/")
Example #27
0
def before_request():
    if current_user.is_authenticated:
        current_user.update(last_seen=datetime.utcnow())
        current_user.reload()
Example #28
0
def deleteLit():
    default_pref = {
        "author": True,
        "yrPublished": True,
        "title": True,
        "sourceTitle": True,
        "primaryField": True,
        "creator": True,
        "dateCreatedOn": True,
        "editor": False,
        "refType": False,
        "lastModified": False,
        "lastModifiedBy": False
    }

    preferences = request.cookies.get('preferences')
    if not preferences:
        # Return default preferences
        preferences = default_pref
    else:
        # Otherwise convert the cookie to a python object
        preferences = json.loads(preferences)
    if current_user.role.name == 'User':
        lit_stored = Lit.objects(
            creator__exact=current_user.name).order_by('title')
        total = lit_stored.count()
        search = False
        q = request.args.get('q')
        if q:
            search = True
        page = request.args.get('page', type=int, default=1)
        start = page * 30 - 30
        end = page * 30
        lit_showed = lit_stored[start:end]
        pagination = Pagination(page=page,
                                per_page=30,
                                total=total,
                                record_name='resources')
    else:
        total = 0
        lit_showed = None
        page = request.args.get('page', type=int, default=1)
        pagination = Pagination(page=page,
                                per_page=30,
                                total=total,
                                record_name='resources')

    form = DeleteLitForm()
    if form.validate_on_submit():
        title = form.title.data.strip()
        refType = form.refType.data.strip()
        lit = Lit.objects(title__exact=title, refType__exact=refType).first()
        if lit is None:
            flash("No literature like this in the database")
        elif current_user.role.name == 'User' and lit.creator != current_user.name:
            flash(
                'You did not upload this literature. Please delete a literature you uploaded.'
            )
        else:
            userHist = UserEditRecord(litEdited=str(lit.id),
                                      litEditedTitle=lit.title,
                                      operation="delete")
            current_user.update(push__u_edit_record=userHist)
            current_user.reload()
            lit.delete()
            flash("Literature has been deleted!")
        return redirect(url_for('lit.deleteLit'))
    return render_template('deleteLit.html',
                           form=form,
                           lit_showed=lit_showed,
                           pagination=pagination,
                           total=total,
                           preferences=preferences)
Example #29
0
def addLit():
    total = 0
    count = 0
    # Add form for file upload
    formFile = UploadLitFile()
    # Create new add lit form
    form = AddLitForm()

    if formFile.submit.data and formFile.validate_on_submit():
        if formFile.file.data.filename == '':
            flash('No Selected File')
        else:
            filename = secure_filename(formFile.file.data.filename)
            file = formFile.file.data
            flash('File uploaded. Processed')
            read = file.readlines()
            lines = read[0].split('\r')
            total = len(lines) - 1
            print('total', total)
            count = 0
            for line in lines[1:]:
                if count == total:
                    break
                entry = line.split('\t')
                print(len(entry))
                lit = Lit.objects(refType__iexact=entry[0],
                                  title__iexact=entry[2]).first()
                if lit is not None:
                    flash("This entry is already in the database.")
                else:
                    count = count + 1
                    print(str(entry[12]))
                    for x in range(0, 17):
                        entry[x].strip()
                    lit = Lit(refType=entry[0],
                              author=entry[1],
                              title=entry[2],
                              pages=entry[10],
                              primaryField=entry[14],
                              creator=current_user.name)
                    lit.save()
                    lit.update(set__yrPublished=entry[3])
                    lit.update(set__sourceTitle=entry[4])
                    lit.update(set__editor=entry[5])
                    lit.update(set__placePublished=entry[6])
                    lit.update(set__publisher=entry[7])
                    lit.update(set__volume=entry[8])
                    lit.update(set__number=entry[9])
                    lit.update(set__abstract=entry[12])
                    lit.update(set__notes=entry[13])
                    lit.update(set__secondaryField=entry[15])
                    lit.update(set__DOI=entry[17])

                    # If the link field is not empty, save the link too
                    # If statement is done because update fails when attempting to save an empty string
                    if form.link.data is not None:
                        lit.update(set__link=entry[16])

                    # Add keywords into the db as a listField
                    keywordslist = entry[11].split(",")
                    for x in range(0, len(keywordslist)):
                        key = str(keywordslist[x].strip())
                        lit.update(push__keywords=key)

                    editHist = LitEditRecord(lastUserEdited=current_user.name)
                    # Update lit history
                    lit.update(push__l_edit_record=editHist)
                    lit.update(set__last_edit=editHist)
                    lit.reload()

                    # Update user edit history
                    userHist = UserEditRecord(litEdited=str(lit.id),
                                              operation="add",
                                              litEditedTitle=lit.title)
                    current_user.update(push__u_edit_record=userHist)
                    current_user.reload()
            flash("Successfully added!")
            return redirect(url_for('lit.addLit'))
    else:
        filename = None

    # On form submission
    if form.submit.data and form.validate_on_submit():

        # If the literature is already in the database, then do not add the material, return
        lit = Lit.objects(title__iexact=form.title.data,
                          author__iexact=form.author.data,
                          pages__iexact=form.pages.data).first()
        if lit is not None:
            flash("This is already in the DB. This is the page")
            return render_template('lit.html', lit=lit)

        # Create a new lit object, save to db first, then update fields
        lit = Lit(refType=form.refType.data,
                  title=form.title.data,
                  pages=form.pages.data,
                  author=form.author.data,
                  primaryField=form.primaryField.data,
                  creator=current_user.name)
        lit.save()
        lit.update(set__yrPublished=form.yrPublished.data)
        lit.update(set__sourceTitle=form.sourceTitle.data)
        lit.update(set__editor=form.editor.data)
        lit.update(set__placePublished=form.placePublished.data)
        lit.update(set__publisher=form.publisher.data)
        lit.update(set__volume=form.volume.data)
        lit.update(set__number=form.number.data)
        lit.update(set__abstract=form.abstract.data)
        lit.update(set__notes=form.notes.data)
        lit.update(set__secondaryField=form.secondaryField.data)

        # Add user's edit in edit history
        editHist = LitEditRecord(lastUserEdited=current_user.name)

        # If the link field is not empty, save the link too
        # If statement is done because update fails when attempting to save an empty string
        if form.link.data is not None:
            lit.update(set__link=form.link.data)

        # Add keywords into the db as a listField
        keywordslist = (form.keywords.data).split(",")
        for x in range(0, len(keywordslist)):
            key = str(keywordslist[x].strip())
            lit.update(push__keywords=key)

        # Update lit history
        lit.update(push__l_edit_record=editHist)
        lit.update(set__last_edit=editHist)
        lit.reload()

        # Update user edit history
        userHist = UserEditRecord(litEdited=str(lit.id),
                                  operation="add",
                                  litEditedTitle=lit.title)
        current_user.update(push__u_edit_record=userHist)
        current_user.reload()

        flash("Successfully added!")
        return redirect(url_for('lit.lit', lit_id=lit.id))
    return render_template('addLit.html',
                           form=form,
                           formFile=formFile,
                           filename=filename,
                           total=total,
                           count=count)