source: trunk/Modules/User/Profile.php@ 825

Last change on this file since 825 was 825, checked in by chronos, 10 years ago
  • Added: Show user level and experience also on user profile page.
File size: 12.6 KB
Line 
1<?php
2
3class PageUserProfile extends Page
4{
5 function SendMail()
6 {
7 $Output = '';
8 if(array_key_exists('text', $_POST))
9 if($this->System->User->Licence(LICENCE_ADMIN))
10 {
11 $Text = $_POST['text'];
12 $Email = $_POST['email'];
13 $Subject = $_POST['subject'];
14 $Output = 'Email: <strong>'.$Email.'</strong><br />'.
15 'Předmět: <strong>'.$Subject.'</strong><br />'.
16 'Text: <strong>'.$Text.'</strong><br />';
17
18 if(@mail($Email, $Subject, $Text, 'From: '.$this->System->Config['Web']['AdminEmail'].'\nReply-To: '.$this->System->Config['Web']['AdminEmail'].'\nX-Mailer: PHP/'))
19 {
20 $Output .= ShowMessage(T('Message was sent'));
21 }
22 else $Output .= ShowMessage('Nepodařilo se odesat E-mail.', MESSAGE_CRITICAL);
23 } else $Output .= ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
24 return($Output);
25 }
26
27 function ExportList()
28 {
29 $Output = '';
30 $Filter = ' WHERE `Export`.`User` = '.($_GET['user'] * 1);
31 $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `Export` '.$Filter);
32 $DbRow = $DbResult->fetch_row();
33 $PageList = GetPageList($DbRow[0]);
34
35 $Output .= '<h3>Exporty</h3>'.
36 $PageList['Output'];
37
38 $TableColumns = array(
39 array('Name' => 'TimeCreate', 'Title' => 'Čas vytvoření'),
40 array('Name' => 'Title', 'Title' => 'Označení'),
41 // array('Name' => 'UserCount', 'Title' => 'Vybraných překladatelů'),
42 // array('Name' => 'GroupCount', 'Title' => 'Překladových skupin'),
43 array('Name' => 'OutputType', 'Title' => 'Typ výstupu'),
44 array('Name' => 'ClientVersion', 'Title' => 'Verze klienta'),
45 array('Name' => 'UsedCount', 'Title' => 'Prohlédnutí výstupu'),
46 array('Name' => '', 'Title' => 'Akce'),
47 );
48 $Order = GetOrderTableHeader($TableColumns, 'TimeCreate', 1);
49 $Output .= '<table class="BaseTable">'.
50 $Order['Output'];
51
52 $DbResult = $this->System->Database->query('SELECT `User`.`Name` AS `UserName`, `Export`.`Id`, `Export`.`TimeCreate`, `Export`.`Title`, `Export`.`User`, `Export`.`UsedCount`, `Export`.`ClientVersion` AS `ClientVersionId`, '.
53 '(SELECT Version FROM `ClientVersion` WHERE `ClientVersion`.`Id`=`Export`.`ClientVersion`) AS `ClientVersion`, '.
54 '(SELECT Name FROM `ExportOutputType` WHERE `ExportOutputType`.`Id`=`Export`.`OutputType`) AS `OutputType`, '.
55 '(SELECT COUNT(*) FROM `ExportGroup` WHERE `ExportGroup`.`Export`=`Export`.`Id`) AS `GroupCount`, '.
56 '(SELECT COUNT(*) FROM `ExportUser` WHERE `ExportUser`.`Export`=`Export`.`Id`) AS `UserCount` FROM `Export` '.
57 'LEFT JOIN `User` ON `User`.`ID`=`Export`.`User` '.$Filter.$Order['SQL'].$PageList['SQLLimit']);
58 while($Export = $DbResult->fetch_assoc())
59 {
60 $Action = '<a href="'.$this->System->Link('/export/?Action=View&amp;ExportId='.$Export['Id'].'&amp;Tab=0').'">Zobrazit</a> '.
61 '<a href="'.$this->System->Link('/export/?Action=View&amp;ExportId='.$Export['Id'].'&amp;Tab=7').'">Exportovat</a>';
62 if($Export['User'] == $this->System->User->Id) $Action .= ' <a href="?Action=Delete&amp;ExportId='.$Export['Id'].'" onclick="return confirmAction(\'Opravdu smazat položku?\');">Smazat</a>';
63 if($this->System->User->Id != null) $Action .= ' <a href="'.$this->System->Link('/export/?Action=Clone&amp;ExportId='.$Export['Id']).'" onclick="return confirmAction(\'Opravdu klonovat položku?\');">Klonovat</a>';
64 $Output .= '<tr><td>'.HumanDate($Export['TimeCreate']).'</td>'.
65 '<td>'.$Export['Title'].'</td>'.
66 '<td>'.$Export['OutputType'].'</td>'.
67 '<td><a href="'.$this->System->Link('/client-version/?action=item&amp;id='.$Export['ClientVersionId']).'">'.$Export['ClientVersion'].'</a></td>'.
68 '<td>'.$Export['UsedCount'].'</td>'.
69 '<td>'.$Action.'</td></tr>';
70 }
71 $Output .= '</table>'.
72 $PageList['Output'];
73
74 $Output .= '<div style="text-align: center;"><a href="'.$this->System->Link('/export/').'">Stránka exportů</a></div>';
75 return($Output);
76 }
77
78 function ShowLastTranslated()
79 {
80 $Count = 20;
81 $Output = '<strong>Poslední překlady:</strong>';
82
83 $GroupListQuery = 'SELECT `Group`.* FROM `Group`';
84 $Query = '';
85 $UnionItems = array();
86 $DbResult = $this->Database->query($GroupListQuery);
87 if($DbResult->num_rows > 0)
88 {
89 while($DbRow = $DbResult->fetch_assoc())
90 {
91 $UnionItems[] = 'SELECT `T`.`ID`, `T`.`Take`, `T`.`User`, `T`.`ModifyTime`, `T`.`Group`, `T`.`GroupName` '.
92 'FROM (SELECT `T`.`User`, `T`.`ID`, `T`.`ModifyTime`, '.
93 $DbRow['Id'].' AS `Group`, "'.addslashes($DbRow['Name']).'" AS `GroupName`, `T`.`Take` FROM `'.
94 $DbRow['TablePrefix'].'` AS `T` '.
95 'WHERE (`T`.`Complete` = 1) AND '.
96 '(`T`.`Language` != '.$this->System->Config['OriginalLanguage'].') AND '.
97 '(`T`.`User` = '.($_GET['user'] * 1).') ORDER BY `T`.`ModifyTime` DESC LIMIT '.
98 $Count.') AS `T`';
99 }
100 $Query = 'SELECT `TT`.*, `User`.`Name` AS `UserName`, `User`.`Id` AS `UserId` '.
101 'FROM ('.implode(' UNION ', $UnionItems).') AS `TT` '.
102 'JOIN `User` ON `User`.`Id` = `TT`.`User` '.
103 'ORDER BY `ModifyTime` DESC LIMIT '.$Count;
104 $DbResult = $this->Database->query($Query);
105 $Output .= '<table class="BaseTable"><tr>'.
106 '<th>Datum</th><th>Nový</th><th>Zdroj</th><th>Skupina</th></tr>';
107 while($DbRow = $DbResult->fetch_assoc())
108 {
109 $Output .= '<tr><td>'.HumanDate($DbRow['ModifyTime']).'</td>'.
110 '<td><a href="form.php?group='.$DbRow['Group'].'&amp;ID='.$DbRow['ID'].'">'.$DbRow['ID'].'</a></td>'.
111 '<td><a href="form.php?group='.$DbRow['Group'].'&amp;ID='.$DbRow['Take'].'">'.$DbRow['Take'].'</a></td>'.
112 '<td><a href="TranslationList.php?group='.$DbRow['Group'].'&amp;action=filter">'.$DbRow['GroupName'].'</a></td></tr>';
113 }
114 $Output .= '</table>';
115 }
116 return($Output);
117 }
118
119 function ShowLastForum()
120 {
121 $parser = new HTML_BBCodeParser2(array('filters' => array('Basic','Extended','Images','Links','Lists','Email')));
122 $Count = 20;
123 $Output = '<strong>Poslední příspěvky ve fóru:</strong>';
124
125 $Output .= '<div class="shoutbox">';
126 $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);
127 while($Line = $DbResult->fetch_assoc())
128 $Output .= '<div><a href="'.$this->System->Link('/forum/?Thread='.$Line['Thread']).'">'.$Line['ThreadName'].'</a><br /><strong>'.$Line['UserName'].'</strong> ('.HumanDate($Line['Date']).'): '.$parser->qparse($Line['Text']).'</div> ';
129 $Output .= '</div>';
130 return($Output);
131 }
132
133 function ShowProfile()
134 {
135 $Output = '';
136 $Query = 'SELECT `User`.`Name`, `UserTrace`.`LastLogin`, `UserTrace`.`LastIP`, '.
137 '`User`.`Email`, `UserTrace`.`UserAgent`, `User`.`PreferredVersion`, '.
138 '`User`.`TranslatedCount`, `User`.`Team`, `User`.`ID`, `User`.`Info`, '.
139 '`Team`.`Name` AS `TeamName`, `Language`.`Name` AS `LanguageName`, '.
140 '`ClientVersion`.`Version` AS `Version`, `User`.`XP` FROM `User` '.
141 'LEFT JOIN `UserTrace` ON `UserTrace`.`User` = `User`.`Id` '.
142 'LEFT JOIN `Language` ON `Language`.`Id` = `User`.`Language` '.
143 'LEFT JOIN `Team` ON `Team`.`Id` = `User`.`Team` '.
144 'LEFT JOIN `ClientVersion` ON `ClientVersion`.`Id` = `User`.`PreferredVersion` '.
145 'WHERE `User`.`Id` = '.($_GET['user'] * 1);
146 $DbResult = $this->Database->query($Query);
147 if($DbResult->num_rows > 0)
148 {
149 $UserLine = $DbResult->fetch_array();
150
151 $XP = GetLevelMinMax($UserLine['XP']);
152 $Output .=
153 '<h3>Překladatel '.$UserLine['Name'].'</h3>'.
154 'Výchozí jazyk: <strong>'.$UserLine['LanguageName'].'</strong><br />'.
155 'Výchozí verze klienta: <a href="'.$this->System->Link('/client-version/?action=item&amp;id='.$UserLine['PreferredVersion']).'"><strong>'.$UserLine['Version'].'</strong></a><br />'.
156 'Poslední připojení: <strong>'.HumanDateTime($UserLine['LastLogin']).'</strong><br />'.
157 'Počet přeložených: <a href="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 />'.
158 'Úroveň: <strong>'.$XP['Level'].'</strong><br/>'.
159 'Zkušenost: '.ProgressBar(150, round($XP['XP'] / $XP['MaxXP'] * 100, 2), $XP['XP'].' / '.$XP['MaxXP']).'<br/>';
160 if($UserLine['TeamName'] != '')
161 $Output .= 'Člen týmu: <a href="team/?action=team&amp;id='.$UserLine['Team'].'"><strong>'.$UserLine['TeamName'].'</strong></a><br />';
162
163 // User tags
164 $Query = 'SELECT * FROM `UserTag` '.
165 'LEFT JOIN `UserTagType` ON `UserTagType`.`ID` = `UserTag`.`UserTagType` '.
166 'WHERE `User` = '.($_GET['user'] * 1);
167 $DbResult = $this->Database->query($Query);
168 if ($DbResult->num_rows != 0) {
169 $Output .= 'Překladatel se řídí těmito pravidly:<br />';
170 $Output .= '<ul>';
171 while ($UserTag = $DbResult->fetch_array()) {
172 $Output .= ' <li>'.$UserTag['Text'].'</li>';
173 }
174 $Output .= '</ul>';
175 }
176
177
178 $Output .= '<br /><fieldset><legend>Text profilu:</legend>'.str_replace("\n", '<br/>', $UserLine['Info']).'</fieldset><br/>';
179
180 $Output .= '<table class="Home"><tr>'.
181 '<td>'.$this->ShowLastTranslated().'</td>'.
182 '<td>'.$this->ExportList().'</td>'.
183 '</tr></table>';
184 $Output .= '<br />'.$this->ShowLastForum().'<br />';
185 if($this->System->User->Licence(LICENCE_MODERATOR))
186 {
187 $Output .= '<fieldset><legend>Moderování</legend>';
188
189 $Output .= '<form action="?user='.($_GET['user'] * 1).'" method="post">Přidání tagu uživateli:<br />';
190 $Query = 'SELECT * FROM UserTagType';
191 $DbResult = $this->Database->query($Query);
192 while ($UserTag = $DbResult->fetch_array()) {
193 //save:
194 if (array_key_exists('save', $_POST)) {
195 if (array_key_exists('Tag'.$UserTag['ID'], $_POST)) {
196 $Query = 'SELECT * FROM `UserTag` '.
197 'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($_GET['user']*1);
198 $DbResult2 = $this->Database->query($Query);
199 if ($DbResult2->num_rows == 0) {
200 $Query = 'INSERT INTO `UserTag` (`ID` ,`UserTagType`,`User` ) '.
201 'VALUES (NULL, '.$UserTag['ID'].' , '.($_GET['user']*1).')';
202 $DbResult2 = $this->Database->query($Query);
203 }
204 } else {
205 $Query = 'DELETE FROM `UserTag` '.
206 'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($_GET['user'] * 1);
207 $DbResult2 = $this->Database->query($Query);
208 }
209 }
210
211 $Query = 'SELECT * FROM `UserTag` '.
212 'WHERE `UserTagType` = '.$UserTag['ID'].' AND `User` = '.($_GET['user'] * 1);
213 $DbResult2 = $this->Database->query($Query);
214 if ($DbResult2->num_rows != 0) $checked = true;
215 else $checked = false;
216
217 $Output .= CheckBox('Tag'.$UserTag['ID'], $checked, 'CheckBox');
218 $Output .= ''.$UserTag['Text'].'<br />';
219 }
220 $Output .= '<input name="save" type="submit" value="Uložit" /></form>';
221
222 $Output .= ' PosledníIP: <strong>'.$UserLine['LastIP'].'</strong><br />'.
223 'Prohlížeč: <strong>'.$UserLine['UserAgent'].'</strong><br />'.
224 'Email: <strong>'.$UserLine['Email'].'</strong><br />';
225 $Output .= '<br/><form action="user.php" method="post"><div>'.
226 'Napsat E-mail:'.
227 '<input type="text" name="email" value="'.$UserLine['Email'].'" /><br/>'.
228 'Předmět:'.
229 '<input type="text" name="subject" value="'.$this->System->Config['Web']['Title'].'" />'.
230 '<br />'.
231 '<textarea name="text" rows="20" cols="62">'.
232 ''."\n".
233 'S pozdravem '.$this->System->User->Name."\n".
234 '--------------------------------------------------------'."\n".
235 $this->System->Config['Web']['Title'].' '.$this->System->Config['Web']['Host'].$this->System->Link('/')."\n".
236 '</textarea><br/>'.
237 '<input type="submit" value="Odeslat" />'.
238 '</div></form></fieldset>';
239 }
240 } else $Output .= ShowMessage('Uživatel nenalezen', MESSAGE_CRITICAL);
241 return($Output);
242 }
243
244 function Show()
245 {
246 $this->Title = T('User profile');
247 $Output = $this->SendMail();
248 if(array_key_exists('user', $_GET))
249 {
250 $Output .= $this->ShowProfile();
251 } else $Output .= ShowMessage('Nevybrán uživatel', MESSAGE_CRITICAL);
252 return($Output);
253 }
254}
Note: See TracBrowser for help on using the repository browser.