<?php

class PageUserOptions extends Page
{
  function UserOptionsFrom()
  {
    $User = ModuleUser::Cast($this->System->GetModule('User'))->User;
    $Output = '<form action="'.$this->System->Link('/options/?action=save').'" method="post">
    <fieldset><legend>'.T('User settings').'</legend>
    <table>
    <tr><td>'.T('E-mail').':</td><td><input type="text" name="Email" value="'.$User->Email.'" /></td></tr>
    <tr><td>'.T('Original password').':</td><td><input type="password" name="OldPass" /></td></tr>
    <tr><td>'.T('New password').':</td><td><input type="password" name="NewPass" /></td></tr>
    <tr><td>'.T('New password confirmation').': </td><td><input type="password" name="NewPass2" /></td></tr>
    <tr><td>'.T('I will translate normally to').': </td><td>'.WriteLanguages($User->Language).'</td></tr>
    <tr><td>'.T('After save translation redirect to').': </td><td>';
    $Output .= '<select name="redirecting">'.
      '<option value="0">'.T('Nowhere').'</option>'.
      '<option value="1"';
    if ($User->Redirecting == '1') $Output .= ' selected="selected"';
    $Output .= '>'.T('To untranslated').'</option>';
    $Output .= '<option value="2"';
    if ($User->Redirecting == '2') $Output .= ' selected="selected"';
    $Output .= '>'.T('To next translation').'</option>';
    $Output .= '<option value="3"';
    if ($User->Redirecting == '3') $Output .= ' selected="selected"';
    $Output .= '>'.T('To previous translation').'</option>';
    $Output .= '</select>';

    $Output .= '</td></tr>'.
      '<tr><td>'.T('Preferred client version').': </td><td>'.ClientVersionSelection($User->PreferredVersion).'</td></tr>'.
      '<tr><td>'.T('Public profile text').':</td><td>'.
      '<textarea name="info" cols="60" rows="10">'.htmlspecialchars($User->Info).'</textarea></td></tr>';

    $Output .= '<tr><td>';
    $Query = 'SELECT * FROM UserTagType';
    $DbResult = $this->Database->query($Query);
    $Output .= T('User obey selected rules').':</td><td>';
    while ($UserTag = $DbResult->fetch_array()) 
    {
      $Query = 'SELECT * FROM `UserTag` '.
      //'LEFT JOIN `UserTagType` ON `UserTagType`.`ID` = `UserTag`.`UserTagType` '.
      'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($User->Id * 1);
      $DbResult2 = $this->Database->query($Query);
      if ($DbResult2->num_rows != 0) $checked = true;
        else $checked = false;

      $Output .= CheckBox('Tag'.$UserTag['ID'], $checked, 'CheckBox');
      $Output .= ''.$UserTag['Text'].'<br />';
    }
    $Output .= '</td></tr>';

    $Output .= '<tr><td colspan="2"><input type="submit" value="'.T('Save').'" /></td></tr>'.
      '</table></fieldset>'.
      '</form>';

    $Output .= '<fieldset><legend>'.T('Translation team').'</legend>';
    $DbResult = $this->Database->query('SELECT `Id`, `Name` FROM `Team`');
    $Output .= '<a href="'.$this->System->Link('/team/?action=create').'">'.T('Create team').'</a><br />'.
      '<a href="'.$this->System->Link('/team/?action=leave').'">'.T('Leave team').'</a><br />'.
      '<br /><form action="'.$this->System->Link('/team/').'" method="get">'.
      '<input type="hidden" name="action" value="gointeam"/>'.
      '<select name="id">';
    while ($LineTeam = $DbResult->fetch_assoc())
    {
      $Output .= '<option value="'.$LineTeam['Id'].'"';
      if ($LineTeam['Id'] == $User->Team) $Output .= ' selected="selected"';
      $Output .= '>'.htmlspecialchars($LineTeam['Name']).'</option>';
    }
    $Output .= '</select>'.
      '<input type="submit" value="'.T('Enter').'" />'.
      '</form>';
      '</fieldset>';
    return $Output;
  }

