<?php

class PageUserProfile extends Page
{
  function SendMail()
  {
    $User = ModuleUser::Cast($this->System->GetModule('User'))->User;
    $Output = '';
    if (array_key_exists('text', $_POST))
    if ($User->Licence(LICENCE_ADMIN))
    {
      $Text = $_POST['text'];
      $Email = $_POST['email'];
      $Subject = $_POST['subject'];
      $Output = 'Email: <strong>'.$Email.'</strong><br />'.
        'Předmět: <strong>'.$Subject.'</strong><br />'.
        'Text: <strong>'.$Text.'</strong><br />';

      if (@mail($Email, $Subject, $Text, 'From: '.Core::Cast($this->System)->Config['Web']['AdminEmail'].
        '\nReply-To: '.Core::Cast($this->System)->Config['Web']['AdminEmail'].'\nX-Mailer: PHP/'))
      {
        $Output .= ShowMessage(T('Message was sent'));
      }
      else $Output .= ShowMessage('Nepodařilo se odesat E-mail.', MESSAGE_CRITICAL);
    } else $Output .= ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
    return $Output;
  }

  function ExportList()
  {
    $Output = '';
    $User = ModuleUser::Cast($this->System->GetModule('User'))->User;
    $Filter = ' WHERE `Export`.`User` = '.($_GET['user'] * 1);
    $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `Export` '.$Filter);
    $DbRow = $DbResult->fetch_row();
    $PageList = GetPageList($DbRow[0]);

    $Output .= '<h3>'.T('Exports').'</h3>'.
      $PageList['Output'];

    $TableColumns = array(
      array('Name' => 'TimeCreate', 'Title' => T('Creation time')),
      array('Name' => 'Title', 'Title' => T('Name')),
      //  array('Name' => 'UserCount', 'Title' => 'Vybraných překladatelů'),
      //  array('Name' => 'GroupCount', 'Title' => 'Překladových skupin'),
      array('Name' => 'OutputType', 'Title' => T('Output type')),
      array('Name' => 'ClientVersion', 'Title' => T('Client version')),
      array('Name' => 'UsedCount', 'Title' => T('Output inspections')),
      array('Name' => '', 'Title' => T('Actions')),
    );
    $Order = GetOrderTableHeader($TableColumns, 'TimeCreate', 1);
    $Output .= '<table class="BaseTable">'.
        $Order['Output'];

    $DbResult = $this->System->Database->query('SELECT `User`.`Name` AS `UserName`, `Export`.`Id`, `Export`.`TimeCreate`, `Export`.`Title`, `Export`.`User`, `Export`.`UsedCount`, `Export`.`ClientVersion` AS `ClientVersionId`, '.
      '(SELECT Version FROM `ClientVersion` WHERE `ClientVersion`.`Id`=`Export`.`ClientVersion`) AS `ClientVersion`, '.
      '(SELECT Name FROM `ExportOutputType` WHERE `ExportOutputType`.`Id`=`Export`.`OutputType`) AS `OutputType`, '.
      '(SELECT COUNT(*) FROM `ExportGroup` WHERE `ExportGroup`.`Export`=`Export`.`Id`) AS `GroupCount`, '.
      '(SELECT COUNT(*) FROM `ExportUser` WHERE `ExportUser`.`Export`=`Export`.`Id`) AS `UserCount` FROM `Export` '.
      'LEFT JOIN `User` ON `User`.`ID`=`Export`.`User` '.$Filter.$Order['SQL'].$PageList['SQLLimit']);
    while ($Export = $DbResult->fetch_assoc())
    {
      $Action = '<a href="'.$this->System->Link('/export/?Action=View&amp;ExportId='.$Export['Id'].'&amp;Tab=0').'">'.T('Show').'</a> '.
        '<a href="'.$this->System->Link('/export/?Action=View&amp;ExportId='.$Export['Id'].'&amp;Tab=7').'">'.T('Export').'</a>';
      if ($Export['User'] == $User->Id) $Action .= ' <a href="?Action=Delete&amp;ExportId='.$Export['Id'].'" onclick="return confirmAction(\''.T('Really remove item?').'\');">'.T('Remove').'</a>';
      if ($User->Id != null) $Action .= ' <a href="'.$this->System->Link('/export/?Action=Clone&amp;ExportId='.$Export['Id']).'" onclick="return confirmAction(\''.T('Really clone item?').'\');">'.T('Clone').'</a>';
      $Output .= '<tr><td>'.HumanDate($Export['TimeCreate']).'</td>'.
        '<td>'.htmlspecialchars($Export['Title']).'</td>'.
        '<td>'.$Export['OutputType'].'</td>'.
        '<td><a href="'.$this->System->Link('/client-version/?action=item&amp;id='.$Export['ClientVersionId']).'">'.$Export['ClientVersion'].'</a></td>'.
        '<td>'.$Export['UsedCount'].'</td>'.
        '<td>'.$Action.'</td></tr>';
    }
    $Output .= '</table>'.
      $PageList['Output'];

    $Output .= '<div style="text-align: center;"><a href="'.$this->System->Link('/export/').'">'.T('Export page').'</a></div>';
    return $Output;
  }

