'/:(int)member_id/:member_name', ); } //-------------------------------------------- // View a single member's profile.. or rather, their // public wall posts and some stats about them. //-------------------------------------------- function profile(&$reg, &$req, &$resp) { $info = &new InformationDisplay($reg, $req, $resp); $user = &$reg->get('user'); //-------------------------------------------- // Bad id... //-------------------------------------------- $member_id = intval($req->get('member_id')); if($member_id <= K4_GUEST_ID) { $info->display('permsRequired'); } //-------------------------------------------- // Try to get the user. The check for the member id // versus our user id doesn't actually need to be // done because of database result caching.. but // whatever. //-------------------------------------------- if($member_id == $user->getId()) { $member = &$user; } else { $finder = &$this->getFinder('users'); $member = &$finder->find($member_id); if($member === NULL) { $info->text("The selected user does not exist."); } } //-------------------------------------------- // Make sure this member has posted threads before // we commit to some of these queries. //-------------------------------------------- if($member->get('num_threads') > 0) { //-------------------------------------------- // Try to figure out commonly used tags by this // member. //-------------------------------------------- $sql = ""; $sql .= "SELECT t.tag_name, COUNT(tt.tag_id) AS tag_count FROM "; $sql .= "k4_tags t, k4_thread_users tu JOIN k4_thread_tags tt USING (thread_id) "; $sql .= "WHERE t.tag_id=tt.tag_id "; $sql .= "AND "; $sql .= "tu.thread_id=tt.thread_id "; $sql .= "AND "; $sql .= "tu.user_id=? "; $sql .= "GROUP BY t.tag_id ORDER BY tag_count DESC, t.tag_name ASC LIMIT 0,50"; $dba = &$reg->get('dba'); $used_tags = &$dba->executeQuery($sql, array($member->getId())); //-------------------------------------------- // Loop through the tags we found and create a tally // of the total count of all of the tags so that we // can make a nice tag cloud :D //-------------------------------------------- $num_total_tags = 0; while($used_tags->next()) { $tag = &$used_tags->current(); $num_total_tags += intval($tag['tag_count']); } require_once FA_COMPONENTS_DIR .'/tag_cloud_iterator.php'; $resp->assignRef('tag_cloud', new TagCloudIterator($used_tags, $num_total_tags)); //-------------------------------------------- // Figure out the recent threads of this member //-------------------------------------------- $finder = &$this->getFinder('threads'); $threads = &$finder->findAllWhere("t.user_id=?", array($member->getId()), 'created DESC', FALSE, 10); $resp->assignRef('recent_threads', $threads); } //-------------------------------------------- // Get this users wall posts :D //-------------------------------------------- $finder = &$this->getFinder('wall_posts'); $posts = &$finder->findAllWhere("wp.user_id=? AND (wp.private ". ($user->getId() == $member->getId() ? '<=' : '<') ." 1 OR wp.private=1 AND wp.poster_id=". $user->getId() .")", array($member->getId()), 'created DESC', FALSE, 10); $resp->assignRef('wall_posts', $posts); //-------------------------------------------- // 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=0,last_wall_view=?", "user_id=?", array(time(), $user->getId())); } //-------------------------------------------- // Do all the usual template junk :D //-------------------------------------------- $resp->assignRef('member', $member); $resp->assign('content', 'profile_index.html'); $this->setPage("Viewing Profile: ". $member->get('name')); $this->setLayout('forum_base.html'); } function mail(&$reg, &$req, &$resp) { $this->index($reg, $req, $resp); } function message(&$reg, &$req, &$resp) { $this->index($reg, $req, $resp); } } ?>