Skip to content

Commit 0abbb38

Browse files
authored
Merge pull request #2197 from opensource-workshop/2.28.0
Merge v1.28.0 into 2
2 parents b0dce54 + a508323 commit 0abbb38

File tree

185 files changed

+8139
-91945
lines changed

Some content is hidden

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

185 files changed

+8139
-91945
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,4 @@
1717

1818
# チェックリスト
1919

20-
<!-- (オンラインマニュアルの更新が可能な方で、画面変更があった場合。なければ下記は消す) -->
21-
- [ ] (DB変更有りの場合) 移行プログラムに影響がない事を確認しました。https://github.com/opensource-workshop/connect-cms/wiki/Pull-requests-check-list---Migration
2220
- [ ] プルリクエストにわかりやすいタイトルとラベルを付けました。https://github.com/opensource-workshop/connect-cms/wiki/Pull-requests-Rule

app/Enums/LearningtaskImportType.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace App\Enums;
4+
5+
use App\Enums\EnumsBase;
6+
7+
/**
8+
* 課題管理インポートタイプ
9+
*/
10+
final class LearningtaskImportType extends EnumsBase
11+
{
12+
// 定数メンバ
13+
const report = 'report';
14+
15+
// key/valueの連想配列
16+
const enum = [
17+
self::report => 'レポート評価',
18+
];
19+
}

app/Enums/LearningtaskUseFunction.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ final class LearningtaskUseFunction extends EnumsBase
3232
const use_report_mail = 'use_'.self::report.'_mail';
3333
const use_report_end = 'use_'.self::report.'_end';
3434
const report_end_at = 'report_end_at';
35+
const use_report_revising = 'use_'.self::report.'_revising';
3536
// [利用する評価機能]
3637
const use_report_evaluate_file = 'use_'.self::report.'_evaluate_file';
3738
const use_report_evaluate_comment = 'use_'.self::report.'_evaluate_comment';
@@ -98,6 +99,7 @@ final class LearningtaskUseFunction extends EnumsBase
9899
self::use_report_mail => 'メール送信(教員宛)',
99100
self::use_report_end => 'レポート提出終了日時で制御する',
100101
self::report_end_at => 'レポート提出終了日時',
102+
self::use_report_revising => '提出修正',
101103
// 利用する評価機能
102104
self::use_report_evaluate_file => 'アップロード',
103105
self::use_report_evaluate_comment => 'コメント入力',