  function UserOptionsSave()
  {
    $Output = '';
    $User = ModuleUser::Cast($this->System->GetModule('User'))->User;
    if (array_key_exists('Email', $_POST))
    {
      $Email = $_POST['Email'];
      $OldPass = $_POST['OldPass'];
      $NewPass = $_POST['NewPass'];
      $NewPass2 = $_POST['NewPass2'];
      $Language = $_POST['Language'];
      $Redirecting = $_POST['redirecting'];
      $PreferredVersion = $_POST['ClientVersion'];
      if ($PreferredVersion == '') $PreferredVersion = null;
      $Info = $_POST['info'];

      // Do user want to change password?
      if (($OldPass != '') or ($NewPass != '') or ($NewPass2 != ''))
      {
        if ($NewPass == $NewPass2)
        {
          $DbResult = $this->System->Database->query('SELECT `Pass`, '.$User->CryptPasswordSQL('"'.$OldPass.'"', '`Salt`').' AS `Hash` FROM `User` WHERE `ID`= '.$User->Id);
          $DbRow = $DbResult->fetch_assoc();
          if ($DbRow['Hash'] == $DbRow['Pass'])
          {
            // Update password
            $Salt = $User->GetPasswordSalt();
            $this->Database->query('UPDATE `User` SET `Pass` = '.$User->CryptPasswordSQL('"'.$NewPass.'"', '"'.$Salt.'"').', `Salt`="'.$Salt.'" WHERE `ID` = '.$User->Id);
            $Output .= ShowMessage('Heslo změněno.');
          } else $Output .= ShowMessage('Staré heslo neodpovídá.', MESSAGE_CRITICAL);
        } else $Output .= ShowMessage('Hesla se neshodují.', MESSAGE_CRITICAL);
      }
      //tag
      $Query = 'SELECT * FROM UserTagType';
      $DbResult = $this->Database->query($Query);
      while ($UserTag = $DbResult->fetch_array()) 
      {
        if (array_key_exists('Tag'.$UserTag['ID'], $_POST)) 
        {
          $Query = 'SELECT * FROM `UserTag` '.
            'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($User->Id * 1);
          $DbResult2 = $this->Database->query($Query);
          if ($DbResult2->num_rows == 0) 
          {
            $Query = 'INSERT INTO `UserTag` (`ID` ,`UserTagType`,`User` ) '.
              'VALUES (NULL, '.$UserTag['ID'].' , '.($User->Id * 1).')';
            $DbResult2 = $this->Database->query($Query);
          }
        } else 
        {
          $Query = 'DELETE FROM `UserTag` '.
            'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($User->Id * 1);
          $DbResult2 = $this->Database->query($Query);
        }
      }

      $this->Database->update('User', '`ID` = '.$User->Id, array('Email' => $Email,
        'Language' => $Language, 'Redirecting' => $Redirecting, 'Info' => $Info,
        'PreferredVersion' => $PreferredVersion));
      $Output .= ShowMessage('Úprava nastavení proběhla v pořádku, Email: <b>'.$Email.'</b> Uživatel: <b>'.$User->Name.'</b>');
      $this->System->ModuleManager->Modules['Log']->WriteLog('Úprava nastavení!', LOG_TYPE_USER);
      $User->Load();
    } else $Output .= ShowMessage('Nezadány údaje.', MESSAGE_CRITICAL);
    return $Output;
  }

  function Show(): string
  {
    $this->Title = T('User settings');
    $Output = '';
    $User = ModuleUser::Cast($this->System->GetModule('User'))->User;
    if ($User->Licence(LICENCE_USER))
    {
      if (array_key_exists('action', $_GET) and ($_GET['action'] == 'save'))
      {
        $Output .= $this->UserOptionsSave();
      }
      $Output .= $this->UserOptionsFrom();
    } else $Output .= ShowMessage('Nejste přihlášený.', MESSAGE_CRITICAL);
    return $Output;
  }
}
