Пример #1
0
def showBranch_byPath(user_name=None, tree_name=None, branch_id=None):
  user = None
  trees = None
  if g.user is not None and g.user.is_authenticated():
    user = g.user
    trees = user.allTrees()

  tree_owner = Users.getUser(nickname = user_name)
  if tree_owner != None:
    tree = tree_owner.getTree(name=tree_name)
    if tree != None:
      branch = tree.getB(branch_id)
      if branch != None:
        return render_template("tree.html",
                                title='Tree',
                                curtree=tree,
                                trees=trees,
                                user=user,
                                latestUsedB=branch.id)
  flash("Can't find the branch by current path")
  return render_template("base.html")
Пример #2
0
def mngtrees():
  user = Users.getUser(email=g.user.email)

  if request.method == "GET":
    cmd = request.args.get('cmd', default='', type=str)

    if cmd == "create_tree":
      try:
        treename = request.args.get('name', default='NewTree', type=str)
        if user.getTree(name=treename) != None:
          raise BaseException
        createdTree = Tree(user, treename)
        return jsonify({ 'id' : createdTree.id, 'name' : createdTree.name })
      except BaseException:
        return jsonify({ 'error' : "Error: The tree with such name exists. Try another name.", })
    elif cmd == "remove_tree":
      try:
        tree_id = request.args.get('tree_id', default=None, type=int)
        tree = user.getTree(id=tree_id)
        tree.remove()
        return "True"
      except BaseException:
        return "False"
    elif cmd == "rename_tree":
      try:
        tree_id = request.args.get('tree_id', default=None, type=int)
        newname = request.args.get('newname', default='Tree', type=str)
        if user.getTree(name=newname) != None:
          raise BaseException
        tree = user.getTree(id=tree_id)
        tree.rename(newname)
        return ""
      except BaseException:
        return "Error: The tree with such name exists. Try another name."

  db.session.commit()
  return ""
Пример #3
0
def mngtree():
  #for_test()

  # get data from request
  ## via GET method
  if request.method == "GET":
    # curtree_id is require only for cases when jstree return '#' as a sign of root branch_id. To get rid of it we have to rewrite a big part of jstree
    try:
      curtree_id = request.args.get('tree_id', default='', type=str)
    except AttributeError as e:
      msg='Can\'t find any trees. Try to create one.'
      print('\n' + str(msg) + '\n')
      return ""

    import app.general
    nestedocs = app.general.str2bool(request.args.get('nestedocs', default='False', type=str))
    cmd = request.args.get('cmd', default='', type=str)
    id = request.args.get('id', default='', type=str)

    # after integration with flask symbole '%' has started to add to id. So we need to remove it
    if id[:1] == "%":
      id = int(id[1:])
    if id == '#' or id == None or id == '':
      curtree = Tree.getTree(id = curtree_id)
      id = curtree.rootb_id

    data = request.args.get('data', default='', type=str)

  ## via POST method
  else:
    form = SaveDataForm(request.form)
    if request.method == "POST" and form.validate():
      nestedocs = form.nestedocs.data
      cmd = form.cmd.data
      id = form.id.data
      data = form.data.data
  ##

  branch = Branch.get(id=id)
  curtree = Tree.getTree(id=branch.tree_id)
  tree_owner = curtree.owner

  """
  cmd = "load_subbs"
  id = 4
  id = '#'
  """

  # set permission for actions
  if g.user is not None and g.user.is_authenticated():
    curuser = g.user
  else:
    curuser = '******'

  owner = True
  if tree_owner.id != curuser.id:
    owner = False
    if not ( branch.read and cmd == "load_subbs" ):
      cmd = ''
  #

  if cmd != "" :
    if cmd == "fold":
      branch.folded = True
    elif cmd == "unfold":
      branch.folded = False
    elif cmd == "rename_node":
      branch.text = data
    elif cmd == "move_node":
      new_parent_id = request.args.get('new_parent', default=curtree.rootb_id, type=int)
      position = request.args.get('position', default=-1, type=int)
      branch.move(new_parent_id, position)
    elif cmd == "load_data":
      return branch.text
    elif cmd == "delete_node":
      branch.remove()
    elif cmd == "create_node":
      parent_id = request.args.get('parent_id', default=curtree.rootb_id, type=int)
      parentB = curtree.getB(parent_id)
      newB = Branch(main = (not nestedocs), parent_id = parent_id)
      position = request.args.get('position', default=-1, type=int)
      newB.move(pos=position)
      return str( newB.id )
    elif cmd == "load_subbs":
      curtree.set_latestB(id)
      return json.dumps(getList_subbsOf(branch, nestedocs, withReadLabel=(not owner)))
    elif cmd == "get_privileges":
      return json.dumps(branch.get_priv_all())
    elif cmd == "set_privileges":
      for_class = request.args.get('for_class', default='bydefault', type=str)
      priv_read = app.general.str2bool(request.args.get('read', default=None, type=str))
      priv_rw = app.general.str2bool(request.args.get('rw', default=None, type=str))
      if for_class == 'bydefault':
        new_privs = branch.set_priv_bydefault(priv_read, priv_rw)
      elif for_class == 'users':
        nickname = request.args.get('nickname', default=None, type=str)
        if nickname != None:
          user = Users.getUser(nickname = nickname)
          new_privs = branch.set_priv_foruserid(user.id, priv_read, priv_rw)
      return json.dumps(new_privs)
    elif cmd == "set_priv_adduser":
      nickname = request.args.get('nickname', default=None, type=str)
      if nickname != None:
        user = Users.getUser(nickname = nickname)
        if branch.set_priv_adduser(user) == 0:
          return 0
      return -1
    else:
      if nestedocs :
        if cmd == "save_data":
          branch.text = data
        else:
          pass
  db.session.commit()
  return ""
Пример #4
0
def removeuser():
  user = g.user
  user = Users.getUser(email=user.email)
  user.remove()
  return redirect(url_for('about'))