app/Plugins/Manage/PageManage/PageManage.php

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ private function pageUploadValidatorRules()
221221
public function store($request)
222222
{
223223
// 固定リンクの先頭に / がない場合、追加する。
224-
if (strncmp($request->permanent_link, '/', 1) !== 0) {
224+
if (strncmp($request->permanent_link ?? '', '/', 1) !== 0) {
225225
$request->merge([
226226
"permanent_link" => '/' . $request->permanent_link,
227227
]);
@@ -264,7 +264,7 @@ public function store($request)
264264
public function update($request, $page_id)
265265
{
266266
// 固定リンクの先頭に / がない場合、追加する。
267-
if (strncmp($request->permanent_link, '/', 1) !== 0) {
267+
if (strncmp($request->permanent_link ?? '', '/', 1) !== 0) {
268268
$request->merge([
269269
"permanent_link" => '/' . $request->permanent_link,
270270
]);
@@ -750,13 +750,23 @@ public function role($request, $page_id, $group_id)
750750
->orderBy('group_id', 'asc')
751751
->get();
752752

753+
// 数万ユーザでメモリ不足になるため、GROUP_CONCAT()を使用して、グループ参加者のユーザ名を取得
754+
// GROUP_CONCAT()はmysql設定でgroup_concat_max_len(default=1024)の制限があり、それ以上の長さの文字列は消える。
755+
$group_users = User::
756+
select(
757+
'group_users.group_id',
758+
DB::raw("GROUP_CONCAT(users.name SEPARATOR ',') as group_user_names"),
759+
DB::raw('count(group_users.group_id) as user_count')
760+
)
761+
->join('group_users', 'group_users.user_id', '=', 'users.id')
762+
->where('group_users.deleted_at', null)
763+
->groupBy('group_users.group_id')
764+
->get();
765+
753766
foreach ($groups as $group) {
754767
$group->page_roles = $page_roles->where('group_id', $group->id);
755-
756-
// 数万ユーザでメモリ不足になるため、DB呼び出し
757-
$group->group_user_names = User::whereIn('id', GroupUser::where('group_id', $group->id)->pluck('user_id'))
758-
->pluck('name')
759-
->implode(', ');
768+
$group->group_user_names = optional($group_users->firstWhere('group_id', $group->id))->group_user_names;
769+
$group->group_user_count = optional($group_users->firstWhere('group_id', $group->id))->user_count ?? 0;
760770
}
761771

762772
// 自分のページから親を遡って取得
@@ -1054,11 +1064,22 @@ public function roleList($request, $id)
10541064
// ※ with('group_user')は、数万ユーザの場合、1Gでもメモリ不足になる。
10551065
$groups = Group::orderBy('display_sequence', 'asc')->get();
10561066

1067+
// 数万ユーザでメモリ不足になるため、GROUP_CONCAT()を使用して、グループ参加者のユーザ名を取得
1068+
// GROUP_CONCAT()はmysql設定でgroup_concat_max_len(default=1024)の制限があり、それ以上の長さの文字列は消える。
1069+
$group_users = User::
1070+
select(
1071+
'group_users.group_id',
1072+
DB::raw("GROUP_CONCAT(users.name SEPARATOR '<br>') as group_user_names"),
1073+
DB::raw('count(group_users.group_id) as user_count')
1074+
)
1075+
->join('group_users', 'group_users.user_id', '=', 'users.id')
1076+
->where('group_users.deleted_at', null)
1077+
->groupBy('group_users.group_id')
1078+
->get();
1079+
10571080
foreach ($groups as $group) {
1058-
// 数万ユーザでメモリ不足になるため、DB呼び出し
1059-
$group->group_user_names = User::whereIn('id', GroupUser::where('group_id', $group->id)->pluck('user_id'))
1060-
->pluck('name')
1061-
->implode('<br />');
1081+
$group->group_user_names = optional($group_users->firstWhere('group_id', $group->id))->group_user_names;
1082+
$group->group_user_count = optional($group_users->firstWhere('group_id', $group->id))->user_count ?? 0;
10621083
}
10631084

10641085
// 管理画面プラグインの戻り値の返し方

app/Plugins/Manage/ThemeManage/ThemeManage.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function declareRole()
3232
$role_ckeck_table["create"] = array('admin_site');
3333
$role_ckeck_table["editCss"] = array('admin_site');
3434
$role_ckeck_table["saveCss"] = array('admin_site');
35-
$role_ckeck_table["editTemplate"] = array('admin_site');
35+
// $role_ckeck_table["editTemplate"] = array('admin_site');
3636
$role_ckeck_table["saveTemplate"] = array('admin_site');
3737
$role_ckeck_table["editJs"] = array('admin_site');
3838
$role_ckeck_table["saveJs"] = array('admin_site');
@@ -386,13 +386,15 @@ public function saveCss($request, $id)
386386
]);
387387
}
388388

389+
// delete: tinymce7対応. template はTinyMCE 7.xのオープンソース版から削除されてPremium版に移りました
389390
/**
390391
* テンプレート編集画面
391392
*
392-
* @method_title テンプレート編集
393-
* @method_desc ユーザ・テーマ毎のテンプレートを画面で編集できます。
394-
* @method_detail 保存したテンプレートは選択したテーマで反映されます。
393+
* method_title テンプレート編集
394+
* method_desc ユーザ・テーマ毎のテンプレートを画面で編集できます。
395+
* method_detail 保存したテンプレートは選択したテーマで反映されます。
395396
*/
397+
/*
396398
public function editTemplate($request, $id)
397399
{
398400
// httpメソッド確認
@@ -426,6 +428,7 @@ public function editTemplate($request, $id)
426428
"template" => $template,
427429
]);
428430
}
431+
*/
429432

430433
/**
431434
* テンプレート保存画面

app/Plugins/User/Databases/DatabasesPlugin.php

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ public function getPublicFunctions()
111111
'addPref',
112112
'search',
113113
'indexCount',
114+
'updateSelectSequenceAll',
115+
'updateColumnSequenceAll',
114116
];
115117
return $functions;
116118
}
@@ -136,9 +138,10 @@ public function declareRole()
136138
$role_check_table["input"] = array('posts.create', 'posts.update');
137139
$role_check_table["publicConfirm"] = array('posts.create', 'posts.update');
138140
$role_check_table["publicStore"] = array('posts.create', 'posts.update');
139-
$role_check_table["trendWords"] = array('frames.edit');
140-
141+
$role_check_table["trendWords"] = array('frames.edit');
141142
$role_check_table["addPref"] = array('buckets.addColumn');
143+
$role_check_table['updateSelectSequenceAll'] = ['buckets.upColumnSequence', 'buckets.downColumnSequence'];
144+
$role_check_table['updateColumnSequenceAll'] = ['buckets.upColumnSequence', 'buckets.downColumnSequence'];
142145
return $role_check_table;
143146
}
144147

@@ -2626,6 +2629,34 @@ public function updateColumnSequence($request, $page_id, $frame_id)
26262629
return $this->editColumn($request, $page_id, $frame_id, $request->databases_id, $message, null);
26272630
}
26282631

2632+
/**
2633+
* つまんで移動した項目の表示順を更新
2634+
*/
2635+
public function updateColumnSequenceAll($request, $page_id, $frame_id)
2636+
{
2637+
DB::beginTransaction();
2638+
try {
2639+
foreach ($request->column_ids_order as $key => $column_id) {
2640+
$column = DatabasesColumns::where('id', $column_id)->first();
2641+
if ($column) {
2642+
// display_sequenceを1から順に全項目を振り直し
2643+
$column->display_sequence = $key + 1;
2644+
$column->save();
2645+
}
2646+
}
2647+
2648+
DB::commit();
2649+
} catch (\Exception $e) {
2650+
DB::rollBack();
2651+
throw $e;
2652+
}
2653+
2654+
$message = '項目の表示順を更新しました。';
2655+
2656+
// 編集画面を呼び出す
2657+
return $this->editColumn($request, $page_id, $frame_id, $request->databases_id, $message, null);
2658+
}
2659+
26292660
/**
26302661
* 項目に紐づく詳細設定の更新
26312662
*/
@@ -2974,6 +3005,34 @@ public function updateSelectSequence($request, $page_id, $frame_id)
29743005
return $this->editColumnDetail($request, $page_id, $frame_id, $request->column_id, $message, null);
29753006
}
29763007

3008+
/**
3009+
* つまんで移動した選択肢の表示順を更新
3010+
*/
3011+
public function updateSelectSequenceAll($request, $page_id, $frame_id)
3012+
{
3013+
DB::beginTransaction();
3014+
try {
3015+
foreach ($request->select_ids_order as $key => $select_id) {
3016+
$select = DatabasesColumnsSelects::where('id', $select_id)->first();
3017+
if ($select) {
3018+
// display_sequenceを1から順に全選択肢を振り直し
3019+
$select->display_sequence = $key + 1;
3020+
$select->save();
3021+
}
3022+
}
3023+
3024+
DB::commit();
3025+
} catch (\Exception $e) {
3026+
DB::rollBack();
3027+
throw $e;
3028+
}
3029+
3030+
$message = '選択肢の表示順を更新しました。';
3031+
3032+
// 編集画面を呼び出す
3033+
return $this->editColumnDetail($request, $page_id, $frame_id, $request->column_id, $message, null);
3034+
}
3035+
29773036
/**
29783037
* 項目に紐づく選択肢の削除
29793038
*/

app/Plugins/User/Forms/FormsPlugin.php

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
use App\Utilities\Token\TokenUtils;
3737

3838
use App\Enums\Bs4TextColor;
39-
use App\Enums\CsvCharacterCode;
4039
use App\Enums\FormAccessLimitType;
4140
use App\Enums\FormColumnType;
4241
use App\Enums\FormMode;
@@ -58,7 +57,8 @@
5857
*
5958
* フォームの作成&データ収集用プラグイン。
6059
*
61-
* @author 永原 篤 <nagahara@opensource-workshop.jp>, 井上 雅人 <inoue@opensource-workshop.jp / masamasamasato0216@gmail.com>
60+
* @author 永原 篤 <nagahara@opensource-workshop.jp>
61+
* @author 井上 雅人 <inoue@opensource-workshop.jp / masamasamasato0216@gmail.com>
6262
* @author 牟田口 満 <mutaguchi@opensource-workshop.jp>
6363
* @copyright OpenSource-WorkShop Co.,Ltd. All Rights Reserved
6464
* @category フォーム・プラグイン
@@ -113,6 +113,8 @@ public function getPublicFunctions()
113113
'copyForm',
114114
'downloadCsvAggregate',
115115
'registerOtherPlugins',
116+
'updateSelectSequenceAll',
117+
'updateColumnSequenceAll',
116118
];
117119
return $functions;
118120
}
@@ -136,6 +138,8 @@ public function declareRole()
136138
$role_check_table["aggregate"] = ['role_article'];
137139
$role_check_table["downloadCsvAggregate"] = ['role_article'];
138140
$role_check_table["registerOtherPlugins"] = ['role_article'];
141+
$role_check_table['updateSelectSequenceAll'] = ['buckets.upColumnSequence', 'buckets.downColumnSequence'];
142+
$role_check_table['updateColumnSequenceAll'] = ['buckets.upColumnSequence', 'buckets.downColumnSequence'];
139143
return $role_check_table;
140144
}
141145

