Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
f6e884b
chore: Bump version to v1.43.0
github-actions[bot] Apr 22, 2026
ccee0ac
add: WYSIWYGエディタ sandbox_iframes_exclusionsにcalendar.google.comを追加
t-kirita Apr 22, 2026
fe1225e
Merge pull request #2425 from t-kirita/feature/wysiwyg-add-calendar-g…
masaton0216 Apr 23, 2026
84f4db8
chore(deps-dev): bump axios from 1.15.0 to 1.15.2
dependabot[bot] May 8, 2026
19f83f7
Merge pull request #2426 from opensource-workshop/dependabot/npm_and_…
masaton0216 May 8, 2026
0bb6b68
chore(deps-dev): bump postcss from 8.5.3 to 8.5.14
dependabot[bot] May 8, 2026
742f8f0
Merge pull request #2427 from opensource-workshop/dependabot/npm_and_…
masaton0216 May 8, 2026
3ee4867
chore(deps-dev): bump fast-uri from 3.0.6 to 3.1.2
dependabot[bot] May 8, 2026
44aac91
chore(deps-dev): bump @babel/plugin-transform-modules-systemjs
dependabot[bot] May 9, 2026
5caae18
feat(site): add default post roles for new buckets
gakigaki May 13, 2026
1b851d9
Merge pull request #2430 from opensource-workshop/feature/default-buk…
gakigaki May 13, 2026
51af3b2
fix(site): improve base settings navigation
gakigaki May 14, 2026
000d80b
Merge pull request #2431 from opensource-workshop/feat/site-base-sett…
gakigaki May 14, 2026
919f8a8
fix(whatsnews): decode html entities in excerpts
gakigaki May 14, 2026
b4649b0
Merge pull request #2432 from opensource-workshop/fix/whatsnews-decod…
gakigaki May 14, 2026
b51c382
fix(menus): show tree children before menu settings saved
gakigaki May 14, 2026
466a417
Merge pull request #2433 from opensource-workshop/fix/menus-opencurre…
gakigaki May 14, 2026
9f8fc71
feat(uploadfile): add detailed filtering and sorting
gakigaki May 15, 2026
fc6b068
fix(uploadfile): ignore default size unit in search badge
gakigaki May 15, 2026
056aece
test(uploadfile): cover search badge and plugin sort order
gakigaki May 15, 2026
929c9bd
Merge pull request #2434 from opensource-workshop/feat/uploadfile-sea…
gakigaki May 15, 2026
9c29646
feat(list-buckets): add keyword search
gakigaki May 15, 2026
ff94bf1
fix(list-buckets): handle zero keyword search
gakigaki May 15, 2026
14e3e44
Merge pull request #2435 from opensource-workshop/feat/list-buckets-k…
gakigaki May 15, 2026
454b70d
feat(whatsnews): add cabinet calendar photoalbum targets
gakigaki May 19, 2026
6deef88
chore(deps): bump setasign/fpdi from 2.6.4 to 2.6.7
dependabot[bot] May 19, 2026
d7caed2
Merge pull request #2437 from opensource-workshop/dependabot/composer…
masaton0216 May 19, 2026
9e50f6d
fix(whatsnews): exclude hidden photoalbum contents
gakigaki May 20, 2026
cbc09e8
fix: コア MS365メール認証 添付ファイルで本文が上書きされてしまう
May 20, 2026
e7c60d8
Merge pull request #2438 from opensource-workshop/fix/ms-graph-transp…
masaton0216 May 20, 2026
ac1b53f
Merge pull request #2436 from opensource-workshop/feat/whatsnews-cabi…
gakigaki May 20, 2026
894cef7
feat(calendars): add recurring event registration
gakigaki May 20, 2026
844348a
fix(uploadfile): サムネイルの拡大表示を追加
gakigaki May 20, 2026
0004d41
feat(blogs): 投稿日時の表示形式設定を追加
gakigaki May 20, 2026
671c982
fix(counters): 日別カウントの重複を防止
gakigaki May 21, 2026
6a7e72a
Merge pull request #2440 from opensource-workshop/feat/uploadfile-thu…
gakigaki May 21, 2026
8553198
fix(calendars): ignore missing repeat event post ids
gakigaki May 21, 2026
83dd146
fix(calendars): scope repeat bulk actions by permissions
gakigaki May 21, 2026
9fb7072
fix(counters): 重複補正後の累計を再計算
gakigaki May 21, 2026
97d0cc7
Merge pull request #2439 from opensource-workshop/feat/calendars-repe…
gakigaki May 21, 2026
da7b76e
test(counters): 重複補正マイグレーションのテストを分離
gakigaki May 21, 2026
8e85787
Merge pull request #2442 from opensource-workshop/fix/counters-daily-…
gakigaki May 21, 2026
c2f243c
fix(blogs): preserve posted-at template defaults
gakigaki May 21, 2026
87882b8
test(blogs): skip era format test without intl
gakigaki May 21, 2026
3b9efb4
Merge pull request #2441 from opensource-workshop/fix/blogs-posted-at…
gakigaki May 21, 2026
1ff48c6
fix(photoalbums): カスタム順を任意の並び順で初期化できるようにする
gakigaki May 22, 2026
da69395
feat(wysiwyg): 複数画像アップロードに対応
gakigaki May 22, 2026
b14673c
build(wysiwyg): ビルド済みリソースを更新
gakigaki May 22, 2026
9d01190
fix(whatsnews): add classes to news item parts
gakigaki May 22, 2026
6943b48
feat(page): improve page move destination selection
gakigaki May 22, 2026
f87043f
feat(forms): add input list search
gakigaki May 25, 2026
cbafcb0
fix(searchs): 対象フレーム欄を選択時のみ表示
gakigaki May 25, 2026
6510ad3
Merge pull request #2443 from opensource-workshop/fix/photoalbums-ini…
gakigaki May 26, 2026
e76f88a
fix(wysiwyg): Source変更時の複数画像挿入を防止
gakigaki May 26, 2026
b9bfe90
Merge pull request #2444 from opensource-workshop/feat/wysiwyg-multip…
gakigaki May 26, 2026
0494825
test(whatsnews): separate initial and async class assertions
gakigaki May 26, 2026
cbe0855
Merge pull request #2445 from opensource-workshop/fix/whatsnews-add-p…
gakigaki May 26, 2026
941fa3e
fix(searchs): 対象フレーム設定の消失を防ぐ
gakigaki May 26, 2026
5dbfb54
Merge pull request #2448 from opensource-workshop/fix/searchs-target-…
gakigaki May 26, 2026
9f0e5b4
fix(forms): refine input list file search
gakigaki May 26, 2026
9677333
Merge pull request #2447 from opensource-workshop/feat/forms-list-inp…
gakigaki May 26, 2026
bce03ef
fix(page): avoid extra queries in move destination search
gakigaki May 26, 2026
354096b
Merge pull request #2446 from opensource-workshop/feat/page-move-posi…
gakigaki May 26, 2026
aff7faa
chore(deps): bump symfony/routing from 5.4.48 to 5.4.53
dependabot[bot] May 27, 2026
eebf2bb
Merge pull request #2449 from opensource-workshop/dependabot/composer…
masaton0216 May 27, 2026
88ce659
chore(deps): bump symfony/mime from 5.4.45 to 5.4.52
dependabot[bot] May 27, 2026
0fa0cc5
Merge pull request #2450 from opensource-workshop/dependabot/composer…
masaton0216 May 27, 2026
d47b706
chore(deps): bump symfony/yaml from 5.4.45 to 5.4.52
dependabot[bot] May 27, 2026
1d03bef
add: コア metaタグにログイン時のユーザIDを追加
May 29, 2026
0242399
add: サイト管理 meta情報 機能拡張用meta表示のON/OFF機能を追加
May 29, 2026
f8d4acf
refactor: コア サイト管理 項目の物理名を修正
May 29, 2026
ec0057d
Merge pull request #2452 from opensource-workshop/feature/add-cc-logi…
masaton0216 May 29, 2026
a55953f
Merge pull request #2451 from opensource-workshop/dependabot/composer…
masaton0216 May 29, 2026
3036248
Merge pull request #2429 from opensource-workshop/dependabot/npm_and_…
masaton0216 May 29, 2026
2f70fa5
Merge pull request #2428 from opensource-workshop/dependabot/npm_and_…
masaton0216 May 29, 2026
0f1d6a0
chore: npm run prod
May 29, 2026
0b183a3
Merge pull request #2453 from opensource-workshop/chore/npm-run-prod
masaton0216 May 29, 2026
9dd04ef
chore: Bump version to v1.44.0
github-actions[bot] May 29, 2026
516a32f
Merge branch '2' into 2.44.0
gakigaki May 29, 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: 4 additions & 0 deletions app/Enums/BlogFrameConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@ final class BlogFrameConfig extends EnumsBase
{
// 定数メンバ
const blog_display_created_name = 'blog_display_created_name';
const blog_display_posted_time = 'blog_display_posted_time';
const blog_posted_at_format = 'blog_posted_at_format';
const blog_display_twitter_button = 'blog_display_twitter_button';
const blog_display_facebook_button = 'blog_display_facebook_button';
const blog_view_count = 'blog_view_count';

// key/valueの連想配列
const enum = [
self::blog_display_created_name => '投稿者名',
self::blog_display_posted_time => '投稿日時の時刻表示',
self::blog_posted_at_format => '投稿日時表示形式',
self::blog_display_twitter_button => 'Twitterアイコン表示',
self::blog_display_facebook_button => 'Facebookアイコン表示',
self::blog_view_count => '表示件数',
Expand Down
122 changes: 122 additions & 0 deletions app/Enums/BlogPostedAtFormat.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
<?php

namespace App\Enums;

use App\Enums\EnumsBase;
use Carbon\CarbonInterface;

/**
* ブログの投稿日時表示形式
*/
final class BlogPostedAtFormat extends EnumsBase
{
// 定数メンバ
const japanese = 'japanese';
const slash = 'slash';
const hyphen = 'hyphen';
const dot = 'dot';
const japanese_era = 'japanese_era';

// key/valueの連想配列
const enum = [
self::japanese => 'yyyy年m月d日 hh時mm分',
self::slash => 'yyyy/mm/dd hh:mm',
self::hyphen => 'yyyy-mm-dd hh:mm',
self::dot => 'yyyy.mm.dd hh:mm',
self::japanese_era => '和暦(元号年m月d日 hh時mm分)',
];

const date_formats = [
self::japanese => 'Y年n月j日',
self::slash => 'Y/m/d',
self::hyphen => 'Y-m-d',
self::dot => 'Y.m.d',
self::japanese_era => '',
];

const time_formats = [
self::japanese => 'H時i分',
self::slash => 'H:i',
self::hyphen => 'H:i',
self::dot => 'H:i',
self::japanese_era => 'H時i分',
];

/**
* key/valueの連想配列を返す。
*/
public static function getMembers()
{
$members = parent::getMembers();
if (!self::canUseJapaneseEra()) {
unset($members[self::japanese_era]);
}

return $members;
}

/**
* key配列を返す。
*/
public static function getMemberKeys()
{
return array_keys(self::getMembers());
}

/**
* 日付部分を表示形式に応じて返す。
*/
public static function formatDate(CarbonInterface $date, ?string $key): string
{
if ($key === self::japanese_era) {
if (self::canUseJapaneseEra()) {
return self::formatJapaneseEraDate($date);
}

return $date->format(self::date_formats[self::japanese]);
}

return $date->format(self::getDateFormat($key));
}

/**
* 和暦表示が利用できるかを返す。
*/
private static function canUseJapaneseEra(): bool
{
return class_exists(\IntlDateFormatter::class);
}

/**
* 日付部分の表示形式を返す。
*/
public static function getDateFormat(?string $key): string
{
return self::date_formats[$key] ?? self::date_formats[self::japanese];
}

/**
* 時刻部分の表示形式を返す。
*/
public static function getTimeFormat(?string $key): string
{
return self::time_formats[$key] ?? self::time_formats[self::japanese];
}

/**
* 日付を和暦で返す。
*/
private static function formatJapaneseEraDate(CarbonInterface $date): string
{
$formatter = new \IntlDateFormatter(
'ja_JP@calendar=japanese',
\IntlDateFormatter::NONE,
\IntlDateFormatter::NONE,
$date->getTimezone()->getName(),
\IntlDateFormatter::TRADITIONAL,
'Gy年M月d日'
);

return $formatter->format($date->getTimestamp());
}
}
10 changes: 10 additions & 0 deletions app/Mail/Transport/MicrosoftGraphTransport.php
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,10 @@ protected function getContentType(Swift_Mime_SimpleMessage $message): string
/**
* メール本文を取得
*
* 本文パートと添付ファイルは同じ children に並ぶため、
* Swift_Attachment は本文候補から除外する。
* (除外しないと text/html や text/plain の添付ファイルの中身が本文として返ってしまう)
*
* @param Swift_Mime_SimpleMessage $message
* @return string
*/
Expand All @@ -204,12 +208,18 @@ protected function getBody(Swift_Mime_SimpleMessage $message): string
// マルチパートの場合、HTMLパートを優先
if ($message->getChildren()) {
foreach ($message->getChildren() as $child) {
if ($child instanceof \Swift_Attachment) {
continue;
}
if (strpos($child->getContentType(), self::CONTENT_TYPE_HTML) !== false) {
return $child->getBody();
}
}
// HTMLが見つからなければテキストパート
foreach ($message->getChildren() as $child) {
if ($child instanceof \Swift_Attachment) {
continue;
}
if (strpos($child->getContentType(), self::CONTENT_TYPE_PLAIN) !== false) {
return $child->getBody();
}
Expand Down
130 changes: 130 additions & 0 deletions app/Models/Common/Buckets.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace App\Models\Common;

use App\Models\Common\BucketsRoles;
use App\Models\Core\Configs;
use App\Traits\ConnectRoleTrait;
use Database\Factories\Common\BucketsFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
Expand All @@ -14,6 +15,30 @@ class Buckets extends Model
use ConnectRoleTrait;
use HasFactory;

/**
* 新規バケツの投稿権限初期値に対応するConfig名
*/
private const DEFAULT_NEW_BUCKET_POST_ROLE_CONFIGS = [
'role_article' => 'new_bucket_role_article_post_flag',
'role_reporter' => 'new_bucket_role_reporter_post_flag',
];

/**
* 新規バケツの投稿権限初期値を適用する対象プラグイン
*/
private const DEFAULT_POST_ROLE_TARGET_PLUGINS = [
'bbses',
'blogs',
'cabinets',
'calendars',
'contents',
'databases',
'faqs',
'photoalbums',
'reservations',
'slideshows',
];

/**
* create()やupdate()で入力を受け付ける ホワイトリスト
*/
Expand All @@ -27,6 +52,13 @@ class Buckets extends Model
// Buckets のrole
private $buckets_roles = null;

protected static function booted()
{
static::deleting(function ($bucket) {
BucketsRoles::where('buckets_id', $bucket->id)->delete();
});
}

/**
* 投稿権限データをrole の配列で返却
*/
Expand Down Expand Up @@ -221,6 +253,104 @@ public function needApprovalUser($user, $frame = null)
return true;
}

/**
* 新規バケツ作成時の投稿権限初期値を適用する。
*/
public function initializeDefaultPostRoles(): void
{
$default_post_role_flags = self::getDefaultNewBucketPostRoleFlags();

foreach ($default_post_role_flags as $role => $post_flag) {
if ((int) $post_flag !== 1) {
continue;
}

BucketsRoles::firstOrCreate(
[
'buckets_id' => $this->id,
'role' => $role,
],
[
'post_flag' => 1,
'approval_flag' => 0,
]
);
}
}

/**
* 投稿権限設定を持つプラグインの新規バケツなら、投稿権限初期値を適用する。
*/
public function initializeDefaultPostRolesIfTargetPlugin(): void
{
if (!self::isDefaultPostRoleTargetPlugin($this->plugin_name)) {
return;
}

$this->initializeDefaultPostRoles();
}

/**
* 新規バケツを作成し、対象プラグインだけ投稿権限初期値を適用する。
*/
public static function createWithDefaultPostRoles(array $attributes): self
{
$bucket = self::create($attributes);
$bucket->initializeDefaultPostRolesIfTargetPlugin();

return $bucket;
}

/**
* バケツを作成または更新し、新規作成時だけ投稿権限初期値を適用する。
*/
public static function updateOrCreateWithDefaultPostRoles(array $attributes, array $values = []): self
{
$bucket = self::updateOrCreate($attributes, $values);

if ($bucket->wasRecentlyCreated) {
$bucket->initializeDefaultPostRolesIfTargetPlugin();
}

return $bucket;
}

/**
* 新規バケツの投稿権限初期値を適用する対象プラグインか判定する。
*/
public static function isDefaultPostRoleTargetPlugin(?string $plugin_name): bool
{
return in_array($plugin_name, self::DEFAULT_POST_ROLE_TARGET_PLUGINS, true);
}

/**
* 新規バケツ作成時の投稿権限初期値を取得する。
*/
public static function getDefaultNewBucketPostRoleFlags(): array
{
$config_names = array_values(self::DEFAULT_NEW_BUCKET_POST_ROLE_CONFIGS);
$configs = Configs::getSharedConfigs();

if ($configs->isEmpty()) {
$configs = Configs::whereIn('name', $config_names)->get();
}

return self::resolveDefaultNewBucketPostRoleFlags($configs);
}

/**
* Config群から新規バケツ作成時の投稿権限初期値を解決する。
*/
private static function resolveDefaultNewBucketPostRoleFlags($configs): array
{
$configs = collect($configs);

return [
'role_article' => (int) Configs::getConfigsValue($configs, self::DEFAULT_NEW_BUCKET_POST_ROLE_CONFIGS['role_article'], 0),
'role_reporter' => (int) Configs::getConfigsValue($configs, self::DEFAULT_NEW_BUCKET_POST_ROLE_CONFIGS['role_reporter'], 0),
];
}

protected static function newFactory()
{
return BucketsFactory::new();
Expand Down
1 change: 1 addition & 0 deletions app/Models/User/Calendars/CalendarPost.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class CalendarPost extends Model
'body',
'location',
'contact',
'repeat_group_id',
];

/**
Expand Down
Loading
Loading