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;
}
}
?>