  function ShowLastTranslated()
  {
    $Count = 20;
    $Output = '<strong>'.T('Latest translations').'</strong>';

    $GroupListQuery = 'SELECT `Group`.* FROM `Group`';
    $Query = '';
    $UnionItems = array();
    $DbResult = $this->Database->query($GroupListQuery);
    if ($DbResult->num_rows > 0)
    {
      while ($DbRow = $DbResult->fetch_assoc())
      {
        $UnionItems[] = 'SELECT `T`.`ID`, `T`.`Take`, `T`.`User`, `T`.`ModifyTime`, `T`.`Group`, `T`.`GroupName` '.
          'FROM (SELECT `T`.`User`, `T`.`ID`, `T`.`ModifyTime`, '.
          $DbRow['Id'].' AS `Group`, "'.addslashes($DbRow['Name']).'" AS `GroupName`, `T`.`Take` FROM `'.
          $DbRow['TablePrefix'].'` AS `T` '.
          'WHERE (`T`.`Complete` = 1) AND '.
          '(`T`.`Language` != '.Core::Cast($this->System)->Config['OriginalLanguage'].') AND '.
          '(`T`.`User` = '.($_GET['user'] * 1).') ORDER BY `T`.`ModifyTime` DESC LIMIT '.
          $Count.') AS `T`';
      }
      $Query = 'SELECT `TT`.*, `User`.`Name` AS `UserName`, `User`.`Id` AS `UserId` '.
          'FROM ('.implode(' UNION ', $UnionItems).') AS `TT` '.
          'JOIN `User` ON `User`.`Id` = `TT`.`User` '.
          'ORDER BY `ModifyTime` DESC LIMIT '.$Count;
      $DbResult = $this->Database->query($Query);
      $Output .= '<table class="BaseTable"><tr>'.
        '<th>'.T('Date').'</th><th>'.T('New').'</th><th>'.T('Source').'</th><th>'.T('Group').'</th></tr>';
      while ($DbRow = $DbResult->fetch_assoc())
      {
        $Output .= '<tr><td>'.HumanDate($DbRow['ModifyTime']).'</td>'.
          '<td><a href="'.$this->System->Link('/form.php?group='.$DbRow['Group'].'&amp;ID='.$DbRow['ID']).'">'.$DbRow['ID'].'</a></td>'.
          '<td><a href="'.$this->System->Link('/form.php?group='.$DbRow['Group'].'&amp;ID='.$DbRow['Take']).'">'.$DbRow['Take'].'</a></td>'.
          '<td><a href="'.$this->System->Link('/TranslationList.php?group='.$DbRow['Group'].'&amp;action=filter').'">'.T($DbRow['GroupName']).'</a></td></tr>';
      }
      $Output .= '</table>';
    }
    return $Output;
  }

