Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
bae0457
feat(layout): add layout inheritance flag
gakigaki Jan 15, 2026
49b49ec
chore: Bump version to v1.40.0
github-actions[bot] Jan 20, 2026
cc6e599
chore(deps-dev): bump lodash from 4.17.21 to 4.17.23
dependabot[bot] Jan 21, 2026
5a4ac10
Merge pull request #2348 from opensource-workshop/dependabot/npm_and_…
masaton0216 Jan 21, 2026
548d3e5
add: スパムフィルタリング機能を追加(スパム管理+フォームプラグイン)
Jan 22, 2026
986198e
refactor: 共通処理をprivate化
Jan 22, 2026
5e86954
refactor: スパムフィルタリング モデルへロジック集約
Jan 22, 2026
679c9d0
chore: スパムフィルタリング 不要メソッドを削除
Jan 22, 2026
d21468f
fix: スパム管理 CSVダウンロード時、フィルタ条件が加味されてなかった
Jan 22, 2026
d1ab79c
chore: スパム管理 一覧パフォーマンス対応
Jan 22, 2026
21f3ad9
test: スパムフィルタリング関連テストを追加
Jan 22, 2026
d948b89
mod: フォーム スパムブロック時のログを追加
Jan 23, 2026
15c30c7
mod: フォーム スパムブロック処理をpublicStore()にも設定(URL直などのバイパス封じ)
Jan 23, 2026
aad8caa
Merge pull request #2349 from opensource-workshop/feature-form-spam-f…
masaton0216 Jan 23, 2026
72e25ee
fix(databases): show view count controls on all templates
gakigaki Jan 26, 2026
586c4b5
Merge pull request #2350 from opensource-workshop/fix/databases-view-…
gakigaki Jan 26, 2026
6154219
Merge branch 'master' into feat/layout-inherit-flag
gakigaki Jan 26, 2026
a953a1d
mod: 管理者メニュー スパム管理をデータ管理系に移動
Jan 28, 2026
68942e1
add: スパム管理 ブロック履歴画面を追加
Jan 28, 2026
0f92ac8
add: スパム管理 ブロック履歴画面を追加
Jan 28, 2026
81d5b2f
test: スパム管理 ブロック履歴関連テストを追加
Jan 28, 2026
4bee986
add: スパム管理 各一覧にフォームへのページリンクを追加
Jan 28, 2026
cf5ee7f
feat(tables): add synced header scroll
gakigaki Jan 28, 2026
18ee03f
chore: 不要なuse文を削除
Jan 28, 2026
dd89545
refactor: フォーム スパムブロック履歴処理を共通化
Jan 28, 2026
a623746
refactor: フォーム スパムブロック履歴のDB記録失敗で500エラーは発生させない
Jan 28, 2026
e40c219
Merge pull request #2353 from opensource-workshop/add-manage-block-hi…
masaton0216 Jan 28, 2026
b0121bc
fix(tables): reinit tooltips for cloned header
gakigaki Jan 28, 2026
bd3bcf0
fix(tables): keep header for screen readers
gakigaki Jan 28, 2026
5e59c91
build(assets): update compiled files
gakigaki Jan 28, 2026
aef2bea
Merge pull request #2354 from opensource-workshop/feat/table-scroll-fix
gakigaki Jan 28, 2026
2e98faf
chore(deps): bump symfony/process from 5.4.47 to 5.4.51
dependabot[bot] Jan 28, 2026
f4da532
Merge pull request #2355 from opensource-workshop/dependabot/composer…
masaton0216 Jan 28, 2026
f56884f
add: フォーム スパムフィルタリングにハニーポット機能を追加
Jan 29, 2026
659a588
fix: スパム管理 ブロックリスト編集時、ハニーポットだと値必須のままで編集できない
Jan 29, 2026
6afb123
refactor フォーム ハニーポット用のCSSをconnect.cssに移動
Jan 29, 2026
5682f0a
refactor: フォーム ハニーポットエラーメッセージを多言語対応
Jan 29, 2026
b39b15e
Merge pull request #2356 from opensource-workshop/add-form-honey-pot
masaton0216 Jan 29, 2026
ea8ab4a
chore(deps): bump psy/psysh from 0.12.8 to 0.12.19
dependabot[bot] Jan 30, 2026
654f73b
Merge pull request #2357 from opensource-workshop/dependabot/composer…
masaton0216 Jan 31, 2026
166e37b
feat(whatsnews): update default template settings
gakigaki Feb 2, 2026
a469d03
Merge pull request #2358 from opensource-workshop/feat/whatsnews-defa…
gakigaki Feb 3, 2026
707b805
fix(mail): log deprecations without exception
gakigaki Feb 3, 2026
6374851
Merge pull request #2359 from opensource-workshop/fix/mail-deprecatio…
gakigaki Feb 3, 2026
b1c6335
fix(theme): clarify required theme fields
gakigaki Feb 3, 2026
7a2158b
Merge pull request #2360 from opensource-workshop/fix/theme-required-…
gakigaki Feb 3, 2026
d569a24
fix(slideshows): show controls on mobile
gakigaki Feb 3, 2026
5b28563
Merge pull request #2361 from opensource-workshop/fix/slideshows-mobi…
gakigaki Feb 3, 2026
5c04f5b
chore(deps-dev): bump webpack from 5.99.7 to 5.105.0
dependabot[bot] Feb 7, 2026
d7e9076
fix(mypage): プロフィールのメール必須を反映
gakigaki Feb 9, 2026
7a226f9
Merge pull request #2363 from opensource-workshop/fix/mypage-required…
gakigaki Feb 9, 2026
2e9171a
feat(photoalbums): improve listing perf
gakigaki Feb 10, 2026
94c59b5
docs(auth): explain GET-only cache
gakigaki Feb 12, 2026
9988028
fix(photoalbums): モーダル説明の表示を修正
gakigaki Feb 12, 2026
bba0361
Merge pull request #2364 from opensource-workshop/feat/photoalbums-pe…
gakigaki Feb 12, 2026
ca8a92d
feat(photoalbums): add load more support for folder and image lists
gakigaki Feb 12, 2026
0917d5a
Merge pull request #2365 from opensource-workshop/feat/photoalbums-lo…
gakigaki Feb 12, 2026
5c1945b
feat(photoalbums): optimize moreContents loading and add feature tests
gakigaki Feb 12, 2026
ad73538
Merge pull request #2366 from opensource-workshop/feat/photoalbums-mo…
gakigaki Feb 12, 2026
e74b2ae
Merge pull request #2362 from opensource-workshop/dependabot/npm_and_…
gakigaki Feb 12, 2026
c56c5ca
fix(page): support optional csv headers in import
gakigaki Feb 13, 2026
0d0ad54
Merge pull request #2352 from opensource-workshop/feat/layout-inherit…
gakigaki Feb 13, 2026
a90ea0f
chore: Bump version to v1.41.0
github-actions[bot] Feb 13, 2026
0fbacb6
Merge branch '2' into 2.41.0
gakigaki Feb 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion app/Enums/PageCvsIndex.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ final class PageCvsIndex extends EnumsBase
const header_color = 3;
const theme = 4;
const layout = 5;
const base_display_flag = 6;
const layout_inherit_flag = 6;
const base_display_flag = 7;

