dga_feedback-2.0.0/dga_feedback.install

dga_feedback.install
<?php

/**
 * @file
 * Install, update and uninstall functions for the DGA Feedback module.
 */

use Drupal\Core\Database\Database;

/**
 * Implements hook_schema().
 */
function dga_feedback_schema() {
  $schema['dga_feedback'] = [
    'description' => 'Stores user feedback submissions with Yes/No responses, reasons, and optional demographic data.',
    'fields' => [
      'id' => [
        'type' => 'serial',
        'not null' => TRUE,
        'description' => 'Primary Key: Unique feedback ID.',
      ],
      'entity_type' => [
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'default' => 'node',
        'description' => 'The entity type (e.g., node, user).',
      ],
      'entity_id' => [
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'description' => 'The ID of the entity being rated.',
      ],
      'is_useful' => [
        'type' => 'varchar',
        'length' => 10,
        'not null' => TRUE,
        'description' => 'Whether the page was useful: "yes" or "no".',
      ],
      'reasons' => [
        'type' => 'text',
        'size' => 'big',
        'not null' => FALSE,
        'description' => 'JSON array of selected reasons.',
      ],
      'feedback' => [
        'type' => 'text',
        'size' => 'big',
        'not null' => FALSE,
        'description' => 'Optional feedback text from the user.',
      ],
      'gender' => [
        'type' => 'varchar',
        'length' => 20,
        'not null' => FALSE,
        'description' => 'Optional gender selection (male, female).',
      ],
      'url' => [
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'description' => 'The URL where the feedback was submitted.',
      ],
      'user_id' => [
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => FALSE,
        'description' => 'The user ID who submitted the feedback (NULL for anonymous).',
      ],
      'ip_address' => [
        'type' => 'varchar',
        'length' => 128,
        'not null' => FALSE,
        'description' => 'IP address of the user who submitted the feedback.',
      ],
      'created' => [
        'type' => 'int',
        'not null' => TRUE,
        'description' => 'Unix timestamp when the feedback was created.',
      ],
    ],
    'primary key' => ['id'],
    'indexes' => [
      'entity' => ['entity_type', 'entity_id'],
      'user_id' => ['user_id'],
      'created' => ['created'],
      'is_useful' => ['is_useful'],
    ],
  ];

  return $schema;
}

/**
 * Implements hook_install().
 */