  function ShowLastForum()
  {
    $Count = 20;
    $Output = '<strong>'.T('Latest forum posts').':</strong>';

    $Output .= '<div class="shoutbox">';
    $DbResult = $this->System->Database->query('SELECT `ForumText`.`Text`, '.
      '`ForumText`.`Date`, `ForumText`.`UserName`,`ForumThread`.`Text` AS `ThreadName`, '.
      '`ForumText`.`Thread` FROM `ForumText` '.
      'JOIN `ForumThread` ON `ForumThread`.`ID` = `ForumText`.`Thread` '.
      'WHERE `ForumText`.`User` = '.($_GET['user'] * 1).' ORDER BY `ForumText`.`Date` DESC LIMIT '.$Count);
    while ($Line = $DbResult->fetch_assoc())
      $Output .= '<div><a href="'.$this->System->Link('/forum/?Thread='.$Line['Thread']).'">'.htmlspecialchars($Line['ThreadName']).'</a><br />'.
        '<strong>'.$Line['UserName'].'</strong> ('.HumanDate($Line['Date']).'): '.ShowBBcodes(htmlspecialchars($Line['Text'])).'</div> ';
    $Output .= '</div>';
    return $Output;
  }

  function ShowProfile()
  {
    $Output = '';
    if (!is_numeric($_GET['user']))
    {
      $Output .= ShowMessage('Uživatel nenalezen', MESSAGE_CRITICAL);
      return $Output;
    }
    $User = ModuleUser::Cast($this->System->GetModule('User'))->User;
    $Query = 'SELECT `User`.`Name`, `UserTrace`.`LastLogin`, `UserTrace`.`LastIP`, '.
      '`User`.`Email`, `UserTrace`.`UserAgent`, `User`.`PreferredVersion`, '.
      '`User`.`TranslatedCount`, `User`.`Team`, `User`.`ID`, `User`.`Info`, '.
      '`Team`.`Name` AS `TeamName`, `Language`.`Name` AS `LanguageName`, '.
      '`ClientVersion`.`Version` AS `Version`, `User`.`XP` FROM `User` '.
      'LEFT JOIN `UserTrace` ON `UserTrace`.`User` = `User`.`Id` '.
      'LEFT JOIN `Language` ON `Language`.`Id` = `User`.`Language` '.
      'LEFT JOIN `Team` ON `Team`.`Id` = `User`.`Team` '.
      'LEFT JOIN `ClientVersion` ON `ClientVersion`.`Id` = `User`.`PreferredVersion` '.
      'WHERE `User`.`Id` = '.($_GET['user'] * 1);
    $DbResult = $this->Database->query($Query);
    if ($DbResult->num_rows > 0)
    {
      $UserLine = $DbResult->fetch_array();

      $XP = GetLevelMinMax($UserLine['XP']);
      $Output .=
        '<h3>'.T('Translator').' '.$UserLine['Name'].'</h3>'.
        T('Default language:').' <strong>'.T($UserLine['LanguageName']).'</strong><br />'.
        T('Default client version:').' <a href="'.$this->System->Link('/client-version/?action=item&amp;id='.$UserLine['PreferredVersion']).'"><strong>'.$UserLine['Version'].'</strong></a><br />'.
        T('Last logged in:').' <strong>'.HumanDateTime($UserLine['LastLogin']).'</strong><br />'.
        T('Number of translated:').' <a href="'.$this->System->Link('/TranslationList.php?user='.$UserLine['ID'].'&amp;state=2&amp;group=0').'" title="Zobrazit Všechny jeho přeložené texty"><strong>'.$UserLine['TranslatedCount'].'</strong></a><br />'.
        T('Level:').' <strong>'.$XP['Level'].'</strong> '.T('experience:').' '.ProgressBar(150, round($XP['XP'] / $XP['MaxXP'] * 100, 2), $XP['XP'].' / '.$XP['MaxXP']).'<br/>';
      if ($this->System->ModuleManager->ModuleRunning('Team') and ($UserLine['TeamName'] != ''))
        $Output .= T('Member of team:').' <a href="'.$this->System->Link('/team/?action=team&amp;id='.$UserLine['Team']).'"><strong>'.htmlspecialchars($UserLine['TeamName']).'</strong></a><br />';

      // User tags
      $Query = 'SELECT * FROM `UserTag` '.
        'LEFT JOIN `UserTagType` ON `UserTagType`.`ID` = `UserTag`.`UserTagType` '.
        'WHERE `User` = '.($_GET['user'] * 1);
      $DbResult = $this->Database->query($Query);
      if ($DbResult->num_rows != 0) 
      {
        $Output .= T('Translator is using this rules:').'<br />';
        $Output .= '<ul>';
        while ($UserTag = $DbResult->fetch_array())
        {
          $Output .= ' <li>'.$UserTag['Text'].'</li>';
        }
        $Output .= '</ul>';
      }

      $UserInfo = $UserLine['Info'];
      if ($UserInfo == null) $UserInfo = '';
      $UserInfo = htmlspecialchars(str_replace("\n", '<br/>', $UserInfo));
      $Output .= '<br /><fieldset><legend>'.T('Profile text').'</legend>'.$UserInfo.'</fieldset><br/>';

      $Output .= '<table class="Home"><tr>'.
        '<td>'.$this->ShowLastTranslated().'</td>'.
        '<td>'.$this->ExportList().'</td>'.
        '</tr></table>';
      $Output .= '<br />'.$this->ShowLastForum().'<br />';
      if ($User->Licence(LICENCE_MODERATOR))
      {
        $Output .= '<fieldset><legend>Moderování</legend>';

        $Output .= '<form action="?user='.($_GET['user'] * 1).'" method="post">Přidání tagu uživateli:<br />';
        $Query = 'SELECT * FROM `UserTagType`';
        $DbResult = $this->Database->query($Query);
        while ($UserTag = $DbResult->fetch_array()) 
        {
          //save:
          if (array_key_exists('save', $_POST)) 
          {
            if (array_key_exists('Tag'.$UserTag['ID'], $_POST)) 
            {
              $Query = 'SELECT * FROM `UserTag` '.
                'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($_GET['user']*1);
              $DbResult2 = $this->Database->query($Query);
              if ($DbResult2->num_rows == 0) 
              {
                $Query = 'INSERT INTO `UserTag` (`ID` ,`UserTagType`,`User` ) '.
                  'VALUES (NULL, '.$UserTag['ID'].' , '.($_GET['user']*1).')';
                $DbResult2 = $this->Database->query($Query);
              }
            } else 
            {
              $Query = 'DELETE FROM `UserTag` '.
                'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($_GET['user'] * 1);
              $DbResult2 = $this->Database->query($Query);
            }
          }

          $Query = 'SELECT * FROM `UserTag` '.
            'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($_GET['user'] * 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 .= '<input name="save" type="submit" value="Uložit" /></form>';

        $Output .= ' PosledníIP: <strong>'.$UserLine['LastIP'].'</strong><br />'.
          'Prohlížeč: <strong>'.$UserLine['UserAgent'].'</strong><br />'.
          'Email: <strong>'.$UserLine['Email'].'</strong><br />';
        $Output .= '<br/><form action="'.$this->System->Link('/user/').'" method="post"><div>'.
          'Napsat E-mail:'.
          '<input type="text" name="email" value="'.$UserLine['Email'].'" /><br/>'.
          'Předmět:'.
          '<input type="text" name="subject" value="'.Core::Cast($this->System)->Config['Web']['Title'].'" />'.
          '<br />'.
          '<textarea name="text" rows="20" cols="62">'.
          ''."\n".
          'S pozdravem '.$User->Name."\n".
          '--------------------------------------------------------'."\n".
          Core::Cast($this->System)->Config['Web']['Title'].' '.Core::Cast($this->System)->Config['Web']['Host'].$this->System->Link('/')."\n".
          '</textarea><br/>'.
          '<input type="submit" value="Odeslat" />'.
          '</div></form></fieldset>';
      }
    } else $Output .= ShowMessage('Uživatel nenalezen', MESSAGE_CRITICAL);
    return $Output;
  }

  function Show(): string
  {
    $this->Title = T('User profile');
    $Output = $this->SendMail();
    if (array_key_exists('user', $_GET))
    {
      $Output .= $this->ShowProfile();
    } else $Output .= ShowMessage('Nevybrán uživatel', MESSAGE_CRITICAL);
    return $Output;
  }
}