/** key/valueの連想配列 */
const enum = [
Expand All @@ -31,6 +32,7 @@ final class PageCvsIndex extends EnumsBase
self::header_color => 'header_color',
self::theme => 'theme',
self::layout => 'layout',
self::layout_inherit_flag => 'layout_inherit_flag',
self::base_display_flag => 'base_display_flag',
];
}
4 changes: 4 additions & 0 deletions app/Enums/PhotoalbumFrameConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ final class PhotoalbumFrameConfig extends EnumsBase
const embed_code = 'embed_code';
const play_view = 'play_view';
const description_list_length = 'description_list_length';
const load_more_use_flag = 'load_more_use_flag';
const load_more_count = 'load_more_count';

// key/valueの連想配列
const enum = [
Expand All @@ -38,5 +40,7 @@ final class PhotoalbumFrameConfig extends EnumsBase
self::embed_code => '動画埋め込みコード',
self::play_view => '動画の再生形式',
self::description_list_length => '一覧の説明表示文字数',
self::load_more_use_flag => 'もっと見る機能',
self::load_more_count => 'もっと見る表示件数',
];
}
28 changes: 28 additions & 0 deletions app/Enums/SpamBlockType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace App\Enums;

/**
* スパムブロック種別
*
* @author 井上 雅人 <inoue@opensource-workshop.jp / masamasamasato0216@gmail.com>
* @copyright OpenSource-WorkShop Co.,Ltd. All Rights Reserved
* @category スパム管理
* @package Enum
*/
class SpamBlockType extends EnumsBase
{
// 定数メンバ
const email = 'email';
const domain = 'domain';
const ip_address = 'ip_address';
const honeypot = 'honeypot';

// key/valueの連想配列
const enum = [
self::email => 'メールアドレス',
self::domain => 'ドメイン',
self::ip_address => 'IPアドレス',
self::honeypot => 'ハニーポット',
];
}
19 changes: 14 additions & 5 deletions app/Http/Controllers/Core/DefaultController.php
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ private function getTopPage($page, $languages = null)
private function getLayout($page, $page_tree)
{
// レイアウトの初期値
$layout_default = '1|1|0|1';
$layout_default = config('connect.BASE_LAYOUT_DEFAULT');

// if (empty($this->page)) {
if (empty($page)) {
Expand All @@ -344,15 +344,24 @@ private function getLayout($page, $page_tree)

// レイアウト
$layout = null;

foreach ($page_tree as $tmp_page) {
// レイアウト
if (empty($layout) && $tmp_page->layout) {
$layout = $tmp_page->layout;
if (empty($tmp_page->layout)) {
continue;
}
if ($tmp_page->id != $page->id && !is_null($tmp_page->layout_inherit_flag) && (int)$tmp_page->layout_inherit_flag === 0) {
// 祖先のレイアウトが「このページのみ」指定なら下層への継承対象から外す。
continue;
}
$layout = $tmp_page->layout;
break;
}
// 親も含めて空の場合は、基本レイアウトを使い、未設定なら初期値を返却
if (empty($layout)) {
$layout = Configs::getSharedConfigsValue('base_layout', $layout_default);
}
// 親も含めて空の場合は、初期値を返却
if (empty($layout)) {
// DBに不正な値が入るなどして予期せず空になった場合の安全弁
$layout = $layout_default;
}
return $layout;
Expand Down
2 changes: 1 addition & 1 deletion app/Http/Controllers/Core/FrameCore.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public function addPlugin($request, $page_id = null, $frame_id = null)
$frame->frame_design = "default";
$frame->plugin_name = $request->add_plugin;
$frame->frame_col = 0;
$frame->template = "default";
$frame->template = config('cc_plugin_defaults.default_template_map.' . $request->add_plugin, 'default');
$frame->bucket_id = null;
$frame->display_sequence = 0;
$frame->save();
Expand Down
1 change: 1 addition & 0 deletions app/Models/Common/Page.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class Page extends Model
'header_color',
'theme',
'layout',
'layout_inherit_flag',
'base_display_flag',
'membership_flag',
'container_flag',
Expand Down
44 changes: 44 additions & 0 deletions app/Models/Common/SpamBlockHistory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

namespace App\Models\Common;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

/**
* スパムブロック履歴モデル
*
* @author 井上 雅人 <inoue@opensource-workshop.jp / masamasamasato0216@gmail.com>
* @copyright OpenSource-WorkShop Co.,Ltd. All Rights Reserved
* @category スパム管理
* @package Model
*/
class SpamBlockHistory extends Model
{
use HasFactory;

/**
* updated_at は使用しない
*/
const UPDATED_AT = null;

/**
* create()やupdate()で入力を受け付ける ホワイトリスト
*/
protected $fillable = [
'spam_list_id',
'forms_id',
'block_type',
'block_value',
'client_ip',
'submitted_email',
];

/**
* スパムリストとのリレーション
*/
public function spamList()
{
return $this->belongsTo(SpamList::class, 'spam_list_id');
}
}
101 changes: 101 additions & 0 deletions app/Models/Common/SpamList.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?php

namespace App\Models\Common;

use App\UserableNohistory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

/**
* スパムリストモデル
*
* @author 井上 雅人 <inoue@opensource-workshop.jp / masamasamasato0216@gmail.com>
* @copyright OpenSource-WorkShop Co.,Ltd. All Rights Reserved
* @category スパム管理
* @package Model
*/
class SpamList extends Model
{
// 保存時のユーザー関連データの保持(履歴なしUserable)
use HasFactory;
use UserableNohistory;
use SoftDeletes;

/**
* create()やupdate()で入力を受け付ける ホワイトリスト
*/
protected $fillable = [
'target_plugin_name',
'target_id',
'block_type',
'block_value',
'memo',
];

/**
* フォームプラグイン用のスパムリストを取得
*
* @param int|null $forms_id フォームID(nullの場合は全体のみ)
* @return \Illuminate\Database\Eloquent\Collection
*/
public static function getFormsSpamLists($forms_id = null)
{
$query = self::where('target_plugin_name', 'forms');

if ($forms_id) {
$query->where(function ($q) use ($forms_id) {
$q->where('target_id', $forms_id)
->orWhereNull('target_id');
});
} else {
$query->whereNull('target_id');
}

return $query->orderBy('block_type')
->orderBy('created_at', 'desc')
->get();
}

/**
* 全体適用かどうか
*
* @return bool
*/
public function isGlobalScope()
{
return is_null($this->target_id);
}

/**
* 重複チェック付きでスパムリストに追加
*
* @param string $target_plugin_name 対象プラグイン名
* @param int|null $target_id 対象ID(nullの場合は全体適用)
* @param string $block_type ブロック種別
* @param string $block_value ブロック対象の値
* @param string|null $memo メモ
* @return bool 追加成功時true、重複時false
*/
public static function addIfNotExists($target_plugin_name, $target_id, $block_type, $block_value, $memo = null)
{
$exists = self::where('target_plugin_name', $target_plugin_name)
->where('target_id', $target_id)
->where('block_type', $block_type)
->where('block_value', $block_value)
->exists();

if ($exists) {
return false;
}

self::create([
'target_plugin_name' => $target_plugin_name,
'target_id' => $target_id,
'block_type' => $block_type,
'block_value' => $block_value,
'memo' => $memo,
]);
return true;
}
}
9 changes: 6 additions & 3 deletions app/Models/User/Forms/Forms.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace App\Models\User\Forms;

use Illuminate\Database\Eloquent\Model;

use App\UserableNohistory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Forms extends Model
{
// 保存時のユーザー関連データの保持(履歴なしUserable)
use HasFactory;
use UserableNohistory;

/**
Expand Down Expand Up @@ -45,7 +46,9 @@ class Forms extends Model
'data_save_flag',
'after_message',
'numbering_use_flag',
'numbering_prefix'
'numbering_prefix',
'use_spam_filter_flag',
'spam_filter_message',
];

/**
Expand Down
5 changes: 3 additions & 2 deletions app/Models/User/Forms/FormsColumns.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace App\Models\User\Forms;

use Illuminate\Database\Eloquent\Model;

use App\UserableNohistory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class FormsColumns extends Model
{
// 保存時のユーザー関連データの保持(履歴なしUserable)
use HasFactory;
use UserableNohistory;

// 更新する項目の定義
Expand Down
5 changes: 3 additions & 2 deletions app/Models/User/Forms/FormsInputCols.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace App\Models\User\Forms;

use Illuminate\Database\Eloquent\Model;

use App\UserableNohistory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class FormsInputCols extends Model
{
// 保存時のユーザー関連データの保持(履歴なしUserable)
use HasFactory;
use UserableNohistory;

// 更新する項目の定義
Expand Down
5 changes: 3 additions & 2 deletions app/Models/User/Forms/FormsInputs.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace App\Models\User\Forms;

use Illuminate\Database\Eloquent\Model;

use App\UserableNohistory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class FormsInputs extends Model
{
// 保存時のユーザー関連データの保持(履歴なしUserable)
use HasFactory;
use UserableNohistory;

// 更新する項目の定義
Expand Down
Loading