diff options
-rw-r--r-- | actions/favorited.php | 3 | ||||
-rw-r--r-- | actions/publictagcloud.php | 3 | ||||
-rw-r--r-- | classes/Notice.php | 21 | ||||
-rw-r--r-- | classes/statusnet.ini | 1 | ||||
-rw-r--r-- | lib/default.php | 6 | ||||
-rw-r--r-- | lib/grouptagcloudsection.php | 1 | ||||
-rw-r--r-- | lib/personaltagcloudsection.php | 1 | ||||
-rw-r--r-- | lib/popularnoticesection.php | 7 | ||||
-rw-r--r-- | scripts/clearcache.php | 16 | ||||
-rwxr-xr-x | scripts/setup_status_network.sh | 6 | ||||
-rw-r--r-- | scripts/showcache.php | 6 | ||||
-rw-r--r-- | scripts/updateprofileurl.php | 99 |
12 files changed, 155 insertions, 15 deletions
diff --git a/actions/favorited.php b/actions/favorited.php index 9ffa5b844..d8980440d 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 9e4478dbb..9993b2d3f 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 42878d94f..f9f386357 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 4ace4407b..a535159e8 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 2bedc4bf0..485a08ba4 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 14ceda085..f1106cc7b 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 091425f92..5ea3f188d 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 fbf9a60ab..296ddbbb5 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 702c1e3d6..0fb75daa0 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 = <<<ENDOFHELP +$helptext = <<<END_OF_CLEARCACHE_HELP USAGE: clearcache.php <args> 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 4ad808011..89d15415f 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 f17979572..93b57a484 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 = <<<ENDOFHELP USAGE: showcache.php <args> 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 000000000..2fc6828e6 --- /dev/null +++ b/scripts/updateprofileurl.php @@ -0,0 +1,99 @@ +#!/usr/bin/env php +<?php +/* + * StatusNet - a distributed open-source microblogging tool + * Copyright (C) 2008, 2009, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +$shortoptions = 'i:n:a'; +$longoptions = array('id=', 'nickname=', 'all'); + +$helptext = <<<END_OF_UPDATEPROFILEURL_HELP +updateprofileurl.php [options] +update the URLs of all avatars in the system + + -i --id ID of user to update + -n --nickname nickname of the user to update + -a --all update all + +END_OF_UPDATEPROFILEURL_HELP; + +require_once INSTALLDIR.'/scripts/commandline.inc'; + +try { + $user = null; + + if (have_option('i', 'id')) { + $id = get_option_value('i', 'id'); + $user = User::staticGet('id', $id); + if (empty($user)) { + throw new Exception("Can't find user with id '$id'."); + } + updateProfileURL($user); + } else if (have_option('n', 'nickname')) { + $nickname = get_option_value('n', 'nickname'); + $user = User::staticGet('nickname', $nickname); + if (empty($user)) { + throw new Exception("Can't find user with nickname '$nickname'"); + } + updateProfileURL($user); + } else if (have_option('a', 'all')) { + $user = new User(); + if ($user->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"; +} |