1 | <?php
|
---|
2 |
|
---|
3 | require_once('includes/global.php');
|
---|
4 |
|
---|
5 | // Settings
|
---|
6 | $xp_from_word = 1;
|
---|
7 | $index_level = 100;
|
---|
8 | $from_diakrit = 3; // higher xp for word with diacritics
|
---|
9 | $FontFile = 'images/FRIZQT__.ttf';
|
---|
10 |
|
---|
11 | function CheckDiakrit($Word)
|
---|
12 | {
|
---|
13 | $Result = false;
|
---|
14 | $Diakrit = array("á","č","ď","é","ě","í","ľ","ň","ó","ř","š","ť","ú",
|
---|
15 | "ů","ý","ž","Á","Č","Ď","É","Ě","Í","Ľ","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž");
|
---|
16 | for($i = 0; $i < count($Diakrit); $i = $i + 1)
|
---|
17 | {
|
---|
18 | if(strpos($Word, $Diakrit[$i]) <> false)
|
---|
19 | $Result = true;
|
---|
20 | }
|
---|
21 | return($Result);
|
---|
22 | }
|
---|
23 |
|
---|
24 | function CreateImg($prefix, $user, $xp)
|
---|
25 | {
|
---|
26 | global $index_level, $FontFile;
|
---|
27 |
|
---|
28 | if($xp > 0)
|
---|
29 | {
|
---|
30 | $level = sqrt($xp / $index_level);
|
---|
31 | $level = substr($level, 0, strpos($level, '.'));
|
---|
32 | } else $level = 0;
|
---|
33 | $xp_min = $level * $level * $index_level;
|
---|
34 | $xp_max = ($level + 1) * ($level + 1) * $index_level;
|
---|
35 | $xp_max = $xp_max - $xp_min;
|
---|
36 | $xp = $xp - $xp_min;
|
---|
37 |
|
---|
38 | if($xp_max > 0) $Percent = ( $xp / $xp_max) * 100;
|
---|
39 | else $Percent = 0;
|
---|
40 | $Percent = substr($Percent, 0, 5);
|
---|
41 |
|
---|
42 | $PercentBar = $Percent * 2.5;
|
---|
43 | $Image = ImageCreateTrueColor(250, 15);
|
---|
44 | $Color1 = imagecolorallocate($Image, 214, 214, 214);
|
---|
45 | $Color2 = imagecolorallocate($Image, 239, 131, 166);
|
---|
46 | $Color3 = imagecolorallocate($Image, 225, 0, 0);
|
---|
47 | imagefilledrectangle($Image, 0, 0, 250, 15, $Color1);
|
---|
48 | imagefilledrectangle($Image, 0, 0, $PercentBar, 59, $Color2);
|
---|
49 | ImageTTFText($Image, 11, 0, 10, 12, $Color3, $FontFile, $level.' Level');
|
---|
50 | ImageTTFText($Image, 8, 0, 80, 12, $Color3, $FontFile, $xp.'/'.$xp_max.' xp '.$user);
|
---|
51 |
|
---|
52 | if(!file_exists('tmp/'.$prefix.'/')) mkdir('tmp/'.$prefix.'/');
|
---|
53 | if(!file_exists('tmp/'.$prefix.'/'.$user.'/')) mkdir('tmp/'.$prefix.'/'.$user.'/');
|
---|
54 | ImagePNG($Image, 'tmp/'.$prefix.'/'.$user.'/level.png');
|
---|
55 | }
|
---|
56 |
|
---|
57 | function GetXPFromTranslation($UserId)
|
---|
58 | {
|
---|
59 | global $System, $TranslationTree, $xp_from_word, $from_diakrit;
|
---|
60 |
|
---|
61 | $xp = 0;
|
---|
62 | foreach($TranslationTree as $Group)
|
---|
63 | {
|
---|
64 | if($Group['TablePrefix'] != '')
|
---|
65 | {
|
---|
66 | $GroupBy = 'GROUP BY ';
|
---|
67 | foreach($TranslationTree[$Group['Id']]['Items'] as $Index => $TextItem)
|
---|
68 | {
|
---|
69 | $GroupBy .= '`'.$TextItem['Column'].'`, ';
|
---|
70 | }
|
---|
71 | $GroupBy = substr($GroupBy, 0, -2);
|
---|
72 |
|
---|
73 | $IDtran = $System->Database->query('SELECT * FROM `'.$Group['TablePrefix'].'` WHERE (`User` = '.$UserId.') AND (`Complete` = 1) AND (`Take` IS NOT NULL) '.$GroupBy);
|
---|
74 | while($Line = $IDtran->fetch_array())
|
---|
75 | {
|
---|
76 | $DbResult = $System->Database->query('SELECT * FROM `'.$Group['TablePrefix'].'` WHERE `ID` = '.$Line['Take']);
|
---|
77 | $LineComparison = $DbResult->fetch_assoc();
|
---|
78 | $xp_translation = 0;
|
---|
79 | $translated = true;
|
---|
80 | foreach($TranslationTree[$Group['Id']]['Items'] as $Index => $TextItem)
|
---|
81 | {
|
---|
82 | if(($Line[$TextItem['Column']] <> $LineComparison[$TextItem['Column']]) and (strlen($Line[$TextItem['Column']]) > (strlen($LineComparison[$TextItem['Column']]) * 0.5)))
|
---|
83 | {
|
---|
84 | $TextArr = explode(' ', $Line[$TextItem['Column']]);
|
---|
85 | foreach($TextArr as $Word)
|
---|
86 | {
|
---|
87 | if(CheckDiakrit($Word)) $indikator = $from_diakrit;
|
---|
88 | else $indikator = 1;
|
---|
89 | $xp_translation = $xp_translation + ($indikator * $xp_from_word);
|
---|
90 | }
|
---|
91 | } else
|
---|
92 | {
|
---|
93 | if (($Line[$TextItem['Column']] == $LineComparison[$TextItem['Column']]) and ('0' == $LineComparison['Language']) and ($LineComparison[$TextItem['Column']] <> '') and ($TextItem['Column'] <> 'ShortCut')) $translated = false;
|
---|
94 | }
|
---|
95 | }
|
---|
96 | if($translated) $xp = $xp + $xp_translation; // XP addition for entire translation if complete translated
|
---|
97 | }
|
---|
98 | }
|
---|
99 | }
|
---|
100 | return($xp);
|
---|
101 | }
|
---|
102 |
|
---|
103 | function ImgLevelUpdate()
|
---|
104 | {
|
---|
105 | global $System, $TranslationTree, $Config;
|
---|
106 |
|
---|
107 | // Main code for users
|
---|
108 | $DbResult = $System->Database->query('SELECT `ID`, `Name` FROM `User` WHERE `NeedUpdate` = 1');
|
---|
109 | if($DbResult->num_rows > 0)
|
---|
110 | {
|
---|
111 | while($LineUser = $DbResult->fetch_array())
|
---|
112 | {
|
---|
113 | // Build TranslatedCount query
|
---|
114 | $TranslatedCount = '(';
|
---|
115 | if(count($TranslationTree) > 0)
|
---|
116 | {
|
---|
117 | foreach($TranslationTree as $Group)
|
---|
118 | if($Group['TablePrefix'] != '')
|
---|
119 | {
|
---|
120 | $Count = '(SELECT COUNT(*) FROM `'.$Group['TablePrefix'].'` WHERE (`Complete` = 1) AND (`Language` <> '.
|
---|
121 | $Config['OriginalLanguage'].') AND (`User`='.$LineUser['ID'].'))';
|
---|
122 | $TranslatedCount .= 'COALESCE('.$Count.', 0) + ';
|
---|
123 | }
|
---|
124 | $TranslatedCount = substr($TranslatedCount, 0, -3).')';
|
---|
125 | } else $TranslatedCount = 0;
|
---|
126 |
|
---|
127 | $xp = GetXPFromTranslation($LineUser['ID']);
|
---|
128 | $System->Database->query('UPDATE `User` SET `XP` = '.$xp.', `TranslatedCount` = '.$TranslatedCount.' WHERE `User`.`ID` = '.$LineUser['ID']);
|
---|
129 | CreateImg('user', $LineUser['Name'], $xp);
|
---|
130 | }
|
---|
131 |
|
---|
132 | // Main code for translation teams
|
---|
133 | $DbResult = $System->Database->query('SELECT `ID`, `Name`, (SELECT AVG(`XP`) FROM `User` WHERE `Team` = `Team`.`Id`) AS `Average` '.
|
---|
134 | 'FROM `Team` WHERE `ID` IN (SELECT `Team` FROM `User` WHERE `NeedUpdate` = 1)');
|
---|
135 | while($LineTeam = $DbResult->fetch_array())
|
---|
136 | {
|
---|
137 | CreateImg('team', $LineTeam['Name'], substr($LineTeam['Average'], 0, strpos($LineTeam['Average'],'.'))); //image creation
|
---|
138 | }
|
---|
139 | $System->Database->query('UPDATE `User` SET `NeedUpdate` = 0');
|
---|
140 | }
|
---|
141 | }
|
---|
142 |
|
---|
143 | function ImgLevelShow()
|
---|
144 | {
|
---|
145 | global $System;
|
---|
146 |
|
---|
147 | // Do update for all users
|
---|
148 | $System->Database->query('UPDATE `User` SET `NeedUpdate` = 1');
|
---|
149 | ImgLevelUpdate();
|
---|
150 |
|
---|
151 | $Output = '<strong>Uživatelé</strong><br/>';
|
---|
152 | $ID = $System->Database->query('SELECT `ID`, `Name` FROM `User`');
|
---|
153 | while($LineUser = $ID->fetch_array())
|
---|
154 | {
|
---|
155 | $Output .= '<img src="tmp/user/'.$LineUser['Name'].'/level.png" /> '.$LineUser['Name'].'<br />';
|
---|
156 | }
|
---|
157 |
|
---|
158 | $Output .= '<br/><strong>Týmy</strong><br/>';
|
---|
159 | $ID = $System->Database->query('SELECT `ID`, `Name` FROM `Team`');
|
---|
160 | while($LineTeam = $ID->fetch_array())
|
---|
161 | {
|
---|
162 | $Output .= '<img src="tmp/team/'.$LineTeam['Name'].'/level.png" /> '.$LineTeam['Name'].'<br />';
|
---|
163 | }
|
---|
164 | WriteLog('Přegenerovány obrázky úrovní překladatelů a týmů', LOG_TYPE_ADMINISTRATION);
|
---|
165 | return($Output);
|
---|
166 | }
|
---|