• 16-01-2025, 11:04:28
    #1
    Merhabalar sıfırdan bir şirket içi toplantı takvim eklentisi yaptım. Her şey okey fakat bir sorun var senaryo şu şekilde.
    1. Giriş yapan kullanıcı eklediği toplantıları toplantılarım sayfasında kendi eklediği toplantıları görüntüleyebiliyor.
    2. Görüntülediği zaman revize etceği zaman sadece kendi eklediği toplantıları revize etmesi gerekiyor.
    3. Kendi eklediği toplantılar görüntüleniyor fakat revize edeceği zaman nonce hatası alıyorum.

    UPDATE KODLARI

    function update_meeting() {
        global $wpdb;
        $wpdb->show_errors();
        
        error_log('========= UPDATE MEETING DEBUG =========');
        error_log('POST Verileri: ' . print_r($_POST, true));
        
        try {
            
            check_ajax_referer('update_meeting', 'nonce');
            
          
            $current_user_id = get_current_user_id();
            error_log('Kullanıcı ID: ' . $current_user_id);
            
            if (!$current_user_id) {
                throw new Exception('Lütfen oturum açın.');
            }
            
            
            $required_fields = ['meeting_id', 'title', 'room_id', 'start_date', 'end_date'];
            $missing_fields = [];
            
            foreach ($required_fields as $field) {
                if (empty($_POST[$field])) {
                    $missing_fields[] = $field;
                }
            }
            
            if (!empty($missing_fields)) {
                error_log('Eksik alanlar: ' . implode(', ', $missing_fields));
                throw new Exception('Lütfen tüm gerekli alanları doldurun: ' . implode(', ', $missing_fields));
            }
            
            
            $meeting_id = intval($_POST['meeting_id']);
            $title = sanitize_text_field($_POST['title']);
            $description = isset($_POST['description']) ? sanitize_textarea_field($_POST['description']) : '';
            $room_id = intval($_POST['room_id']);
            $start_date = sanitize_text_field($_POST['start_date']);
            $end_date = sanitize_text_field($_POST['end_date']);
            $attendees = isset($_POST['attendees']) ? array_map('intval', (array)$_POST['attendees']) : [];
            
          
            $meeting = $wpdb->get_row($wpdb->prepare(
                "SELECT * FROM {$wpdb->prefix}meetings WHERE id = %d",
                $meeting_id
            ));
            
            if (!$meeting) {
                throw new Exception('Toplantı bulunamadı.');
            }
            
          
            $is_owner = ($meeting->created_by == $current_user_id);
            $is_admin = current_user_can('manage_options');
            
            if (!$is_owner && !$is_admin) {
                throw new Exception('Bu toplantıyı güncelleme yetkiniz yok.');
            }
            
            
            $wpdb->query('START TRANSACTION');
            
            
            $update_result = $wpdb->update(
                $wpdb->prefix . 'meetings',
                array(
                    'title' => $title,
                    'description' => $description,
                    'room_id' => $room_id,
                    'meeting_date' => $start_date,
                    'end_date' => $end_date,
                    'updated_at' => current_time('mysql')
                ),
                array('id' => $meeting_id),
                array('%s', '%s', '%d', '%s', '%s', '%s'),
                array('%d')
            );
            
            if ($update_result === false) {
                throw new Exception('Toplantı güncellenirken bir hata oluştu.');
            }
            
            
            $wpdb->delete($wpdb->prefix . 'meeting_attendees', array('meeting_id' => $meeting_id));
            
            if (!empty($attendees)) {
                foreach ($attendees as $user_id) {
                    $wpdb->insert(
                        $wpdb->prefix . 'meeting_attendees',
                        array(
                            'meeting_id' => $meeting_id,
                            'user_id' => $user_id,
                            'status' => 1,
                            'created_at' => current_time('mysql')
                        ),
                        array('%d', '%d', '%d', '%s')
                    );
                }
            }
            
            
            $wpdb->query('COMMIT');
            wp_send_json_success('Toplantı başarıyla güncellendi.');
            
        } catch (Exception $e) {
            $wpdb->query('ROLLBACK');
            error_log('Hata: ' . $e->getMessage());
            wp_send_json_error($e->getMessage());
        }
    }
    add_action('wp_ajax_update_meeting', 'update_meeting');
  • 16-01-2025, 11:05:28
    #2
    ücretli yardımcı olabilirim. profilimdeki whatsapptan mesaj atabilirsiniz.
  • 16-01-2025, 11:38:37
    #3
    merhaba

    kullanıcının nonceyi editlemesi için yetkisi olmayabilir
    yeni bir kullanıcı rolü oluşturup yalnızca kendi oluşturduğu nonceyi düzenlemesine izin verin

    bir de plugini kontrol edelim, izinlerini 777 olarak tanımlayalım, normalde otomatik böyle olmalı ama bir bug söz konusu olabilir