<?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&ExportId='.$Export['Id'].'&Tab=0').'">'.T('Show').'</a> '. '<a href="'.$this->System->Link('/export/?Action=View&ExportId='.$Export['Id'].'&Tab=7').'">'.T('Export').'</a>'; if ($Export['User'] == $User->Id) $Action .= ' <a href="?Action=Delete&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&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&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'].'&ID='.$DbRow['ID']).'">'.$DbRow['ID'].'</a></td>'. '<td><a href="'.$this->System->Link('/form.php?group='.$DbRow['Group'].'&ID='.$DbRow['Take']).'">'.$DbRow['Take'].'</a></td>'. '<td><a href="'.$this->System->Link('/TranslationList.php?group='.$DbRow['Group'].'&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&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'].'&state=2&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&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; } }