$request = Yii::$app->request;
$userId = Yii::$app->user->id;
+ // Тестовый контур: ?test_shift_reminder=1 на странице → test_mode=1 в POST
+ // Активен только в dev-окружении, обходит все проверки
+ if (YII_ENV_DEV && $request->post('test_mode') === '1') {
+ Yii::info("TEST MODE: Force showing reminder for user {$userId}", 'shift-reminder');
+ return [
+ 'success' => true,
+ 'show_reminder' => true,
+ 'reminder_key' => 'day_shift',
+ 'message' => 'ТЕСТОВОЕ НАПОМИНАНИЕ: Пожалуйста, откройте/закройте смену.',
+ 'reference_date' => date('Y-m-d'),
+ 'test_mode' => true,
+ ];
+ }
+
// Получаем reminder_key из запроса или используем дефолтное значение
$reminderKey = $request->post('reminder_key', 'day_shift');
$request = Yii::$app->request;
$userId = Yii::$app->user->id;
+ // Тестовый контур: в test mode подтверждение просто закрывает окно
+ if (YII_ENV_DEV && $request->post('test_mode') === '1') {
+ Yii::info("TEST MODE: Confirm for user {$userId}", 'shift-reminder');
+ return [
+ 'success' => true,
+ 'message' => 'Test reminder confirmed.',
+ 'reference_date' => date('Y-m-d'),
+ 'next_check_at' => time() + 30,
+ 'test_mode' => true,
+ ];
+ }
+
// Получаем reminder_key из запроса
$reminderKey = $request->post('reminder_key');
console.error('ShiftReminder: CSRF tokens not found in meta tags. AJAX requests will fail.');
}
+ // Test mode: activated via ?test_shift_reminder=1 in URL (YII_ENV_DEV only)
+ const testMode = (new URLSearchParams(window.location.search)).get('test_shift_reminder') === '1';
+
// Configuration
const CONFIG = {
- pollInterval: 30000, // 30 seconds
+ pollInterval: testMode ? 5000 : 30000, // 5s in test mode, 30s normal
maxPollInterval: 240000, // 4 minutes (for exponential backoff)
retryIntervals: [30000, 60000, 120000, 240000], // Exponential backoff
localStorageKey: 'shift_reminder_shown',
* Initialize the shift reminder system
*/
function init() {
+ if (testMode) {
+ console.info('ShiftReminder: TEST MODE active (?test_shift_reminder=1)');
+ }
+
// Initialize BroadcastChannel for multi-tab coordination
if (typeof BroadcastChannel !== 'undefined') {
state.bcChannel = new BroadcastChannel('shift_reminder_channel');
return;
}
+ var postData = {
+ [csrfParam]: csrfToken
+ };
+ if (testMode) {
+ postData.test_mode = '1';
+ }
+
$.ajax({
url: '/shift-reminder/check',
type: 'POST',
dataType: 'json',
- data: {
- [csrfParam]: csrfToken
- },
+ data: postData,
success: function(response) {
// Reset retry count on successful request
state.retryCount = 0;
// Disable button to prevent double-clicks
$('#shift-reminder-confirm-btn').prop('disabled', true).text('Подтверждение...');
+ var confirmData = {
+ reminder_key: reminderKey,
+ [csrfParam]: csrfToken
+ };
+ if (testMode) {
+ confirmData.test_mode = '1';
+ }
+
$.ajax({
url: '/shift-reminder/confirm',
type: 'POST',
dataType: 'json',
- data: {
- reminder_key: reminderKey,
- [csrfParam]: csrfToken
- },
+ data: confirmData,
success: function(response) {
if (response.success) {
// Store confirmation in localStorage for multi-tab coordination