diff --git a/actions/favorited.php b/actions/favorited.php index 9ffa5b8445..d8980440d1 100644 --- a/actions/favorited.php +++ b/actions/favorited.php @@ -186,10 +186,13 @@ class FavoritedAction extends Action function showContent() { $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff')); + $cutoff = sprintf("fave.modified > '%s'", + common_sql_date(time() - common_config('popular', 'cutoff'))); $qry = 'SELECT notice.*, '. $weightexpr . ' as weight ' . 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . + "WHERE $cutoff " . 'GROUP BY id,profile_id,uri,content,rendered,url,created,notice.modified,reply_to,is_local,source,notice.conversation ' . 'ORDER BY weight DESC'; diff --git a/actions/publictagcloud.php b/actions/publictagcloud.php index 9e4478dbb1..9993b2d3fd 100644 --- a/actions/publictagcloud.php +++ b/actions/publictagcloud.php @@ -106,7 +106,10 @@ class PublictagcloudAction extends Action #Add the aggregated columns... $tags->selectAdd('max(notice_id) as last_notice_id'); $calc = common_sql_weight('created', common_config('tag', 'dropoff')); + $cutoff = sprintf("notice_tag.created > '%s'", + common_sql_date(time() - common_config('tag', 'cutoff'))); $tags->selectAdd($calc . ' as weight'); + $tags->addWhere($cutoff); $tags->groupBy('tag'); $tags->orderBy('weight DESC'); diff --git a/classes/Notice.php b/classes/Notice.php index 42878d94f1..f9f3863579 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1468,4 +1468,25 @@ class Notice extends Memcached_DataObject $handler->handle($this); } } + + function insert() + { + $result = parent::insert(); + + if ($result) { + // Profile::hasRepeated() abuses pkeyGet(), so we + // have to clear manually + if (!empty($this->repeat_of)) { + $c = self::memcache(); + if (!empty($c)) { + $ck = self::multicacheKey('Notice', + array('profile_id' => $this->profile_id, + 'repeat_of' => $this->repeat_of)); + $c->delete($ck); + } + } + } + + return $result; + } } diff --git a/classes/statusnet.ini b/classes/statusnet.ini index 4ace4407b1..a535159e80 100644 --- a/classes/statusnet.ini +++ b/classes/statusnet.ini @@ -586,6 +586,7 @@ modified = 384 [user_group__keys] id = N +nickname = U [user_openid] canonical = 130 diff --git a/lib/default.php b/lib/default.php index 437f350dda..16d1330f06 100644 --- a/lib/default.php +++ b/lib/default.php @@ -144,9 +144,11 @@ $default = 'invite' => array('enabled' => true), 'tag' => - array('dropoff' => 864000.0), + array('dropoff' => 864000.0, # controls weighting based on age + 'cutoff' => 86400 * 90), # only look at notices posted in last 90 days 'popular' => - array('dropoff' => 864000.0), + array('dropoff' => 864000.0, # controls weighting based on age + 'cutoff' => 86400 * 90), # only look at notices favorited in last 90 days 'daemon' => array('piddir' => '/var/run', 'user' => false, diff --git a/lib/grouptagcloudsection.php b/lib/grouptagcloudsection.php index 14ceda0850..f1106cc7bf 100644 --- a/lib/grouptagcloudsection.php +++ b/lib/grouptagcloudsection.php @@ -59,6 +59,7 @@ class GroupTagCloudSection extends TagCloudSection function getTags() { $weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff')); + // @fixme should we use the cutoff too? Doesn't help with indexing per-group. $names = $this->group->getAliases(); diff --git a/lib/personaltagcloudsection.php b/lib/personaltagcloudsection.php index 091425f926..5ea3f188db 100644 --- a/lib/personaltagcloudsection.php +++ b/lib/personaltagcloudsection.php @@ -59,6 +59,7 @@ class PersonalTagCloudSection extends TagCloudSection function getTags() { $weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff')); + // @fixme should we use the cutoff too? Doesn't help with indexing per-user. $qry = 'SELECT notice_tag.tag, '. $weightexpr . ' as weight ' . diff --git a/lib/popularnoticesection.php b/lib/popularnoticesection.php index fbf9a60ab8..296ddbbb50 100644 --- a/lib/popularnoticesection.php +++ b/lib/popularnoticesection.php @@ -59,12 +59,15 @@ class PopularNoticeSection extends NoticeSection } } $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff')); + $cutoff = sprintf("fave.modified > '%s'", + common_sql_date(time() - common_config('popular', 'cutoff'))); $qry = "SELECT notice.*, $weightexpr as weight "; if(isset($tag)) { $qry .= 'FROM notice_tag, notice JOIN fave ON notice.id = fave.notice_id ' . - "WHERE notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag"; + "WHERE $cutoff and notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag"; } else { - $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id'; + $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id ' . + "WHERE $cutoff"; } $qry .= ' GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' . 'notice.rendered,notice.url,notice.created,notice.modified,' . diff --git a/scripts/clearcache.php b/scripts/clearcache.php index 702c1e3d67..0fb75daa03 100644 --- a/scripts/clearcache.php +++ b/scripts/clearcache.php @@ -20,35 +20,35 @@ define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); -$shortoptions = "t:c:v:k:"; +$shortoptions = "t:l:v:k:"; -$helptext = << clears the cached object based on the args -t table Table to look up - -c column Column to look up, default "id" + -l column Column to look up, default "id" -v value Value to look up -k key Key to look up; other args are ignored -ENDOFHELP; +END_OF_CLEARCACHE_HELP; require_once INSTALLDIR.'/scripts/commandline.inc'; -$karg = get_option_value('k'); +$karg = get_option_value('k', 'key'); if (!empty($karg)) { $k = common_cache_key($karg); } else { - $table = get_option_value('t'); + $table = get_option_value('t', 'table'); if (empty($table)) { die("No table or key specified\n"); } - $column = get_option_value('c'); + $column = get_option_value('l', 'column'); if (empty($column)) { $column = 'id'; } - $value = get_option_value('v'); + $value = get_option_value('v', 'value'); $k = Memcached_DataObject::cacheKey($table, $column, $value); } diff --git a/scripts/setup_status_network.sh b/scripts/setup_status_network.sh index 4ad808011c..89d15415f9 100755 --- a/scripts/setup_status_network.sh +++ b/scripts/setup_status_network.sh @@ -13,6 +13,11 @@ export sitename="$2" export tags="$3" export email="$4" export fullname="$5" +export siteplan="$6" + +if [ "$siteplan" == '' ]; then + siteplan='single-user' +fi # Fixme: if this is changed later we need to update profile URLs # for the created user. @@ -71,6 +76,7 @@ then sed "s/\$nickname/$nickname/" | \ sed "s/\$sitename/$sitename/" | \ sed "s/\$userpass/$userpass/" | \ + sed "s/\$siteplan/$siteplan/" | \ php $PHPBASE/scripts/sendemail.php \ -s"$server" \ -n"$nickname" \ diff --git a/scripts/showcache.php b/scripts/showcache.php index f179795728..93b57a484b 100644 --- a/scripts/showcache.php +++ b/scripts/showcache.php @@ -20,14 +20,14 @@ define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); -$shortoptions = "t:c:v:k:"; +$shortoptions = "t:l:v:k:"; $helptext = << shows the cached object based on the args -t table Table to look up - -c column Column to look up, default "id" + -l column Column to look up, default "id" -v value Value to look up -k key Key to look up; other args are ignored @@ -44,7 +44,7 @@ if (!empty($karg)) { if (empty($table)) { die("No table or key specified\n"); } - $column = get_option_value('c'); + $column = get_option_value('l'); if (empty($column)) { $column = 'id'; } diff --git a/scripts/updateprofileurl.php b/scripts/updateprofileurl.php new file mode 100644 index 0000000000..2fc6828e60 --- /dev/null +++ b/scripts/updateprofileurl.php @@ -0,0 +1,99 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +$shortoptions = 'i:n:a'; +$longoptions = array('id=', 'nickname=', 'all'); + +$helptext = <<find()) { + while ($user->fetch()) { + updateProfileURL($user); + } + } + } else { + show_help(); + exit(1); + } +} catch (Exception $e) { + print $e->getMessage()."\n"; + exit(1); +} + +function updateProfileURL($user) +{ + $profile = $user->getProfile(); + + if (empty($profile)) { + throw new Exception("Can't find profile for user $user->nickname ($user->id)"); + } + + $orig = clone($profile); + + $profile->profileurl = common_profile_url($user->nickname); + + if (!have_option('q', 'quiet')) { + print "Updating profile url for $user->nickname ($user->id) ". + "from $orig->profileurl to $profile->profileurl..."; + } + + $result = $profile->update($orig); + + if (!$result) { + print "FAIL.\n"; + common_log_db_error($profile, 'UPDATE', __FILE__); + throw new Exception("Can't update profile for user $user->nickname ($user->id)"); + } + + common_broadcast_profile($profile); + + print "OK.\n"; +}