123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- Chats = new Mongo.Collection("chats");
- if (Meteor.isClient) {
- // set up the main template the the router will use to build pages
- Router.configure({
- layoutTemplate: 'ApplicationLayout'
- });
- // specify the top level route, the page users see when they arrive at the site
- Router.route('/', function () {
- console.log("rendering root /");
- this.render("navbar", {to:"header"});
- this.render("lobby_page", {to:"main"});
- });
- // specify a route that allows the current user to chat to another users
- Router.route('/chat/:_id', function () {
- // the user they want to chat to has id equal to
- // the id sent in after /chat/...
- var otherUserId = this.params._id;
- // find a chat that has two users that match current user id
- // and the requested user id
- var filter = {$or:[
- {user1Id:Meteor.userId(), user2Id:otherUserId},
- {user2Id:Meteor.userId(), user1Id:otherUserId}
- ]};
- var chat = Chats.findOne(filter);
- if (!chat){// no chat matching the filter - need to insert a new one
- chatId = Chats.insert({user1Id:Meteor.userId(), user2Id:otherUserId});
- }
- else {// there is a chat going already - use that.
- chatId = chat._id;
- }
- if (chatId){// looking good, save the id to the session
- Session.set("chatId",chatId);
- }
- this.render("navbar", {to:"header"});
- this.render("chat_page", {to:"main"});
- });
- ///
- // helper functions
- ///
- Template.available_user_list.helpers({
- users:function(){
- return Meteor.users.find();
- }
- })
- Template.available_user.helpers({
- getUsername:function(userId){
- user = Meteor.users.findOne({_id:userId});
- return user.profile.username;
- },
- isMyUser:function(userId){
- if (userId == Meteor.userId()){
- return true;
- }
- else {
- return false;
- }
- }
- })
- Template.chat_page.helpers({
- messages:function(){
- var chat = Chats.findOne({_id:Session.get("chatId")});
- return chat.messages;
- },
- other_user:function(){
- return ""
- },
- })
- Template.chat_page.events({
- // this event fires when the user sends a message on the chat page
- 'submit .js-send-chat':function(event){
- // stop the form from triggering a page reload
- event.preventDefault();
- // see if we can find a chat object in the database
- // to which we'll add the message
- var chat = Chats.findOne({_id:Session.get("chatId")});
- if (chat){// ok - we have a chat to use
- var msgs = chat.messages; // pull the messages property
- if (!msgs){// no messages yet, create a new array
- msgs = [];
- }
- // is a good idea to insert data straight from the form
- // (i.e. the user) into the database?? certainly not.
- // push adds the message to the end of the array
- msgs.push({text: event.target.chat.value});
- // reset the form
- event.target.chat.value = "";
- // put the messages array onto the chat object
- chat.messages = msgs;
- // update the chat object in the database.
- Chats.update(chat._id, chat);
- }
- }
- })
- }
- // start up script that creates some users for testing
- // users have the username 'user1@test.com' .. 'user8@test.com'
- // and the password test123
- if (Meteor.isServer) {
- Meteor.startup(function () {
- if (!Meteor.users.findOne()){
- for (var i=1;i<9;i++){
- var email = "user"+i+"@test.com";
- var username = "user"+i;
- var avatar = "ava"+i+".png"
- console.log("creating a user with password 'test123' and username/ email: "+email);
- Meteor.users.insert({profile:{username:username, avatar:avatar}, emails:[{address:email}],services:{ password:{"bcrypt" : "$2a$10$I3erQ084OiyILTv8ybtQ4ON6wusgPbMZ6.P33zzSDei.BbDL.Q4EO"}}});
- }
- }
- });
- }
|