Skip to content

Commit 0eb0064

Browse files
committed
ref: 2.3.グループ管理連携機能開発: Update code handle groups addon
1 parent ff45faf commit 0eb0064

49 files changed

Lines changed: 1052 additions & 38 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

addons.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
"onedrivebusiness",
3434
"metadata",
3535
"onlyoffice",
36-
"workflow"
36+
"workflow",
37+
"groups"
3738
],
3839
"addons_default": [
3940
"osfstorage",
@@ -140,7 +141,8 @@
140141
"onedrivebusiness": "OneDrive for Office365 is a file storage add-on. Connect your Microsoft OneDrive account to a GakuNin RDM project to interact with files hosted on Microsoft OneDrive via the GakuNin RDM.",
141142
"metadata": "The Metadata addon provides the functionality to register metadata to files and generate reports.",
142143
"onlyoffice": "ONLYOFFICE document server.",
143-
"workflow": "Workflow gateway integration that serves engine key material to trusted services."
144+
"workflow": "Workflow gateway integration that serves engine key material to trusted services.",
145+
"groups": "Groups is an add-on that allows users to create and manage groups of users within the GakuNin RDM."
144146
},
145147
"addons_url": {
146148
"box": "http://www.box.com",
@@ -169,7 +171,8 @@
169171
"onedrivebusiness": "https://onedrive.live.com",
170172
"metadata": "https://rcos.nii.ac.jp/service/rdm/",
171173
"onlyoffice": "https://onlyoffice.com/",
172-
"workflow": "https://rcos.nii.ac.jp/service/rdm/"
174+
"workflow": "https://rcos.nii.ac.jp/service/rdm/",
175+
"groups": "https://rcos.nii.ac.jp/service/rdm/groups/"
173176
},
174177
"institutional_storage_add_on_method": [
175178
"nextcloudinstitutions",

addons/groups/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# RDM Groups Addon
2+
3+
## Feature
4+
5+
The RDM Groups Addon provides a way to enable/disable groups management in project

addons/groups/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# -*- coding: utf-8 -*-
2+
3+
DISPLAY_NAME = 'Groups'
4+
SHORT_NAME = 'groups'
5+
FULL_NAME = 'addons.groups'
6+
default_app_config = 'addons.{}.apps.AddonAppConfig'.format(SHORT_NAME)

addons/groups/apps.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# -*- coding: utf-8 -*-
2+
import os
3+
from addons.base.apps import BaseAddonAppConfig
4+
from . import DISPLAY_NAME, SHORT_NAME
5+
6+
7+
HERE = os.path.dirname(os.path.abspath(__file__))
8+
TEMPLATE_PATH = os.path.join(
9+
HERE,
10+
'templates'
11+
)
12+
13+
14+
class AddonAppConfig(BaseAddonAppConfig):
15+
16+
short_name = SHORT_NAME
17+
name = 'addons.{}'.format(SHORT_NAME)
18+
label = 'addons_{}'.format(SHORT_NAME)
19+
20+
full_name = DISPLAY_NAME
21+
22+
owners = ['user', 'node']
23+
24+
views = ['page']
25+
configs = ['node']
26+
27+
categories = ['other']
28+
29+
include_js = {}
30+
31+
include_css = {
32+
'widget': [],
33+
'page': [],
34+
}
35+
36+
added_default = []
37+
38+
has_page_icon = False
39+
40+
node_settings_template = os.path.join(TEMPLATE_PATH, 'groups_node_settings.mako')
41+
42+
@property
43+
def routes(self):
44+
from . import routes
45+
return [routes.api_routes, routes.page_routes]
46+
47+
@property
48+
def user_settings(self):
49+
return self.get_model('UserSettings')
50+
51+
@property
52+
def node_settings(self):
53+
return self.get_model('NodeSettings')
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.28 on 2026-03-09 07:22
3+
from __future__ import unicode_literals
4+
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
import django.db.models.deletion
8+
import django_extensions.db.fields
9+
import osf.models.base
10+
import osf.utils.fields
11+
12+
13+
class Migration(migrations.Migration):
14+
15+
initial = True
16+
17+
dependencies = [
18+
]
19+
20+
operations = [
21+
migrations.CreateModel(
22+
name='NodeSettings',
23+
fields=[
24+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
25+
('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')),
26+
('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')),
27+
('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)),
28+
('is_deleted', models.BooleanField(default=False)),
29+
('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)),
30+
('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_groups_node_settings', to='osf.AbstractNode')),
31+
],
32+
options={
33+
'abstract': False,
34+
},
35+
bases=(models.Model, osf.models.base.QuerySetExplainMixin),
36+
),
37+
migrations.CreateModel(
38+
name='UserSettings',
39+
fields=[
40+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
41+
('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')),
42+
('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')),
43+
('_id', models.CharField(db_index=True, default=osf.models.base.generate_object_id, max_length=24, unique=True)),
44+
('is_deleted', models.BooleanField(default=False)),
45+
('deleted', osf.utils.fields.NonNaiveDateTimeField(blank=True, null=True)),
46+
('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='addons_groups_user_settings', to=settings.AUTH_USER_MODEL)),
47+
],
48+
options={
49+
'abstract': False,
50+
},
51+
bases=(models.Model, osf.models.base.QuerySetExplainMixin),
52+
),
53+
migrations.AddField(
54+
model_name='nodesettings',
55+
name='user_settings',
56+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='addons_groups.UserSettings'),
57+
),
58+
]

addons/groups/migrations/__init__.py

Whitespace-only changes.

addons/groups/models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from addons.base.models import BaseUserSettings, BaseNodeSettings
2+
from django.db import models
3+
4+
5+
class UserSettings(BaseUserSettings):
6+
pass
7+
8+
9+
class NodeSettings(BaseNodeSettings):
10+
user_settings = models.ForeignKey(UserSettings, null=True, blank=True, on_delete=models.CASCADE)

addons/groups/routes.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""
2+
Routes associated with the groups addon
3+
"""
4+
5+
from framework.routing import Rule, json_renderer
6+
from . import SHORT_NAME
7+
from . import views
8+
9+
10+
TEMPLATE_DIR = './addons/groups/templates/'
11+
12+
api_routes = {
13+
'rules': [
14+
Rule([
15+
'/project/<pid>/{}/settings/'.format(SHORT_NAME),
16+
'/project/<pid>/node/<nid>/{}/settings/'.format(SHORT_NAME),
17+
], 'get', views.groups_get_config, json_renderer),
18+
],
19+
'prefix': '/api/v1',
20+
}
21+
22+
page_routes = {
23+
'rules': []
24+
}

addons/groups/settings/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import logging
2+
from .defaults import * # noqa
3+
4+
5+
logger = logging.getLogger(__name__)
6+
7+
try:
8+
from .local import * # noqa
9+
except ImportError:
10+
logger.warn('No local.py settings file found')

addons/groups/settings/defaults.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"""
2+
Groups addon default settings
3+
"""

0 commit comments

Comments
 (0)