Beispiel #1
0
  AnEvent.findOne({_id : req.body.event_id}, function(err, theEvent) {
    var newAttendeeIDs = theEvent.attendeesIDs;
    var newAttendeeNames = theEvent.attendeesNames;
    var theObjectID = mongoose.Types.ObjectId(req.user._id.toString());
    
    var index = newAttendeeIDs.indexOf(theObjectID);
    
    if (index !== -1) {
      newAttendeeIDs.splice(index, 1);
      newAttendeeNames.splice(index, 1);
    }

    User.update({_id : req.user._id}, {$pull : {activeEvents : theEvent._id}}, function(err) {
      if(err) {
        throw err;
      }
    });
    
    if (newAttendeeIDs.length === 0) {
      AnEvent.remove({_id : theEvent.id}, function(err) {
        res.send({success : true});
      });
    } else {
      AnEvent.update({_id : req.body.event_id}, {$set : {attendeesIDs : newAttendeeIDs, attendeesNames : newAttendeeNames}}, function(err) {
        if(err) {
          throw err;
        }
        res.send({success : true});
      });
    }
  });
Beispiel #2
0
  Building.findOne({name : req.body.building}, function(err, theBuilding) {
    theEvent.buildingName = theBuilding.name;
    theEvent.buildingID = theBuilding._id;

    Class.findOne({_id : mongoose.Types.ObjectId(req.body.class)}, function(err, theClass) {
      theEvent.clsName = theClass.name;
      theEvent.clsNum = theClass.num;
      theEvent.clsID = theClass._id;
      theEvent.ownerName = req.user.fullName;
      theEvent.ownerID = req.user._id;
      theEvent.attendeesNames = [req.user.fullName];
      theEvent.attendeesIDs = [req.user._id];
      theEvent.info = req.body.info;
      theEvent.lat = req.body.lat;
      theEvent.long = req.body.long;
      
      theEvent.startTime = req.body.startTime;
      theEvent.endTime = req.body.endTime;

      User.update({_id : req.user._id}, {$addToSet : {activeEvents : theEvent._id}}, function(err) {
        if(err) {
          throw err;
        }
      });

      theEvent.save(function(err) {
        if(err) {
          throw err;
        } else {
          res.send({success: true});
        }
      });
    });
  });
Beispiel #3
0
  AnEvent.findOne({_id : req.body.event_id}, function(err, theEvent) {
    var newAttendeeIDs = theEvent.attendeesIDs;
    var newAttendeeNames = theEvent.attendeesNames;
    var theObjectID = mongoose.Types.ObjectId(req.user._id.toString());
    //cannot join an event that has already ended
    if(theEvent.endTime < new Date()) {
      res.send({
        success: false,
        alreadyEnded: true
      });
    //Cannot join an event that you have previously joined
    } else if(newAttendeeIDs.indexOf(theObjectID) != -1) {
      res.send({
        success: false,
        alreadyJoined: true
      });
    } else {
      //update mongo and send success
      newAttendeeIDs.push(theObjectID);
      newAttendeeNames.push(req.user.fullName);

      User.update({_id : req.user._id}, {$addToSet : {activeEvents : theEvent._id}}, function(err) {
        if(err) {
          throw err;
        }
      });

      AnEvent.update({_id : req.body.event_id}, {$set : {attendeesIDs : newAttendeeIDs, attendeesNames : newAttendeeNames}}, function(err) {
        if(err) {
          throw err;
        }
        res.send({success : true});
      });
    }
  });
Beispiel #4
0
app.put("/leave_class", ensureAuthenticated, function(req, res) {
  var newClassIDs;
  var newClassNames;
  var newClassNums;
  var newStudentIDs;
  var newStudentNames;

  var theObjectID = mongoose.Types.ObjectId(req.body._id);

  Class.findOne({_id : theObjectID}, function(err, theClass) {
    if(err) {
      throw err;
    }
    User.findOne({facebookID : req.user.facebookID}, function(err, theUser) {
      newClassIDs = theUser.classIDs;
      newClassNames = theUser.classNames;
      newClassNums = theUser.classNums;
      var index = newClassIDs.indexOf(theClass._id);
      if (!(index === -1)) {
        newClassIDs.splice(index, 1);
        newClassNames.splice(index, 1);
        newClassNums.splice(index, 1);
      } else {
        res.send({success: false, alreadyInClass : true});
        return;
      }
      
      newStudentIDs = theClass.studentIDs;
      newStudentNames = theClass.studentNames;
      index = newStudentIDs.indexOf(theUser._id);
      if (!(index === -1)) {
        newStudentIDs.splice(index, 1);
        newStudentNames.splice(index, 1);
      }
      
      User.update({facebookID : req.user.facebookID}, { $set: {classIDs : newClassIDs, classNames : newClassNames, classNums : newClassNums}}, function(err) {
        if (err) {
          throw err;
        }
        Class.update({_id : theClass._id}, { $set: {studentIDs : newStudentIDs, studentNames : newStudentNames}}, function(err) {
          if (err) {
            throw err;
          }
          res.send({success:true});
        });
      });
    });
  });
});
Beispiel #5
0
app.get('/events/:query', ensureAuthenticated, function(req, res) {
  var theUrl = "https://graph.facebook.com/" + req.user.facebookID + "/friends" + "?access_token=" + req.user.facebookAccessToken;
  var friends;
  var classes = req.user.classIDs;
  var events : any = {};
  var query : any = {};
  var JSONQuery = JSON.parse(req.params.query);
  if(JSONQuery.class != undefined) {
    query.clsID = mongoose.Types.ObjectId(JSONQuery.class.toString());
  }
  if(JSONQuery.building != undefined) {
    query.buildingID = mongoose.Types.ObjectId(JSONQuery.building.toString());
  }

  query.clsID = {$in : classes};

  //Find events of length more than "duration" and also have more than "duration" time remaining if they have already started
  if(JSONQuery.duration != undefined) {
    query["$where"] = soHacky(JSONQuery.duration);
    var timeRemaining = new Date();
    timeRemaining.setTime(timeRemaining.getTime() + JSONQuery.duration * 1000 * 60);
    query.endTime = {"$gt" : timeRemaining};
  }

  //First, get facebook friends of user
  request.get(
    {url: theUrl},
    function(e, r, response) {
      response = JSON.parse(response);
      if(e != null) {
        r.send(response);
      } else {
        var idArray = response.data.map(function(val, i) {
          return val.id;
        });

        User.find({}, {facebookAccessToken : 0}).where("facebookID").in(idArray).exec(function(err, records) {
          friends = records;
          for(var i = 0; i < friends.length; i++) {
            //Add events from facebook friends
            for(var j = 0; j < friends[i].activeEvents; j++) {
              events[friends[i].activeEvents[j]] = friends[i].activeEvents[j];;
            }
          }

          //Delete old events that have already ended
          AnEvent.remove({endTime : {$lt : new Date()}}, function(err) {
            if(err) {
              throw err;
            }

            //Add events that match query
            AnEvent.find(query, function(err, moreEvents) {
              if(err) {
                throw err;
              }
              for(var i = 0; i < moreEvents.length; i++) {
                events[moreEvents[i]] = moreEvents[i];
              }
              var eventsArray = [];
              for(var key in events) {
                eventsArray.push(events[key]);
              }
              res.send(eventsArray);
            });
          });
        });
      }
    }
  );
});