Пример #1
0
 public function generateInsight(Instance $instance, User $user, $last_week_of_posts, $number_days)
 {
     parent::generateInsight($instance, $user, $last_week_of_posts, $number_days);
     $this->logger->logInfo("Begin generating insight", __METHOD__ . ',' . __LINE__);
     $joined_ts = strtotime($user->joined, TimeHelper::getTime());
     $viable = $joined_ts > strtotime('2000-01-1');
     $joined_day = date('m-d', $joined_ts);
     $is_twitter = $instance->network == 'twitter';
     if ($viable && $is_twitter && date('m-d', TimeHelper::getTime()) == $joined_day) {
         $insight = new Insight();
         $insight->slug = "twitterbirthday";
         $insight->instance_id = $instance->id;
         $insight->date = $this->insight_date;
         $insight->emphasis = Insight::EMPHASIS_HIGH;
         $insight->filename = basename(__FILE__, ".php");
         $follow_dao = DAOFactory::getDAO('FollowDAO');
         $all_friends = $follow_dao->countTotalFriends($instance->network_user_id, $instance->network);
         $late_friends = $follow_dao->countTotalFriendsJoinedAfterDate($instance->network_user_id, $instance->network, $user->joined);
         $years = date('Y', TimeHelper::getTime()) - date('Y', $joined_ts);
         $ordinal_age = $this->terms->getOrdinalAdverb($years);
         $insight->headline = "A Very Happy {$ordinal_age} Twitter Birthday!";
         $insight->text = $this->username . " joined Twitter {$years} year" . ($years == 1 ? '' : 's') . " ago today";
         if ($all_friends > 0 && $late_friends > 0) {
             $percent_before = floor($late_friends / $all_friends * 100);
             $insight->text .= ", " . "before " . $percent_before . "% of the people " . $this->username . " follows did.";
         } else {
             $insight->text .= ".";
         }
         $week_seconds = 60 * 60 * 24 * 7;
         $followers = $follow_dao->getFriendsJoinedInTimeFrame($user->user_id, $instance->network, date('Y-m-d', $joined_ts - $week_seconds), date('Y-m-d', $joined_ts + $week_seconds));
         $just_before = null;
         $just_after = null;
         $last_user = null;
         foreach ($followers as $follower) {
             if (strtotime($follower->joined, TimeHelper::getTime()) > $joined_ts) {
                 $just_after = $follower;
                 $just_before = $last_user;
                 break;
             }
             $last_user = $follower;
         }
         if (!$just_after && $last_user) {
             $just_before = $last_user;
         }
         $bonus_text = array();
         $people = array();
         if ($just_before) {
             $time = TimeHelper::secondsToGeneralTime(abs($joined_ts - strtotime($just_before->joined, TimeHelper::getTime())));
             $bonus_text[] = "@" . $just_before->username . " just beat " . $this->username . ", joining {$time} earlier";
             $people[] = $just_before;
         }
         if ($just_after) {
             $time = TimeHelper::secondsToGeneralTime(abs($joined_ts - strtotime($just_after->joined, TimeHelper::getTime())));
             $bonus_text[] = "@" . $just_after->username . " was a little slower, getting on Twitter {$time} later";
             $people[] = $just_after;
         }
         if (count($bonus_text)) {
             $insight->text .= " " . join(', and ', $bonus_text) . ".";
             $insight->setPeople($people);
         }
         $res = $this->insight_dao->insertInsight($insight);
     }
     $this->logger->logInfo("Done generating insight", __METHOD__ . ',' . __LINE__);
 }
Пример #2
0
 public function testSecondsToGeneralTime()
 {
     $minute = 60;
     $hour = 60 * $minute;
     $day = $hour * 24;
     $week = $day * 7;
     $this->assertEqual('1 second', TimeHelper::secondsToGeneralTime(1));
     $this->assertEqual('0 seconds', TimeHelper::secondsToGeneralTime(0));
     $this->assertEqual('11 seconds', TimeHelper::secondsToGeneralTime(11));
     $this->assertEqual('1 minute', TimeHelper::secondsToGeneralTime($minute));
     $this->assertEqual('6 minutes', TimeHelper::secondsToGeneralTime($minute * 6));
     $this->assertEqual('1 hour', TimeHelper::secondsToGeneralTime($hour));
     $this->assertEqual('23 hours', TimeHelper::secondsToGeneralTime($hour * 23));
     $this->assertEqual('1 day', TimeHelper::secondsToGeneralTime($hour * 26));
     $this->assertEqual('3 days', TimeHelper::secondsToGeneralTime($day * 3));
     $this->assertEqual('1 week', TimeHelper::secondsToGeneralTime($week));
     $this->assertEqual('1 week', TimeHelper::secondsToGeneralTime($day * 8));
     $this->assertEqual('3 weeks', TimeHelper::secondsToGeneralTime($day * 23));
     $this->assertEqual('2 weeks', TimeHelper::secondsToGeneralTime($week * 2));
 }
Пример #3
0
 private function calculateTime($total)
 {
     // 45 minutes per posting, a rough estimate
     return TimeHelper::secondsToGeneralTime($total * 45 * 60);
 }