MongoID * user_id -> mongoID of the user that posted it * datetime -> mongodate of when the post was posted * body -> the text of the post * level -> access level required to see the post * comments[] => list of comments * type -> the type of post, IE picture text, chat etc */ /** * Parses an array of words to find mentions and topic tags then converts them * @param Entitiy $entity Not used, but otherwise lithium will pass entity into words which makes the program blowup * @param Mixed $input, either a string, or a spilt array of words (ie an exploded string) * @return String a string with the topics and mentions converted */ public function parse($entity, $input) { //If $input is an array, set words to it otherwise, explode it. $words = (is_array($input)) ? $input : explode(" ", $input); //Count the number of words $count = count($words); //For each word in the array for ($i = 0; $i < $count; $i++) { //If the word begins with a '@' convert it to a mention if ($words[$i][0] == '@') { $words[$i] = $this->convertToMention($words[$i]); } //Else if the word beings with a '#' Convert to topic link else if ($words[$i][0] == '#') { $words[$i] = $this->convertToTopic($words[$i]); } } return implode(" ", $words); } //TODO: Some sort of security check to make sure //That the user is ok with receiving message public function directMessage($entity, $to) { //Get the user the message is to $user = User::find('first', array('conditions' => array('username' => $to))); //If find() returned a user, if ($user) { //Add the post to their feed, var_dump($entity->data()); $entity->save(); return $entity->store($user); } //If the user wasn't found return false; } /** * Converts a string with a topic tag(eg: #madoka) to clickable link to the topic eg #madoka * @param String $input The string with topic tag * @return String the string with href */ public function convertToTopic($input) { //Remove the # character from the beginning $output = substr($input, 1); //Formats the string and returns it. return "$input"; } /** * converts a mention (eg: @bob) to a clickable link to the user's profile eg #madoka * @param String $input The string with topic tag * @return String the string with href */ public function convertToMention($input) { //Remove the @ character from the beginning $output = substr($input, 1); //Formats the string and returns it. return "$input"; } /** * Stores the post to all the user's friends feed * @param Post $entity The post to be stored * @param Array $users an Array of users objects to store the post to * @return boolean True if sucsessful, false otherwise */ //Store all can take a single param as well, therefore it should replace the store method once we're sure it works properly :TODO: public function storeAll($entity, $users) { $ids; foreach($users as $user) { $ids[] = $user->_id; } $updateData = array('$push' => array('feed' => $entity['_id']->__toString())); $conditions = array('_id' => array('$in' => $ids)); $result = User::update($updateData, $conditions, array('atomic' => false)); return $result; } /** * Stores the post to the database * @param Post $entity The post to store. * @param User $user The user to store the post to. */ public function store($entity, $user) { $updateData = array('$push' => array('feed' => $entity['_id']->__toString())); $conditions = array('_id' => $user['_id']); $result = User::update($updateData, $conditions, array('atomic' => false)); return $result; } } ?>