'/create/:user_id/:user_name', 'delete' => '/delete/:post_id', 'to' => '/to/wall/:user_id/:poster_id', 'viewall' => '/viewall/:user_id/:user_name', ); } //-------------------------------------------- // Index action, does nothing :P //-------------------------------------------- function index(&$reg, &$req, &$resp) { $this->checkLogin($reg, $req, $resp); $user = &$reg->get('user'); $this->redirect('/profile/'. $user->getId() .'/'. $user->get('name') .'/'); } //-------------------------------------------- // Some generic things used in wall posts. //-------------------------------------------- function &_genericWallStuff(&$reg, &$req, &$resp, $quick = FALSE) { $info = &new InformationDisplay($reg, $req, $resp); $user = &$reg->get('user'); //-------------------------------------------- // Check that the user we are posting to exists. //-------------------------------------------- if($req->get('user_id') == $user->getId()) { $member = &$user; } else { $finder = &$this->getFinder('users'); $member = &$finder->find($req->get('user_id')); if($member === NULL) { if($quick) { exit(); } else { $info->text("That user doesn't exist!"); } } } return $member; } //-------------------------------------------- // Create a wall post. //-------------------------------------------- function create(&$reg, &$req, &$resp) { $this->checkLogin($reg, $req, $resp); $info = &new InformationDisplay($reg, $req, $resp); $user = &$reg->get('user'); //-------------------------------------------- // Get the user. //-------------------------------------------- $member = &$this->_genericWallStuff($reg, $req, $resp, FALSE); //-------------------------------------------- // Finish up with all the usual template junk :D //-------------------------------------------- $resp->assignRef('member', $member); $resp->assign('content', 'wall_create_form.html'); $this->setPage("Post to Wall: ". $member->get('name')); $this->setLayout('forum_base.html'); } //-------------------------------------------- // Save a wall post. //-------------------------------------------- function _save(&$reg, &$req, &$resp, $quick = FALSE) { $this->checkLogin($reg, $req, $resp); if($quick) { $this->checkXHR(); } $info = &new InformationDisplay($reg, $req, $resp); $user = &$reg->get('user'); //-------------------------------------------- // Create the post... //-------------------------------------------- $finder = &$this->getFinder('wall_posts'); $post = &$finder->createRecord(); //-------------------------------------------- // Get the user. //-------------------------------------------- $member = &$this->_genericWallStuff($reg, $req, $resp, $quick); $created = time(); //-------------------------------------------- // Parse the bbcode in the revision's body. //-------------------------------------------- $req->registerFilter('body', new K4BBParserFilter); $text = trim($req->get('body')); if($text == '') { if(!$edit) { $info->text("You didn't write anything to post to this persons wall!"); } else { exit(); } } //-------------------------------------------- // Set the wall post info. //-------------------------------------------- $post->set('user_id', $member->getId()); $post->set('poster_id', $user->getId()); $post->set('private', $req->get('private') == 1 ? 1 : 0); $post->set('created', $created); $post->set('body', $text); $post->save(); //-------------------------------------------- // Update the user that we are posting to. //-------------------------------------------- $finder = &$this->getFinder('users'); $finder->updateWhere("num_new_wall_posts=num_new_wall_posts+1, last_wall_post=?", "user_id=?", array($created, $member->getId())); //-------------------------------------------- // Done! //-------------------------------------------- if($quick) { $post->set('poster_name', $user->get('name')); //-------------------------------------------- // Do all the template junk. //-------------------------------------------- $resp->assign('row_class', 'row1'); $resp->assignRef('post', $post); $this->setLayout('wall_post_view.html'); } else { $this->redirect('/profile/'. $member->getId() .'/'. $member->get('name') .'/'); } } //-------------------------------------------- // Save a wall post. //-------------------------------------------- function save(&$reg, &$req, &$resp) { $this->_save($reg, $req, $resp, FALSE); } //-------------------------------------------- // Quick save a wall post. //-------------------------------------------- function quicksave(&$reg, &$req, &$resp) { $this->_save($reg, $req, $resp, TRUE); } //-------------------------------------------- // Delete all wall posts. //-------------------------------------------- function deleteall(&$reg, &$req, &$resp) { $this->checkLogin($reg, $req, $resp); $info = &new InformationDisplay($reg, $req, $resp); $user = &$reg->get('user'); //-------------------------------------------- // Delete the posts. //-------------------------------------------- $finder = &$this->getFinder('wall_posts'); $finder->deleteWhere("user_id=?", array($user->getId())); //-------------------------------------------- // Update this user's profile. //-------------------------------------------- $user->set('num_new_wall_posts', 0); $user->set('last_wall_view', time()); $user->set('last_wall_post', 0); $user->save(); //-------------------------------------------- // Done, redirect the user. //-------------------------------------------- $this->redirect($this->popReferer()); } //-------------------------------------------- // Delete a single wall post. //-------------------------------------------- function delete(&$reg, &$req, &$resp) { $this->checkLogin($reg, $req, $resp); $info = &new InformationDisplay($reg, $req, $resp); $user = &$reg->get('user'); //-------------------------------------------- // Get the post. //-------------------------------------------- $finder = &$this->getFinder('wall_posts'); $post = &$finder->findWhere("wp.post_id=? AND wp.user_id=?", array($req->get('post_id'), $user->getId())); if($post === NULL) { $info->text("The wall post that you are trying to delete doesn't exist on your wall."); } //-------------------------------------------- // Delete the post. //-------------------------------------------- $finder->deleteWhere("user_id=? AND post_id=?", array($user->getId(), $post->getId())); //-------------------------------------------- // Do we update the user? //-------------------------------------------- if($post->get('created') > $user->get('last_wall_view')) { //-------------------------------------------- // We use the finder instead of the user object // just because I want a bit more flexibility with // the update. //-------------------------------------------- $finder = &$this->getFinder('users'); $finder->updateWhere("num_new_wall_posts=num_new_wall_posts-1", "num_new_wall_posts>0 AND user_id=?", array($user->getId())); } //-------------------------------------------- // We're done, redirect... //-------------------------------------------- $this->redirect($this->popReferer()); } //-------------------------------------------- // Wall-to-wall. :D //-------------------------------------------- function to(&$reg, &$req, &$resp) { $info = &new InformationDisplay($reg, $req, $resp); $user = &$reg->get('user'); $finder = &$this->getFinder('users'); //-------------------------------------------- // Get the two users for the wall-to-wall. //-------------------------------------------- $member = &$finder->find($req->get('user_id')); $poster = &$finder->find($req->get('poster_id')); if($member === NULL || $poster == NULL) { $info->text("One of the users in the wall-to-wall doesn't seem to exist."); } //-------------------------------------------- // Get the posts. //-------------------------------------------- $extra = $member->getId() == $user->getId() || $poster->getId() == $user->getId() ? ' AND wp.private<=1' : ' AND wp.private=0'; $finder = &$this->getFinder('wall_posts'); $posts = &$finder->findAllWhere('((wp.user_id=? AND wp.poster_id=?) OR (wp.user_id=? AND wp.poster_id=?))'. $extra, array($member->getId(), $poster->getId(), $poster->getId(), $member->getId()), 'created DESC'); //-------------------------------------------- // Finish up with all the template junk. //-------------------------------------------- $resp->assignRef('wall_posts', $posts); $resp->assignRef('member', $member); $resp->assignRef('poster', $poster); $resp->assign('content', 'wall_to_wall.html'); $this->setPage("Wall-to-Wall: ". $member->get('name') .' and '. $poster->get('name')); $this->setLayout('forum_base.html'); } //-------------------------------------------- // View all of the wall posts at once, in one big // long list. //-------------------------------------------- function viewall(&$reg, &$req, &$resp) { $info = &new InformationDisplay($reg, $req, $resp); $user = &$reg->get('user'); //-------------------------------------------- // Get the user. //-------------------------------------------- $member = &$this->_genericWallStuff($reg, $req, $resp, $quick); //-------------------------------------------- // Get the wall posts. //-------------------------------------------- $finder = &$this->getFinder('wall_posts'); $posts = &$finder->findAllWhere("wp.user_id=? AND wp.private ". ($user->getId() == $member->getId() ? '<=' : '<') ." 1", array($member->getId()), 'created DESC'); //-------------------------------------------- // Update this user's number of new wall posts if // they have them. I use the users finder with // updateWhere so that in the template I can still // show a 'new' icon beside the new posts :D //-------------------------------------------- if($user->getId() == $member->getId() && $user->get('num_new_wall_posts') > 0) { $finder = &$this->getFinder('users'); $finder->updateWhere("num_new_wall_posts=0,last_wall_view=?", "user_id=?", array(time(), $user->getId())); } //-------------------------------------------- // The usual template junk :D //-------------------------------------------- $resp->assign('wall_viewing_all', 1); $resp->assignRef('wall_posts', $posts); $resp->assignRef('member', $member); $resp->assign('content', 'wall_view_all.html'); $this->setPage("Wall Posts: ". $member->get('name')); $this->setLayout('forum_base.html'); } } ?>