function dga_feedback_install() {
  \Drupal::logger('dga_feedback')->notice('DGA Feedback module installed.');

  // Populate default bilingual configuration values.
  $config = \Drupal::service('config.factory')->getEditable('dga_feedback.settings');

  $defaults = [
    'question_text_en' => 'Was this page useful?',
    'question_text_ar' => 'هل كانت هذه الصفحة مفيدة؟',
    'yes_button_text_en' => 'Yes',
    'yes_button_text_ar' => 'نعم',
    'no_button_text_en' => 'No',
    'no_button_text_ar' => 'لا',
    'stats_text_template_en' => '@percentage% of users said Yes from @count Feedbacks',
    'stats_text_template_ar' => '@percentage% من المستخدمين قالوا نعم من @count تعليق',
    'close_button_text_en' => 'Close',
    'close_button_text_ar' => 'إغلاق',
    'reasons_title_en' => 'Please tell us why',
    'reasons_title_ar' => 'يرجى إخبارنا بالسبب',
    'reasons_instruction_en' => 'you can select multiple options',
    'reasons_instruction_ar' => 'يمكنك اختيار خيارات متعددة',
    'reasons_yes_en' => "Content is relevant\nIt was well written\nThe layout made it easy to read\nSomething else",
    'reasons_yes_ar' => "المحتوى ذو صلة\nكان مكتوبًا بشكل جيد\nجعل التخطيط القراءة سهلة\nشيء آخر",
    'reasons_no_en' => "Content is not relevant\nContent is not accurate\nContent is too long\nSomething else",
    'reasons_no_ar' => "المحتوى غير ذي صلة\nالمحتوى غير دقيق\nالمحتوى طويل جدًا\nشيء آخر",
    'feedback_label_en' => 'Feedback',
    'feedback_label_ar' => 'التعليقات',
    'feedback_placeholder_en' => 'text placeholder',
    'feedback_placeholder_ar' => 'نص توضيحي',
    'gender_label_en' => "I'm",
    'gender_label_ar' => 'أنا',
    'gender_male_en' => 'Male',
    'gender_male_ar' => 'ذكر',
    'gender_female_en' => 'Female',
    'gender_female_ar' => 'أنثى',
    'submit_button_text_en' => 'Submit',
    'submit_button_text_ar' => 'إرسال',
    'submitted_success_text_en' => 'Your feedback is submitted!',
    'submitted_success_text_ar' => 'تم إرسال تعليقك!',
    'validation_yes_no_required_en' => 'Please select Yes or No first.',
    'validation_yes_no_required_ar' => 'يرجى اختيار نعم أو لا أولاً.',
    'validation_reason_required_en' => 'Please select at least one reason',
    'validation_reason_required_ar' => 'يرجى اختيار سبب واحد على الأقل',
    'validation_reason_invalid_en' => 'At least one valid reason must be selected.',
    'validation_reason_invalid_ar' => 'يجب اختيار سبب واحد صالح على الأقل.',
    'validation_feedback_required_en' => 'Please provide feedback text',
    'validation_feedback_required_ar' => 'يرجى تقديم نص التعليق',
    'validation_gender_required_en' => 'Please select your gender',
    'validation_gender_required_ar' => 'يرجى اختيار جنسك',
    'validation_submission_failed_en' => 'Submission failed. Please try again.',
    'validation_submission_failed_ar' => 'فشل الإرسال. يرجى المحاولة مرة أخرى.',
    'validation_unknown_error_en' => 'Unknown error',
    'validation_unknown_error_ar' => 'خطأ غير معروف',
    'button_submitting_text_en' => 'Submitting...',
    'button_submitting_text_ar' => 'جاري الإرسال...',
    'api_method_not_allowed_en' => 'Method not allowed. Use POST.',
    'api_method_not_allowed_ar' => 'الطريقة غير مسموحة. استخدم POST.',
    'api_invalid_json_en' => 'Invalid JSON data',
    'api_invalid_json_ar' => 'بيانات JSON غير صالحة',
    'api_invalid_useful_en' => 'is_useful must be "yes" or "no"',
    'api_invalid_useful_ar' => 'يجب أن يكون is_useful "yes" أو "no"',
    'api_rate_limit_en' => 'Too many submissions. Please try again later.',
    'api_rate_limit_ar' => 'عدد كبير جدًا من الإرسالات. يرجى المحاولة مرة أخرى لاحقًا.',
    'api_save_failed_en' => 'Failed to save feedback.',
    'api_save_failed_ar' => 'فشل حفظ التعليق.',
    'api_success_message_en' => 'Thank you for your feedback!',
    'api_success_message_ar' => 'شكرًا لك على تعليقك!',
    'rate_limit_max_submissions' => 20,
    'rate_limit_time_window' => 3600,
    'feedback_max_length' => 5000,
    'reason_max_length' => 200,
    'reason_max_count' => 10,
    'refresh_delay' => 3000,
    'menu_title_dga_feedback_en' => 'DGA Feedback',
    'menu_title_dga_feedback_ar' => 'تعليقات DGA',
    'menu_title_dashboard_en' => 'Feedback Dashboard',
    'menu_title_dashboard_ar' => 'لوحة تحكم التعليقات',
    'menu_title_settings_en' => 'Settings',
    'menu_title_settings_ar' => 'الإعدادات',
    'menu_title_translations_en' => 'Translations',
    'menu_title_translations_ar' => 'الترجمات',
  ];

  foreach ($defaults as $key => $value) {
    if ($config->get($key) === NULL) {
      $config->set($key, $value);
    }
  }

  $config->save();
}

/**
 * Implements hook_uninstall().
 */
function dga_feedback_uninstall() {
  // Drop the database table automatically on uninstall.
  $database = \Drupal::database();
  $schema = $database->schema();
  
  if ($schema->tableExists('dga_feedback')) {
    $schema->dropTable('dga_feedback');
    \Drupal::logger('dga_feedback')->notice('DGA Feedback table dropped on module uninstall.');
  }
  
  \Drupal::logger('dga_feedback')->notice('DGA Feedback module uninstalled.');
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc