Skip to content

Instantly share code, notes, and snippets.

@rowntreerob
Last active August 29, 2015 13:57
Show Gist options
  • Save rowntreerob/9535785 to your computer and use it in GitHub Desktop.
Save rowntreerob/9535785 to your computer and use it in GitHub Desktop.
parse add user to role
/*global define*/
define(['marionette', 'vent', 'tpl!../templates/header.html', '../collections/UserList',
'../models/User', '../models/Role', 'Parse'], function (Marionette, vent, header, UserList, User, Role, Parse) {
"use strict";
return Marionette.ItemView.extend({
template : header,
ui : {
input : '#new-todo'
},
// events : {
// 'keypress #new-todo': 'onInputKeypress'
// },
// get event newusercreated come back here and restore user session
// vent.trigger('personview:adduser', {username: username, password: password});
initialize: function (options) {
_.bindAll(this, 'addUser');
var that = this;
var userSave ="";
if (this.options.parentRole) {
var parentRole = this.options.parentRole;
var muser = Parse.User.current()
var userToken = muser._sessionToken;
}
vent.on('personview:adduser', function (user) {
that.addUser(user);
});
},
//TODO Polymorphic input (new Group, new student, new group in group
onInputKeypress : function(e) {
var ENTER_KEY = 13;
var name = this.ui.input.val().trim();
if (e.which === ENTER_KEY && name) {
this.collection.create({
name: name,
ACL: new Parse.ACL(Parse.User.current())
});
this.ui.input.val('');
}
},
//CTX parent role , child role Name to lookup
//
createRoleOnEnter: function(e) {
var that = this, p;
var ENTER_KEY = 13;
var childName = this.ui.input.val().trim();
var parentName = this.options.parentRole.get("name");
if (e.which === ENTER_KEY && childName) {
p = Parse.Cloud.run('addrole', {"parentName":parentName, "childName":childName}).then(function(result) {
that.addOne(new Role(result));
}, function(error) {
// self.$(".section .error").html(error.message).show();
console.log("DNF role with that name" +error.message);
});
this.ui.input.val('');
};
},
//from layout.js that passes in events to this module's constructor
//TODO get the usercollection from a relationQuery
//interface parentID, userID , collection of users
createUserOnEnter: function(e) {
console.log("createUseronEnter");
var self = this;
var user = this.ui.input.val();
var _error = {
"error": -1004,
"message":"User relation not added to role"
};
if (e.keyCode != 13) return;
self.$(".error").hide();
var query = new Parse.Query(Parse.User);
query.equalTo("username", user);
query.first().then(function(students) {
if (typeof students === "undefined") {
return Parse.Promise.error("DNF student");
} else{
return students.fetch();
}
}).then(function(result) {
//CRUD role upd with 'users' relation ADD
var that = this; self.userObj = result;
var mrol = self.options.parentRole;
mrol.getUsers().add(result);
mrol.getACL().setRoleReadAccess(mrol, true);
return mrol.save();
}).then(function(result) {
console.log("addUserRelation to Role OK");
//event obj self.userObj
vent.trigger('header:adduser', self.userObj);
},
function(error) {
console.log("Error - addUserRelation to Role ");
var muser = { name: user , password: ""};
vent.trigger('header:dnfuser', muser);
//TODO get a new view and load the modal dialog dont need the user
//new view with a model this view will go into the modal
// self.onDnfUser(user);
});
this.ui.input.val('');
},
addOne: function(role) {
vent.trigger('header:addrole', role); //newRoleRelation in RRListComp
},
onDnfUser : function (user, role) {
console.log("Header:Dnf user");
var signUpOptions = {
model : user,
// role : role
};
// var addPersonVw = new AddPersonView(signUpOptions);
// console.log("Header.onDnfUser tokn " +this.userToken);
},
//TODO rm this not need
addUser : function (user) {
var muser = user;
var isAuthenticated = Parse.User.current();
if(isAuthenticated){
var username = muser.username;
var password = muser.password;
var name = muser.username;
//TODO this signup switches current.user ctx so that the access posting the upd on role fails
Parse.User.signUp(username, password,{ name: name }).then
(function(result) {
console.log("NewUser CRUD OK");
},
function(error) {
// self.$(".error").html("Invalid2 user ").show();
console.log("Error - LoginVw addUserRelation to Role ");
// var muser = new User({ name: user , password: ""});
// vent.trigger('header:dnfuser', muser, self.options.parentRole);
});
// this.$(".signup-form button").attr("disabled", "disabled");
}
}
});
});
// header 'addUser' handler below:
/*global define*/
define(['marionette', 'tpl!../templates/roleUserListCompositeView.html', 'tpl!../templates/emptyRoleListView.html', 'vent', './RoleItemView', '../collections/RoleList', '../collections/UserList'],
function (Marionette, rolesUsersCompositeView, EmptyRoleListView, vent, ItemView, RoleList, UserList) {
"use strict";
return Marionette.CompositeView.extend({
template : rolesUsersCompositeView,
itemView : ItemView,
itemViewContainer : '#todo-list',
ui : {
// toggle : '#toggle-all'
},
itemViewOptions: function( item, index){
return { parentName: this.model }
},
events : {
"click .usrgrp" : "roleRelation"
},
// TODO how to add to userCollection when input- in header fires
// model is role passedin use to get relation query in collection.query and fetch
initialize: function () {
var that = this;
// console.log("RolRolListCvw.init " + this.model.id +" " +this.model.get("name"));
vent.on('header:adduser', function (user) {
that.addUser(user);
});
// vent.trigger('roleitem:rmuser', mchild);
vent.on('roleitem:rmuser', function (user) {
that.removeUser(user);
});
//fm header.js trying to add userToRole... user not found so create it
// vent.on('header:dnfuser', function (user, role) {
// that.onDnfUser(user, role);
// });
this.collection = new UserList();
this.model = this.options.model; // check whether user or role shoul b user
var relation = this.model.relation("users");
this.collection.query = relation.query();
var role = this.model.id;
var rolename = this.model.get("name");
this.collection.fetch();
},
onRender : function() {
vent.trigger('roleList:filter', 'List Users in Group');
},
addUser : function(user) {
this.collection.add(user);
},
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment