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'),
'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
),
);
}
initInbox();
fixupGroupURI();
+ initGroupProfileId();
initLocalGroup();
initNoticeReshare();
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...");