if (!isset($_SESSION['user'])) { header("Location: /session/login.php"); } // set up chdir(".."); require_once 'config.webapp.inc.php'; ini_set("include_path", ini_get("include_path") . PATH_SEPARATOR . $INCLUDE_PATH); require_once "init.php"; $db = new Database($TWITALYTIC_CFG); $conn = $db->getConnection(); $ud = new UserDAO($db); $fd = new FollowDAO($db); $id = new InstanceDAO($db); $td = new TweetDAO($db); if (isset($_REQUEST['u']) && $ud->isUserInDBByName($_REQUEST['u']) && isset($_REQUEST['i'])) { $user = $ud->getUserByName($_REQUEST['u']); $i = $id->getByUsername($_REQUEST['i']); if (isset($i)) { $cfg = new Config($i->twitter_username, $i->twitter_user_id); $s = new SmartyTwitalytic(); if (!$s->is_cached('user.index.tpl', $i->twitter_username . "-" . $user['user_name'])) { $s->assign('profile', $user); $s->assign('user_statuses', $td->getAllTweets($user['user_id'], 20)); $s->assign('sources', $td->getStatusSources($user['user_id'])); $s->assign('cfg', $cfg); $s->assign('instance', $i); $exchanges = $td->getExchangesBetweenUsers($cfg->twitter_user_id, $user['user_id']); $s->assign('exchanges', $exchanges); $s->assign('total_exchanges', count($exchanges)); $mutual_friends = $fd->getMutualFriends($user['user_id'], $i->twitter_user_id); $s->assign('mutual_friends', $mutual_friends);
/** * Convert the post as it is returned from the database to how it looks when output by the Twitter API. * Also, add the replies into the post with the index "replies". * * If the $post parameter is not a Post object, the function returns null. * * @param Post $post The post object. * @return stdObject The post formatted to look like the Twitter API. */ private function convertPostToTweet($post) { if (!$post instanceof Post) { return null; } if ($this->include_replies) { /* * Get all replies to the post. The limit is set to 0 because if the count is not greater than 0, * the method returns all replies. */ $replies = $this->post_dao->getRepliesToPost($post->post_id, $post->network, $this->order_by, $this->unit, $this->is_public, 0); // if replies exist for this post if ($replies) { // recursively scan through the post replies, converting them foreach ($replies as $reply) { $reply = $this->convertPostToTweet($reply); } // add the replies to the post $post->replies = $replies; } } /* * Chop and changing the data fetched from the database to look more like the official Twitter API. */ $post->text = $post->post_text; $post->created_at = strftime('%a %b %d %T %z %Y', strtotime($post->pub_date)); $post->id = $post->post_id; $post->favorited = $post->favorited ? true : false; $post->annotations = null; // to be implemented at some point $post->truncated = false; // always false $post->protected = $post->is_protected == 0 ? false : true; if ($post->geo != null) { $coordinates = preg_split('/(, |,| )/', $post->geo); $post->geo = new stdClass(); $post->geo->coordinates = $coordinates; if (!isset($post->coordinates)) { $post->coordinates = new stdClass(); } $post->coordinates->coordinates = $coordinates; } /* * SET THINKUP METADATA */ $post->thinkup = new stdClass(); $post->thinkup->retweet_count_cache = $post->retweet_count_cache; $post->thinkup->retweet_count_api = $post->retweet_count_api; $post->thinkup->reply_count_cache = $post->reply_count_cache; $post->thinkup->old_retweet_count_cache = $post->old_retweet_count_cache; $post->thinkup->is_geo_encoded = $post->is_geo_encoded; $user = $this->user_dao->getUserByName($post->author_username, $post->network); /* * Occasionally you run into users you haven't fetched yet. Bypass this code if you find one of them. */ if ($user != null) { if (!$this->trim_user) { $post->user = $this->convertUserToStdClass($user); $post->user->id = $post->user->user_id; $post->user->followers_count = $post->user->follower_count; $post->user->profile_image_url = $post->user->avatar; $post->user->name = $post->user->full_name; $post->user->screen_name = $post->user->username; $post->user->statuses_count = $post->user->post_count; $post->user->created_at = strftime('%a %b %d %T %z %Y', strtotime($post->user->joined)); $post->user->favorites_count = $post->user->favorites_count; if (isset($post->user->other)) { if (isset($post->user->other['avg_tweets_per_day'])) { $post->user->avg_tweets_per_day = $post->user->other['avg_tweets_per_day']; } } $post->user->thinkup = new stdClass(); $post->user->thinkup->last_post = $post->user->last_post; $post->user->thinkup->last_post_id = $post->user->last_post_id; $post->user->thinkup->found_in = $post->user->found_in; } else { $post->user = new stdClass(); $post->user->id = $user->user_id; } } if ($this->include_entities) { /* * Gather hashtags and format them into a Tweet entity. */ $extracted_hashtags = Post::extractHashtags($post->text); if (!isset($post->entities)) { $post->entities = new stdClass(); } $post->entities->hashtags = array(); if (!empty($extracted_hashtags)) { foreach ($extracted_hashtags as $hashtag_text) { $hashtag = new stdClass(); $hashtag->text = str_replace('#', '', $hashtag_text); $hashtag->indices[] = stripos($post->text, $hashtag_text); $hashtag->indices[] = strlen($hashtag_text) + $hashtag->indices[0]; $post->entities->hashtags[] = $hashtag; } } /* * Gather mentions and format them into a Tweet entity. */ $mentions = Post::extractMentions($post->text); if (!isset($post->entities)) { $post->entities = new stdClass(); } $post->entities->user_mentions = array(); if (!empty($mentions)) { foreach ($mentions as $username) { $mentioned_user = $this->user_dao->getUserByName(str_replace('@', '', $username), $user->network); $mention = new stdClass(); if (is_null($mentioned_user)) { // skip this for now, probably not a good idea continue; /* * If the user is not in our own ThinkUp database, a Twitter API call needs to be * made to fill in the missing details. * * Not 100% sure if this is a good idea but it works. */ $user_api_call = json_decode(Utils::getURLContents('https://api.twitter.com/1/users/show.json?screen_name=' . $username)); $mention->name = $user_api_call->name; $mention->id = $user_api_call->id; $mention->screen_name = $user_api_call->screen_name; } else { $mention->name = $mentioned_user->full_name; $mention->id = $mentioned_user->user_id; $mention->screen_name = $mentioned_user->username; } $mention->indices = array(); $mention->indices[] = stripos($post->text, $username); $mention->indices[] = strlen($username) + $mention->indices[0]; $post->entities->user_mentions[] = $mention; } } } if ($post->in_retweet_of_post_id != null) { $post->retweeted_status = $this->post_dao->getPost($post->in_retweet_of_post_id, $user->network); $post->retweeted_status = $this->convertPostToTweet($post->retweeted_status); } /* * Unset no-longer-used variables in this post; mostly variables that have been moved to more * Twtter like locations / naming conventions. */ unset($post->post_id, $post->pub_date, $post->network, $post->post_text, $post->author, $post->author_fullname, $post->author_username, $post->author_user_id, $post->author_avatar, $post->adj_pub_date, $post->user->follower_count, $post->user->is_protected, $post->user->network, $post->user->avatar, $post->user->full_name, $post->user->username, $post->user->user_id, $post->user->post_count, $post->user->joined, $post->user->favorites_count, $post->user->other, $post->link, $post->in_retweet_of_post_id, $post->in_retweet_of_user_id, $post->retweet_count_cache, $post->reply_count_cache, $post->old_retweet_count_cache, $post->is_geo_encoded, $post->rt_threshold, $post->is_protected, $post->user->last_post, $post->user->last_post_id, $post->user->found_in); return $post; }
function testGetUserByNameUserDoesNotExist() { $udao = new UserDAO($this->db, $this->logger); $user = $udao->getUserByName('gina'); $this->assertTrue(!isset($user)); }