@@ -2148,6 +2152,34 @@ public function updateColumnSequence($request, $page_id, $frame_id)
21482152
return $this->editColumn($request, $page_id, $frame_id, $request->forms_id, $message, null);
21492153
}
21502154

2155+
/**
2156+
* つまんで移動した項目の表示順を更新
2157+
*/
2158+
public function updateColumnSequenceAll($request, $page_id, $frame_id)
2159+
{
2160+
DB::beginTransaction();
2161+
try {
2162+
foreach ($request->column_ids_order as $key => $column_id) {
2163+
$column = FormsColumns::where('id', $column_id)->first();
2164+
if ($column) {
2165+
// display_sequenceを1から順に全項目を振り直し
2166+
$column->display_sequence = $key + 1;
2167+
$column->save();
2168+
}
2169+
}
2170+
2171+
DB::commit();
2172+
} catch (\Exception $e) {
2173+
DB::rollBack();
2174+
throw $e;
2175+
}
2176+
2177+
$message = '項目の表示順を更新しました。';
2178+
2179+
// 編集画面を呼び出す
2180+
return $this->editColumn($request, $page_id, $frame_id, $request->forms_id, $message, null);
2181+
}
2182+
21512183
/**
21522184
* 項目に紐づく詳細情報の更新
21532185
*/
@@ -2378,6 +2410,34 @@ public function updateSelectSequence($request, $page_id, $frame_id)
23782410
return $this->editColumnDetail($request, $page_id, $frame_id, $request->column_id, $message, null);
23792411
}
23802412

2413+
/**
2414+
* つまんで移動した選択肢の表示順を更新
2415+
*/
2416+
public function updateSelectSequenceAll($request, $page_id, $frame_id)
2417+
{
2418+
DB::beginTransaction();
2419+
try {
2420+
foreach ($request->select_ids_order as $key => $select_id) {
2421+
$select = FormsColumnsSelects::where('id', $select_id)->first();
2422+
if ($select) {
2423+
// display_sequenceを1から順に全選択肢を振り直し
2424+
$select->display_sequence = $key + 1;
2425+
$select->save();
2426+
}
2427+
}
2428+
2429+
DB::commit();
2430+
} catch (\Exception $e) {
2431+
DB::rollBack();
2432+
throw $e;
2433+
}
2434+
2435+
$message = '選択肢の表示順を更新しました。';
2436+
2437+
// 編集画面を呼び出す
2438+
return $this->editColumnDetail($request, $page_id, $frame_id, $request->column_id, $message, null);
2439+
}
2440+
23812441
/**
23822442
* 項目に紐づく選択肢の削除
23832443
*/

0 commit comments

Comments
 (0)