source: trunk/img_level.php@ 784

Last change on this file since 784 was 771, checked in by chronos, 11 years ago
  • Modified: Do not execute UPDATE query on user list display.
File size: 6.3 KB
Line 
1<?php
2
3require_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
11function 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
24function 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
57function 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
103function 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
143function 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}
Note: See TracBrowser for help on using the repository browser.