Add support (and upgrade path) for group profiles

This commit is contained in:
Mikael Nordfeldth 2013-10-15 11:12:50 +02:00
parent 5da72e5aa2
commit 352bef2374
2 changed files with 45 additions and 0 deletions

View File

@ -38,6 +38,7 @@ class User_group extends Managed_DataObject
return array(
'fields' => array(
'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'),
'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'),
'nickname' => array('type' => 'varchar', 'length' => 64, 'description' => 'nickname for addressing'),
'fullname' => array('type' => 'varchar', 'length' => 255, 'description' => 'display name'),
@ -62,8 +63,12 @@ class User_group extends Managed_DataObject
'unique keys' => array(
'user_group_uri_key' => array('uri'),
),
'foreign keys' => array(
'user_group_id_fkey' => array('profile', array('profile_id' => 'id')),
),
'indexes' => array(
'user_group_nickname_idx' => array('nickname'),
'user_group_profile_id_idx' => array('profile_id'), //make this unique in future
),
);
}

View File

@ -45,6 +45,7 @@ function main()
initInbox();
fixupGroupURI();
initGroupProfileId();
initLocalGroup();
initNoticeReshare();
@ -241,6 +242,45 @@ function initInbox()
printfnq("DONE.\n");
}
function initGroupProfileId()
{
printfnq("Ensuring all User_group entries have a Profile and profile_id...");
$group = new User_group();
$group->whereAdd('NOT EXISTS (SELECT id FROM profile WHERE id = user_group.profile_id)');
$group->find();
while ($group->fetch()) {
try {
// We must create a new, incrementally assigned profile_id
$profile = new Profile();
$profile->nickname = $group->nickname;
$profile->fullname = $group->fullname;
$profile->profileurl = $group->mainpage;
$profile->homepage = $group->homepage;
$profile->bio = $group->description;
$profile->location = $group->location;
$profile->created = $group->created;
$profile->modified = $group->modified;
$profile->query('BEGIN');
$id = $profile->insert();
if (empty($id)) {
$profile->query('ROLLBACK');
throw new Exception('Profile insertion failed, profileurl: '.$profile->profileurl);
}
$group->query("UPDATE user_group SET profile_id={$id} WHERE id={$group->id}");
$profile->query('COMMIT');
$profile->free();
} catch (Exception $e) {
printfv("Error initializing Profile for group {$group->nickname}:" . $e->getMessage());
}
}
printfnq("DONE.\n");
}
function initLocalGroup()
{
printfnq("Ensuring all local user groups have a local_group...");