def edit(self, *args, **kw): user = handler.user.get_user_in_session(request) if request.method == 'GET': project_id = args[0] else: project_id = kw.get('pid') debug("check permission", 1) if not checker.check_permission(user=user, project_id=project_id, right_id=constants.right_upload_id) and not checker.is_admin(user=user): flash('You must have %s permission to edit the project.' % constants.right_upload, 'error') raise redirect('/tracks/', {'pid': project_id}) #if checker.is_admin(user=user): #user = DBSession.query(User).join(Project).filter(Project.id == project_id).first() widget = form.EditProject(action=url('/projects/edit/%s' % project_id)).req() widget.value = {'pid': project_id} project = DBSession.query(Project).filter(Project.id == project_id).first() # prendre les user tracks du meme sequence id tracks = DBSession.query(Track).join(User.tracks).filter( and_(User.id == user.id, Track.sequence_id == project.sequence_id, not_(Track.id.in_([t.id for t in project.tracks]))) ).all() # prendre les sared tracks du meme sequence id shared_tracks = handler.user.shared_tracks(user.id, constants.rights['download']['id']) shared_tracks = [t for t in shared_tracks if (t.sequence_id == project.sequence_id and t.id not in [tr.id for tr in project.tracks])] tracks.extend(shared_tracks) if request.method == 'GET': debug("GET", 2) widget.child.children[1].value = project.name widget.child.children[2].options = [('', '')] + [(t.id, t.name) for t in tracks] + [(t.id, t.name, {'selected': True}) for t in project.tracks] return dict(page='tracks', widget=widget, project_id=project_id) debug("POST", 2) try: debug("validate post", 2) widget.validate(kw) except twc.ValidationError as e: debug("error", 2) w = e.widget w.child.children[1].value = project.name w.child.children[2].options = [(t.id, t.name) for t in tracks] + [(t.id, t.name, {'selected': True}) for t in project.tracks] return dict(page='tracks', widget=w, project_id=project_id) debug("validation passed") track_ids = kw.get('tracks', []) if not track_ids: track_ids = [] if not isinstance(track_ids, list): track_ids = [track_ids] if len(track_ids) > 0 and '' in track_ids: track_ids.remove('') # if the project is shared, some track cannot be removed for t in project.tracks: if not checker.user_own_track(user.id, track=t) and t.id not in track_ids and t.id in [s.id for s in shared_tracks]: track_ids.append(t.id) handler.project.e(project_id=project_id, name=kw.get('name'), track_ids=track_ids) raise redirect('/tracks/', {'pid': project_id})
def traceback(self, id): user = handler.user.get_user_in_session(request) if not checker.user_own_track(user.id, id) and not checker.is_admin(user): flash("You haven't the right to look at any tracks which is not yours", 'error') raise redirect('/tracks') track = DBSession.query(Track).filter(Track.id == id).first() return track.traceback
def edit(self, *args, **kw): user = handler.user.get_user_in_session(request) if request.method == 'GET': project_id = args[0] else: project_id = kw.get('pid') debug("check permission", 1) if not checker.check_permission( user=user, project_id=project_id, right_id=constants.right_upload_id) and not checker.is_admin( user=user): flash( 'You must have %s permission to edit the project.' % constants.right_upload, 'error') raise redirect('/tracks/', {'pid': project_id}) #if checker.is_admin(user=user): #user = DBSession.query(User).join(Project).filter(Project.id == project_id).first() widget = form.EditProject(action=url('/projects/edit/%s' % project_id)).req() widget.value = {'pid': project_id} project = DBSession.query(Project).filter( Project.id == project_id).first() # prendre les user tracks du meme sequence id tracks = DBSession.query(Track).join(User.tracks).filter( and_(User.id == user.id, Track.sequence_id == project.sequence_id, not_(Track.id.in_([t.id for t in project.tracks])))).all() # prendre les sared tracks du meme sequence id shared_tracks = handler.user.shared_tracks( user.id, constants.rights['download']['id']) shared_tracks = [ t for t in shared_tracks if (t.sequence_id == project.sequence_id and t.id not in [tr.id for tr in project.tracks]) ] tracks.extend(shared_tracks) if request.method == 'GET': debug("GET", 2) widget.child.children[1].value = project.name widget.child.children[2].options = [('', '')] + [ (t.id, t.name) for t in tracks ] + [(t.id, t.name, { 'selected': True }) for t in project.tracks] return dict(page='tracks', widget=widget, project_id=project_id) debug("POST", 2) try: debug("validate post", 2) widget.validate(kw) except twc.ValidationError as e: debug("error", 2) w = e.widget w.child.children[1].value = project.name w.child.children[2].options = [(t.id, t.name) for t in tracks ] + [(t.id, t.name, { 'selected': True }) for t in project.tracks] return dict(page='tracks', widget=w, project_id=project_id) debug("validation passed") track_ids = kw.get('tracks', []) if not track_ids: track_ids = [] if not isinstance(track_ids, list): track_ids = [track_ids] if len(track_ids) > 0 and '' in track_ids: track_ids.remove('') # if the project is shared, some track cannot be removed for t in project.tracks: if not checker.user_own_track( user.id, track=t) and t.id not in track_ids and t.id in [ s.id for s in shared_tracks ]: track_ids.append(t.id) handler.project.e(project_id=project_id, name=kw.get('name'), track_ids=track_ids) raise redirect('/tracks/', {'pid': project_id})