$yearmon = sprintf( '%04d%02d', $y, $m );
$day_year = sprintf( '%04d', $y );
$day_mon = sprintf( '%02d', $m );
$day_last = (int) date( 't', mktime( 0, 0, 0, $m, 1, $y ) );
$day_start = 1;
$dispMonth = intval( $day_year ) . '年' . intval( $day_mon ) . '月';
$list = new dailyBread_mp3_ListControl();
$list->ConnectDB( $yearmon );
$first = sprintf( '%04d%02d%02d', $y, $m, 1 );
$jsFirst = json_encode( $first );
$zipMonUrl = esc_url( $this->baseurl . 'mode=log&modeex=zipmonmp3&dateid=' . $yearmon );
$returnUrl = esc_url( site_url( '/wp-admin/admin.php?page=ubf-hp-admin-mp3-config' ) );
$dbList = $list->getDbMp3List();
$leftRows = '';
for ( $d = $day_start; $d <= $day_last; $d++ ) {
$dd = sprintf( '%04d%02d%02d', $y, $m, $d );
$disp = sprintf( '%02d/%02d', $m, $d );
// 1日詳細画面との整合性を優先し、最終成果物 datatype(10/100) のみを参照
$mp3Row = $this->_findStageRow( $dbList, $dd, [ 10 ] );
$mp4Row = $this->_findStageRow( $dbList, $dd, [ 100 ] );
$ytRow = $this->_findStageRow( $dbList, $dd, [ 11000 ] );
$b22 = $mp3Row ? DailybreadMpxYoutubeStatus::mp3BadgeHtml( $mp3Row, $dd ) : '✕';
$b23 = $mp4Row ? DailybreadMpxYoutubeStatus::mp4BadgeHtml( $mp4Row, $dd ) : '✕';
$mp3Elapsed = $this->_elapsedLabel( $mp3Row );
$mp4Elapsed = $this->_elapsedLabel( $mp4Row );
$ytElapsed = $this->_elapsedLabel( $ytRow );
// YouTube バッジ
$ytStatus = $list->GetYouTubeUploadedStatus( $dd );
if ( strpos( $ytStatus, '〇' ) !== false ) {
$bYT = '✅';
} elseif ( strpos( $ytStatus, '未アップロード' ) !== false ) {
$bYT = '✕';
} else {
$bYT = '❌';
}
// 確認済みバッジ
$bConf = $this->_badgeConfirm( $dbList, $dd, '101' );
// ダブルチェックバッジ
$bDbl = $this->_badgeConfirm( $dbList, $dd, '102' );
// 左ペイン行
$onclick = 'onclick="mvSelectDay(\'' . $dd . '\')"';
$leftRows .= '
' . "\n";
$leftRows .= '| ' . $disp . ' | ';
$leftRows .= '' . $b22 . ' ' . esc_html( $mp3Elapsed ) . ' | ';
$leftRows .= '' . $b23 . ' ' . esc_html( $mp4Elapsed ) . ' | ';
$leftRows .= '' . $bYT . ' ' . esc_html( $ytElapsed ) . ' | ';
$leftRows .= '' . $bConf . ' | ';
$leftRows .= '' . $bDbl . ' | ';
$leftRows .= "
\n";
}
// ── HTML 出力 ──
// 全画面固定オーバーレイ(WordPress のページ枠を覆う)
echo '';
// ── ヘッダー(1行に集約) ──
echo '
'; // /ヘッダー行
// 2ペインレイアウト(ヘッダー行の残り高さをすべて使用)
echo '
';
// ── 左ペイン ──
echo '
';
echo '
日付一覧
';
echo '
';
echo '';
echo '| 日付 | ';
echo 'MP3 | ';
echo 'MP4 | ';
echo 'Youtube | ';
echo '確認 | ';
echo 'W確認 | ';
echo '
';
echo '';
echo $leftRows;
echo '
';
echo '
'; // /左ペイン
// ── 右ペイン: iframe で日付ページをそのまま表示 ──
echo '
';
echo '
';
echo '
'
. '← 左の日付をクリックしてください
';
echo '
'; // /右ペイン
echo '
'; // /flex
echo '
'; // /mvMonthWrap
// CSS
echo '';
// JavaScript(esc_jsは&をHTMLエンティティ化するのでURLには使わない)
$jsBaseUrl = site_url( '/daily_bread_audio/?mode=dateid&dateid=' );
echo <<
(function(){
var _baseUrl = "{$jsBaseUrl}";
function mvSelectDay(dd) {
// 左ペインのハイライト
document.querySelectorAll('#mvDateTbody tr').forEach(function(tr){ tr.classList.remove('mvRowSel'); });
var row = document.getElementById('mvRow_' + dd);
if (row) { row.classList.add('mvRowSel'); row.scrollIntoView({block:'nearest'}); }
// 右ペイン: iframeのsrcを変えるだけ
var msg = document.getElementById('mvRightMsg');
var frame = document.getElementById('mvRightFrame');
if (msg) msg.style.display = 'none';
if (!frame) return;
frame.style.display = 'block';
frame.src = _baseUrl + dd;
// iframe読み込み後にWPヘッダー/フッターをCSSで非表示
frame.onload = function() {
try {
var doc = frame.contentDocument || frame.contentWindow.document;
// WPヘッダー/フッターを非表示
var s = doc.createElement('style');
s.textContent = '#wpadminbar,#header,#footer,.footer_main,.header_main,.av-header-area,'
+ '.sidebar_tab,#side-tabbed-widget-area { display:none !important; }'
+ 'body { overflow-y:auto !important; margin:0 !important; padding:0 !important; }'
+ '#main, .container_wrap { margin:0 !important; padding:8px 16px !important; }';
doc.head.appendChild(s);
// タイトル右に日付を表示
var yr = dd.substring(0,4), mo = dd.substring(4,6), dy = dd.substring(6,8);
var dateStr = yr + '年' + parseInt(mo) + '月' + parseInt(dy) + '日';
var h = doc.querySelector('h1,h2,h3');
if (h) {
var badge = doc.createElement('span');
badge.style.cssText = 'margin-left:14px; font-size:0.82em; color:#1a3c6e;'
+ ' font-weight:normal; background:#e8f0fb; border-radius:4px; padding:2px 8px;';
badge.textContent = dateStr;
h.appendChild(badge);
}
} catch(e) {}
};
}
window.mvSelectDay = mvSelectDay;
document.addEventListener('DOMContentLoaded', function(){ mvSelectDay({$jsFirst}); });
})();
ENDJS;
}
private function _toInline( string $html ): string {
$html = preg_replace( '##i', ' ', $html );
$html = preg_replace( '#]*>#i', '', $html );
$html = preg_replace( '#
#i', ' ', $html );
$html = preg_replace( '/ {2,}/', ' ', $html );
return trim( $html );
}
/**
* datatype 候補順で最初に見つかったDB行を返す
*/
private function _findStageRow( array $dbList, string $dispDate, array $datatypeCandidates ): ?object {
foreach ( $datatypeCandidates as $dt ) {
$key = $dispDate . '_' . (string) $dt;
if ( array_key_exists( $key, $dbList ) && is_object( $dbList[ $key ] ) ) {
return $dbList[ $key ];
}
}
return null;
}
/**
* DB行から経過時間ラベルを返す(完了時のみ時間、実行中は文言、未登録は-)
*/
private function _elapsedLabel( ?object $row ): string {
if ( ! $row ) return '-';
$sec = DailybreadMpxYoutubeStatus::calcElapsedSecondsFromRow( $row );
if ( $sec > 0 ) {
return DailybreadMpxYoutubeStatus::formatSecondsJa( $sec );
}
$started = mb_strlen( (string) ( $row->makestarttime ?? '' ) ) > 0;
$stopped = mb_strlen( (string) ( $row->makestoptime ?? '' ) ) > 0;
if ( $started && ! $stopped ) return '実行中';
return '-';
}
/**
* 確認済み列用バッジ(makestarttimeに値あり→✅、なし→✕)
*/
private function _badgeConfirm( array $dbList, string $dispDate, string $datatype ): string {
$key = $dispDate . '_' . $datatype;
if ( ! array_key_exists( $key, $dbList ) ) {
return '
✕';
}
$row = $dbList[ $key ];
if ( mb_strlen( (string)( $row->makestarttime ?? '' ) ) > 0 ) {
return '
✅';
}
return '
✕';
}
/**
* 左ペイン用ステータスバッジ HTML
*/
private function _badge( array $dbList, string $dispDate, string $datatype ): string {
$key = $dispDate . '_' . $datatype;
if ( ! array_key_exists( $key, $dbList ) ) {
return '
✕';
}
$row = $dbList[ $key ];
if ( mb_strlen( (string)( $row->makestoptime ?? '' ) ) > 0 ) {
return '
✅';
}
if ( mb_strlen( (string)( $row->makestarttime ?? '' ) ) > 0 ) {
return '
⚡';
}
return '
✕';
}
/**
* DB行からステータスラベルを返す
*/
private function _statusLabel( object $row ): string {
if ( mb_strlen( (string)( $row->makestoptime ?? '' ) ) > 0 ) {
return '完了';
}
if ( mb_strlen( (string)( $row->makestarttime ?? '' ) ) > 0 ) {
return '実行中/開始済';
}
return '未登録';
}
}
?>
24MARK04.罪人を招くために来られたイエス様 – 大学生聖書読み宣教会
2024年マルコの福音書第4講
罪人を招くために来られたイエス様
御言葉: マルコの福音書2:1-17
要 節: マルコの福音書2:17
1.イエス様がカペナウムに来て、多くの人たちの前でみことばを話しておられた時、四人の人は誰をイエス様のみもとに連れて来ましたか(1-3)。群衆のためにイエス様に近づくことのできない状況の中で、彼らはどのように克服して、「中風の人」をイエス様に出会うようにしましたか(4)。イエス様は中風の人に何と言われましたか(5)。なぜ、イエス様は中風の人を直されることより、「罪の赦し」を告げられたのでしょうか。
2.これを聞いた律法学者たちは、心の中で、どんなことを考えていましたか(6,7)。律法学者たちの考えを見抜かれたイエス様は、どのように問いかけられましたか(8-10a)。イエス様はご自身が地上で罪を赦す権威をもっていることをどのように証されましたか(10b-12)。
3.イエス様が道を通られた時、誰に注目されましたか(13,14a)。アルパヨの子レビに何と言われましたか(14b)。レビは、「わたしについて来なさい」と言われたイエス様にみ言葉に、どのように反応しましたか(14c)。イエス様に出会うことによって、レビの人生はどのように変わったのか、話してみましょう。
4.なぜパリサイ派の律法学者たちは、イエス様を非難しましたか(15,16)。これを聞いた、イエス様は何と答えられましたか(17)。「罪人を招くために来られたイエス様」はどんな方ですか。
/作成者: park ab
https://dev.ubf.or.jp/wp-content/uploads/2019/11/UBF-logo-Text-300x35.png
0
0
park ab
https://dev.ubf.or.jp/wp-content/uploads/2019/11/UBF-logo-Text-300x35.png
park ab2024-03-20 08:53:362024-03-20 08:53:3824MARK04.罪人を招くために来られたイエス様
24MARK03.イエス様は何のために来られたのか
2024_UBF_ESBC
Scroll to top