Add support (and upgrade path) for group profiles
This commit is contained in:
parent
5da72e5aa2
commit
352bef2374
|
@ -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
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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...");
|
||||
|
|
Loading…
Reference in New Issue
Block a user