Changeset 46
- Timestamp:
- Jul 27, 2014, 9:05:14 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Application/Config/ConfigSample.php
r40 r46 1 1 <?php 2 2 3 $Config = array3 $Config['Application'] = array 4 4 ( 5 'Database' => array6 (7 'Host' => 'localhost',8 'User' => 'root',9 'Password' => '',10 'Database' => 'statistic',11 'Prefix' => '',12 'Charset' => 'utf8',13 ),14 5 'AddNewValueUrl' => 'http://localhost/dev/statistic/?Module=Measure&Action=Add', 15 6 'Debug' => 0, 16 'Web' => array17 (18 'Title' => 'Statistika',19 'Charset' => 'utf-8',20 'Admin' => 'Admin',21 'AdminEmail' => 'admin@domain',22 'ShowPHPError' => false,23 'ShowSQLQuery' => false,24 'ShowSQLError' => false,25 'ErrorLogFile' => 'php_script_error.log',26 'Locale' => 'cz',27 'UserAnonymousId' => 1,28 'ShowRuntimeInfo' => false,29 'FormatHTML' => false,30 ),31 7 'DivisionCount' => 500, 32 8 'LevelReducing' => 5, -
trunk/Application/CustomOutput.php
r45 r46 15 15 $Tag = new XMLTag('div'); 16 16 $Tag->Attributes = array('class' => 'Header'); 17 $Tag->SubElements = ' '; 17 18 return($Tag); 18 19 } -
trunk/Application/Model/Measure.php
r45 r46 13 13 var $DivisionCount = 500; 14 14 var $ValueTypes = array('Min', 'Avg', 'Max'); 15 15 16 16 function Load($Id) 17 17 { … … 24 24 } else throw new Exception('Measure not found'); 25 25 } 26 26 27 27 function TimeSegment($Base, $Level) 28 28 { … … 50 50 $Result = $this->Database->select($this->Data['DataTable'], '*', 'Measure='.$this->Data['Id'].' AND Level='.$Level.' ORDER BY Time DESC LIMIT 2'); 51 51 //echo($Database->LastQuery."\n"); 52 if($Result->num_rows == 0) 53 { 54 $this->Database->insert($this->Data['DataTable'], array('Min' => $Value['Min'], 'Avg' => $Value['Avg'], 'Max' => $Value['Max'], 'Level' => $Level, 'Measure' => $this->Data['Id'], 'Time' => $this->Database->TimeToMysqlDateTime($Time), 'Continuity' => 0)); 52 if($Result->num_rows == 0) 53 { 54 $this->Database->insert($this->Data['DataTable'], array('Min' => $Value['Min'], 'Avg' => $Value['Avg'], 'Max' => $Value['Max'], 'Level' => $Level, 'Measure' => $this->Data['Id'], 'Time' => $this->Database->TimeToMysqlDateTime($Time), 'Continuity' => 0)); 55 55 //echo($Database->LastQuery."\n"); 56 56 } else if($Result->num_rows == 1) … … 64 64 //echo($Level.': '.$Time.' - '.MysqlDateTimeToTime($LastValue['Time']).' '.($Time - MysqlDateTimeToTime($LastValue['Time'])).' = '.$Measure['Period']."\n"); 65 65 if((($Time - $this->Database->MysqlDateTimeToTime($LastValue['Time'])) < 0.75 * $this->Data['Period']) and ($Level == 0)) 66 { 66 { 67 67 echo('Too short period\n'); 68 68 } else … … 73 73 if(($LastValue['Min'] == $NextToLastValue['Min']) and ($LastValue['Min'] == $Value['Min']) and ($LastValue['Avg'] == $NextToLastValue['Avg']) and ($LastValue['Avg'] == $Value['Avg']) and ($LastValue['Max'] == $NextToLastValue['Max']) and ($LastValue['Max'] == $Value['Max']) and ($LastValue['Continuity'] == 1) and ($Continuity == 1)) 74 74 { 75 $this->Database->update($this->Data['DataTable'], '(Time="'.$LastValue['Time'].'") AND (Level='.$Level.') AND (Measure='.$ Measure['Id'].')', array('Time' => $this->Database->TimeToMysqlDateTime($Time)));75 $this->Database->update($this->Data['DataTable'], '(Time="'.$LastValue['Time'].'") AND (Level='.$Level.') AND (Measure='.$this->Data['Id'].')', array('Time' => $this->Database->TimeToMysqlDateTime($Time))); 76 76 //echo($this->Database->LastQuery."\n"); 77 77 } else … … 79 79 $this->Database->insert($this->Data['DataTable'], array('Min' => $Value['Min'], 'Avg' => $Value['Avg'], 'Max' => $Value['Max'], 'Level' => $Level, 'Measure' => $this->Data['Id'], 'Time' => $this->Database->TimeToMysqlDateTime($Time), 'Continuity' => $Continuity)); 80 80 } 81 } 81 } 82 82 83 83 // Update next level … … 85 85 { 86 86 $Level = $Level + 1; 87 //echo('Level '.$Level."<br >\n");87 //echo('Level '.$Level."<br/>\n"); 88 88 $TimeSegment = $this->TimeSegment($this->Data['Period'], 1); 89 89 $EndTime = $this->AlignTime($Time, $TimeSegment); … … 91 91 $StartTime = $EndTime - $TimeSegment; 92 92 93 //echo(" ".$TimeSegment." ".$StartTime.'-'.$EndTime."<br >\n");93 //echo(" ".$TimeSegment." ".$StartTime.'-'.$EndTime."<br/>\n"); 94 94 //flush(); 95 95 … … 127 127 { 128 128 $Y = ($Y2 - $Y1) / ($X2 - $X1) * ($X - $X1) + $Y1; 129 //echo($Y1.'-'.$Y.'-'.$Y2.' '.$X1.'-'.$X.'-'.$X2.'<br >');129 //echo($Y1.'-'.$Y.'-'.$Y2.' '.$X1.'-'.$X.'-'.$X2.'<br/>'); 130 130 return($Y); 131 131 } … … 182 182 } 183 183 } 184 } 185 else if($ValueType == 'Min') 186 { 187 //echo($Values[$I+1]['continuity'].'=='.$Measure['ContinuityEnabled'].'<br >');184 } 185 else if($ValueType == 'Min') 186 { 187 //echo($Values[$I+1]['continuity'].'=='.$Measure['ContinuityEnabled'].'<br/>'); 188 188 if($Values[$I + 1]['Continuity'] == $this->Data['ContinuityEnabled']) 189 189 { … … 203 203 $NewValue[$ValueType] = $NewValue[$ValueType]; 204 204 } 205 //if(($RightTime - $LeftTime) > 0) 206 if($this->Data['Cumulative'] == 0) 205 //if(($RightTime - $LeftTime) > 0) 206 if($this->Data['Cumulative'] == 0) 207 207 { 208 208 $NewValue['Avg'] = $NewValue['Avg'] / ($RightTime - $LeftTime); 209 209 } 210 210 return($NewValue); 211 //echo($NewValue['avg'].'<br >');211 //echo($NewValue['avg'].'<br/>'); 212 212 //return(array('min' => rand(0,1), 'avg' => $NewValue['avg'], 'max' => rand(0,1))); 213 213 } … … 216 216 { 217 217 // Get first and last time 218 //echo($Measure['Id'].','.$Level.','.StatTableName($Level)."\n"); 218 //echo($Measure['Id'].','.$Level.','.StatTableName($Level)."\n"); 219 219 $Result = $this->Database->select($this->Data['DataTable'], '*', 'Measure='.$this->Data['Id'].' AND Level='.$Level.' ORDER BY Time LIMIT 1'); 220 220 if($Result->num_rows > 0) … … 231 231 } else $AbsoluteRightTime = 0; 232 232 233 if($this->Debug) 234 { 235 echo('AbsoluteLeftTime: '.$AbsoluteLeftTime.'('.$this->Database->TimeToMysqlDateTime($AbsoluteLeftTime).')<br >');236 echo('AbsoluteRightTime: '.$AbsoluteRightTime.'('.$this->Database->TimeToMysqlDateTime($AbsoluteRightTime).')<br >');233 if($this->Debug) 234 { 235 echo('AbsoluteLeftTime: '.$AbsoluteLeftTime.'('.$this->Database->TimeToMysqlDateTime($AbsoluteLeftTime).')<br/>'); 236 echo('AbsoluteRightTime: '.$AbsoluteRightTime.'('.$this->Database->TimeToMysqlDateTime($AbsoluteRightTime).')<br/>'); 237 237 } 238 238 return(array('Left' => $AbsoluteLeftTime, 'Right' => $AbsoluteRightTime)); … … 240 240 241 241 function LoadRightSideValue($Level, $Time) 242 { 242 { 243 243 $Result = array(); 244 244 $DbResult = $this->Database->select($this->Data['DataTable'], '*', 'Time > "'.$this->Database->TimeToMysqlDateTime($Time).'" AND Measure='.$this->Data['Id'].' AND Level='.$Level.' ORDER BY Time ASC LIMIT 1'); … … 267 267 { 268 268 $Result = array(); 269 //echo('SELECT * FROM '.StatTableName($Level). ' WHERE '. 'Time < "'.TimeToMysqlDateTime($Time).'" AND measure='.$Measure['Id'].' AND level='.$Level.' ORDER BY Time DESC LIMIT 1'."<br >\n");269 //echo('SELECT * FROM '.StatTableName($Level). ' WHERE '. 'Time < "'.TimeToMysqlDateTime($Time).'" AND measure='.$Measure['Id'].' AND level='.$Level.' ORDER BY Time DESC LIMIT 1'."<br/>\n"); 270 270 $DbResult = $this->Database->select($this->Data['DataTable'], '*', 'Time < "'.$this->Database->TimeToMysqlDateTime($Time).'" AND Measure='.$this->Data['Id'].' AND Level='.$Level.' ORDER BY Time DESC LIMIT 1'); 271 271 if($DbResult->num_rows > 0) … … 294 294 function GetValues($TimeFrom, $TimeTo, $Level) 295 295 { 296 if($this->Debug) echo('TimeFrom: '.$TimeFrom.'('.$this->Database->TimeToMysqlDateTime($TimeFrom).')<br >');297 if($this->Debug) echo('TimeTo: '.$TimeTo.'('.$this->Database->TimeToMysqlDateTime($TimeTo).')<br >');296 if($this->Debug) echo('TimeFrom: '.$TimeFrom.'('.$this->Database->TimeToMysqlDateTime($TimeFrom).')<br/>'); 297 if($this->Debug) echo('TimeTo: '.$TimeTo.'('.$this->Database->TimeToMysqlDateTime($TimeTo).')<br/>'); 298 298 299 299 //$AbsoluteTime = GetTimeRange($MeasureId); 300 300 301 // if(($TimeFrom > $AbsoluteLeftTime) and ($TimeStart < $AbsoluteRightTime) and 301 // if(($TimeFrom > $AbsoluteLeftTime) and ($TimeStart < $AbsoluteRightTime) and 302 302 // ($TimeTo > $AbsoluteLeftTime) and ($TimeTo < $AbsoluteRightTime)) 303 303 // { … … 319 319 // die(); 320 320 if($this->Debug) echo('Item count: '.count($Values)); 321 321 322 322 $Points = array(); 323 323 if(count($Values) > 0) 324 324 { 325 325 $Values = array_merge($this->LoadLeftSideValue($Level, $TimeFrom), $Values, $this->LoadRightSideValue($Level, $TimeTo)); 326 //echo(count($Values).'<br >');327 //echo($TimeFrom.','.$TimeTo.'<br >');328 //echo($Values[0]['Time'].'<br >');326 //echo(count($Values).'<br/>'); 327 //echo($TimeFrom.','.$TimeTo.'<br/>'); 328 //echo($Values[0]['Time'].'<br/>'); 329 329 $StartIndex = 0; 330 330 $Points = array(); 331 //echo($DivisionCount.'<br >');331 //echo($DivisionCount.'<br/>'); 332 332 if($this->Debug) print_r($Values); 333 333 //die(); … … 335 335 { 336 336 $TimeStart = $TimeFrom + (($TimeTo - $TimeFrom) / $this->DivisionCount) * $I; 337 //if($Debug) echo('TimeStart '.$I.': '.$TimeStart.'('.TimeToMysqlDateTime($TimeStart).')<br >');337 //if($Debug) echo('TimeStart '.$I.': '.$TimeStart.'('.TimeToMysqlDateTime($TimeStart).')<br/>'); 338 338 $TimeEnd = $TimeFrom + (($TimeTo - $TimeFrom) / $this->DivisionCount) * ($I + 1); 339 if($this->Debug) echo('TimeEnd '.$I.': '.$TimeEnd.'('.$this->Database->TimeToMysqlDateTime($TimeEnd).')<br >');340 //echo($TimeStart.','.$TimeEnd.'<br >');339 if($this->Debug) echo('TimeEnd '.$I.': '.$TimeEnd.'('.$this->Database->TimeToMysqlDateTime($TimeEnd).')<br/>'); 340 //echo($TimeStart.','.$TimeEnd.'<br/>'); 341 341 342 342 $EndIndex = $StartIndex; … … 344 344 //while(($Values[$EndIndex]['Time'] < $TimeEnd)) $EndIndex = $EndIndex + 1; 345 345 $SubValues = array_slice($Values, $StartIndex, $EndIndex - $StartIndex + 1); 346 //echo($StartIndex.','.$EndIndex.' '.count($SubValues).'<br >');346 //echo($StartIndex.','.$EndIndex.' '.count($SubValues).'<br/>'); 347 347 //print_r($SubValues); 348 348 $Points[] = $this->ComputeOneValue($TimeStart, $TimeEnd, $SubValues, $Level); … … 356 356 function RebuildMeasureCache() 357 357 { 358 echo('Velicina '.$this->Data['Name']."<br >\n");358 echo('Velicina '.$this->Data['Name']."<br/>\n"); 359 359 if($this->Data['Continuity'] == 0) $this->Data['ContinuityEnabled'] = 0; // non continuous 360 360 else $this->Data['ContinuityEnabled'] = 2; // continuous graph … … 365 365 echo("Mazu starou cache (".$Row[0]." polozek)..."); 366 366 $this->Database->delete($this->Data['DataTable'], 'Level > 0 AND Measure='.$this->Data['Id']); 367 echo("<br >\n");367 echo("<br/>\n"); 368 368 369 369 for($Level = 1; $Level <= $this->MaxLevel; $Level++) 370 370 { 371 echo('Uroven '.$Level."<br >\n");371 echo('Uroven '.$Level."<br/>\n"); 372 372 $TimeRange = $this->GetTimeRange($Level - 1); 373 373 //echo($Measure['Id'].','.($Level-1)."\n"); … … 377 377 $EndTime = $this->AlignTime($TimeRange['Right'], $TimeSegment); 378 378 $BurstCount = 500; 379 echo('For 0 to '.round(($EndTime - $StartTime) / $TimeSegment / $BurstCount)."<br >\n");379 echo('For 0 to '.round(($EndTime - $StartTime) / $TimeSegment / $BurstCount)."<br/>\n"); 380 380 for($I = 0; $I <= round(($EndTime - $StartTime) / $TimeSegment / $BurstCount); $I++) 381 381 { … … 384 384 $EndTime2 = $StartTime + ($I + 1) * $BurstCount * $TimeSegment; 385 385 $Values = array(); 386 $DbResult = $this->Database->select($this->Data['DataTable'], '*', 'Time > "'.$this->Database->TimeToMysqlDateTime($StartTime2).'" AND Time < "'.$this->Database->TimeToMysqlDateTime($EndTime2).'" AND Measure='.$Measure['Id'].' AND Level='.($Level - 1).' ORDER BY Time'); 386 $DbResult = $this->Database->select($this->Data['DataTable'], '*', 'Time > "'. 387 $this->Database->TimeToMysqlDateTime($StartTime2).'" AND Time < "'. 388 $this->Database->TimeToMysqlDateTime($EndTime2).'" AND Measure='.$this->Data['Id']. 389 ' AND Level='.($Level - 1).' ORDER BY Time'); 387 390 while($Row = $DbResult->fetch_assoc()) 388 391 { … … 393 396 if(count($Values) > 0) 394 397 { 395 $Values = array_merge($this->LoadLeftSideValue($Level - 1, $StartTime2), $Values, $this->LoadRightSideValue($Level - 1, $Measure, $EndTime2)); 398 $Values = array_merge($this->LoadLeftSideValue($Level - 1, $StartTime2), 399 $Values, $this->LoadRightSideValue($Level - 1, $EndTime2)); 396 400 397 401 $StartIndex = 0; … … 405 409 while($Values[$EndIndex]['Time'] < $EndTime3) $EndIndex = $EndIndex + 1; 406 410 $SubValues = array_slice($Values, $StartIndex, $EndIndex - $StartIndex + 1); 407 //echo($StartIndex.','.$EndIndex.' '.count($SubValues).'<br >');411 //echo($StartIndex.','.$EndIndex.' '.count($SubValues).'<br/>'); 408 412 //print_r($SubValues); 409 413 if(count($SubValues) > 2) … … 418 422 // Load values in time range 419 423 //array_pop($NextValues); 420 } 421 echo("Uroven dokoncena<br >\n");424 } 425 echo("Uroven dokoncena<br/>\n"); 422 426 $DbResult = $this->Database->select($this->Data['DataTable'], 'COUNT(*)', 'Level='.$Level.' AND Measure='.$this->Data['Id']); 423 427 $Row = $DbResult->fetch_row(); 424 echo("Vloženo ".$Row[0]." položek.<br >\n");428 echo("Vloženo ".$Row[0]." položek.<br/>\n"); 425 429 } 426 430 } … … 441 445 { 442 446 $Measure->RebuildMeasureCache(); 443 echo('Velicina dokoncena<br >');447 echo('Velicina dokoncena<br/>'); 444 448 } 445 449 } -
trunk/Application/Model/User.php
r42 r46 38 38 $Query = $this->Database->select('UserOnline', '*', 'SessionId="'.$SID.'"'); 39 39 $Row = $Query->fetch_assoc(); 40 if($Row['User'] != $this->AnonymousUserId) 40 if($Row['User'] != $this->AnonymousUserId) 41 41 { 42 42 $Query = $this->Database->select('User', '*', 'Id='.$Row['User']); 43 43 $this->Data = $Query->fetch_assoc(); 44 44 $Result = $this->System->Translate('UserLogged'); 45 } else 45 } else 46 46 { 47 47 $Query = $this->Database->select('User', '*', 'Id='.$this->AnonymousUserId); … … 75 75 if($Query->num_rows > 0) $Result = $this->System->Translate('NameUsed'); 76 76 else 77 { 77 { 78 78 $Query = $this->Database->select('User', '*', 'Email = "'.$Email.'"'); 79 79 if($Query->num_rows > 0) $Result = $this->System->Translate('EmailUsed'); … … 82 82 $this->Database->insert('User', array('Name' => $Name, 'Login' => $Login, 'Password' => $this->PasswordHash($Login, $Password), 'Email' => $Email, 'RegistrationTime' => 'NOW()', 'Locked' => 1, 'Role' => 2)); 83 83 $UserId = $this->Database->insert_id; 84 84 85 85 $Subject = FromUTF8('Registrace nového účtu', 'iso2'); 86 $Message = 'Provedli jste registraci nového účtu na serveru <a href="http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'/">http://'.$Config['System']['Host'].$Config['System']['RootFolder']."/</a>.<br >\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br><br>\n\nVáš účet je: ".$Login."\n<br>Pro dokončení registrace klikněte na tento odkaz: ".'<a href="http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.$this->PasswordHash($Login, $Password).'">http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.$this->PasswordHash($Login, $Password).'</a>.'."\n<br> \n\n<br><br>Na tento email neodpovídejte.";86 $Message = 'Provedli jste registraci nového účtu na serveru <a href="http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'/">http://'.$Config['System']['Host'].$Config['System']['RootFolder']."/</a>.<br/>\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br/><br/>\n\nVáš účet je: ".$Login."\n<br/>Pro dokončení registrace klikněte na tento odkaz: ".'<a href="http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.$this->PasswordHash($Login, $Password).'">http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.$this->PasswordHash($Login, $Password).'</a>.'."\n<br/> \n\n<br/><br/>Na tento email neodpovídejte."; 87 87 $AdditionalHeaders = "To: ".$Name." <".$Email.">\n"."From: ".FromUTF8($Config['System']['Title'], 'iso2')." <noreplay@zdechov.net>\n"."MIME-Version: 1.0\n"."Content-type: text/html; charset=utf-8"; 88 88 mail($Email, $Subject, $Message, $AdditionalHeaders); … … 121 121 if($Row['Password'] != $this->PasswordHash($Login, $Password)) $Result = $this->System->Translate('BadPassword'); 122 122 else if($Row['Locked'] == 1) $Result = $this->System->Translate('AccountLocked'); 123 else 124 { 125 $this->Database->update('User', 'Id='.$Row['Id'], array('LastLoginTime' => 'NOW()', 'LastIpAddress' => GetRemoteAddress())); 123 else 124 { 125 $this->Database->update('User', 'Id='.$Row['Id'], array('LastLoginTime' => 'NOW()', 'LastIpAddress' => GetRemoteAddress())); 126 126 $this->Database->update('UserOnline', 'SessionId="'.$SID.'"', array('User' => $Row['Id'])); 127 127 // načtení stavu stromu … … 185 185 // Check group-operation relation 186 186 $DbResult = $this->Database->select('PermissionGroupAssignment', '*', '`Group`="'.$GroupId.'" AND `GroupOrOperation`="'.$OperationId.'" AND `Type`="Operation"'); 187 if($DbResult->num_rows > 0) return(true); 187 if($DbResult->num_rows > 0) return(true); 188 188 return(false); 189 189 } … … 222 222 223 223 $Subject = 'Obnova hesla'; 224 $Message = 'Požádali jste o zaslání nového hesla na serveru <a href="http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'">http://'.$Config['System']['Host'].$Config['System']['RootFolder']."</a>.<br />\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br /><br />\n\nVaše nové heslo k účtu ".$Row['Login']." je: ".$NewPassword."\n<br >Pro aktivaci tohoto hesla klikněte na ".'<a href="http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'/?Action=PasswordRecoveryConfirm&User='.$Row['Id'].'&H='.$Row['Password'].'&P='.$NewPassword.'">tento odkaz</a>.'."\n<br /> Po přihlášení si prosím změňte heslo na nové.\n\n<br><br>Na tento email neodpovídejte.";224 $Message = 'Požádali jste o zaslání nového hesla na serveru <a href="http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'">http://'.$Config['System']['Host'].$Config['System']['RootFolder']."</a>.<br />\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br /><br />\n\nVaše nové heslo k účtu ".$Row['Login']." je: ".$NewPassword."\n<br/>Pro aktivaci tohoto hesla klikněte na ".'<a href="http://'.$Config['System']['Host'].$Config['System']['RootFolder'].'/?Action=PasswordRecoveryConfirm&User='.$Row['Id'].'&H='.$Row['Password'].'&P='.$NewPassword.'">tento odkaz</a>.'."\n<br /> Po přihlášení si prosím změňte heslo na nové.\n\n<br/><br/>Na tento email neodpovídejte."; 225 225 $AdditionalHeaders = "To: ".$Row['Name']." <".$Row['Email'].">\n"."From: ".FromUTF8($Config['System']['Title'], 'iso2')." <noreplay@zdechov.net>\n"."MIME-Version: 1.0\n"."Content-type: text/html; charset=utf-8"; 226 226 mail($Row['Email'], $Subject, $Message, $AdditionalHeaders); … … 247 247 return($Output); 248 248 } 249 249 250 250 function ServerCount() 251 251 { … … 264 264 $Total += $Server->RealmCount(); 265 265 } 266 return($Total); 266 return($Total); 267 267 } 268 268 } -
trunk/Application/View/Graph.php
r45 r46 6 6 class GraphView extends View 7 7 { 8 var $DefaultWidth; 9 var $DefaultHeight; 10 11 function __construct($System) 12 { 13 parent::__construct($System); 14 $this->DefaultWidth = 800; 15 $this->DefaultHeight = 200; 16 } 17 8 18 function Render() 9 19 { 10 if(array_key_exists('Debug', $_GET)) $Debug = $_GET['Debug']; 20 if(array_key_exists('Debug', $_GET)) $Debug = $_GET['Debug']; 11 21 else $Debug = 0; 12 22 13 23 if(!array_key_exists('From', $_GET)) die('Musíte zadat čas počátku'); 14 24 $StartTime = addslashes($_GET['From']); … … 18 28 $TimeDifference = $EndTime - $StartTime; 19 29 if(!array_key_exists('Measure', $_GET)) die('Musíte zadat měřenou veličinu'); 20 $MeasureId = addslashes($_GET['Measure']); 21 if(!array_key_exists('Width', $_GET)) $Width = $ DefaultWidth;30 $MeasureId = addslashes($_GET['Measure']); 31 if(!array_key_exists('Width', $_GET)) $Width = $this->DefaultWidth; 22 32 else $Width = addslashes($_GET['Width']); 23 if(!array_key_exists('Height', $_GET)) $Height = $ DefaultHeight;33 if(!array_key_exists('Height', $_GET)) $Height = $this->DefaultHeight; 24 34 else $Height = addslashes($_GET['Height']); 25 35 if(!array_key_exists('Differential', $_GET)) $Differential = $this->Config['Application']['DefaultVariables']['Differential']; … … 50 60 $Points = $Measure->GetValues($StartTime, $EndTime, $Level); 51 61 52 if($Debug) echo('Points count: '.count($Points).'<br/>'); 53 //if($Debug) foreach($Points as $Index => $Item) 54 // echo($Index.': '.$Item['min'].'<br >');62 if($Debug) echo('Points count: '.count($Points).'<br/>'); 63 //if($Debug) foreach($Points as $Index => $Item) 64 // echo($Index.': '.$Item['min'].'<br/>'); 55 65 56 66 // Calculate total max, avg, min value … … 73 83 $AvgValue = $AvgValue / count($Points); //round( * $Measure['Divider']) / $Measure['Divider']; 74 84 75 // Generate polygon and recalculate y values to fit graph height 85 // Generate polygon and recalculate y values to fit graph height 76 86 $PointsMin = array(0, $Height - 1); 77 87 $PointsAvg = array(0, $Height - 1); 78 88 $PointsMax = array(0, $Height - 1); 79 89 if(($MaxValue - $MinValue) == 0) $MaxValue = $MinValue + 1; 80 { 90 { 81 91 foreach($Points as $Index => $Item) 82 92 { … … 87 97 $PointsMax[] = $Index * $Width / $Measure->DivisionCount; 88 98 $PointsMax[] = $Height - 1 - ($Points[$Index]['Max'] - $MinValue) / ($MaxValue - $MinValue) * $Height * $this->Config['Application']['ValueToImageHeigthCoefficient']; 89 //echo($Index.' - '.$Item.' '.$Points[$Index].'<br >');99 //echo($Index.' - '.$Item.' '.$Points[$Index].'<br/>'); 90 100 } 91 101 } … … 107 117 //array_unshift($Points, 0); 108 118 //$Points[] = $Width - 1; 109 //$Points[] = $Height - 1; 119 //$Points[] = $Height - 1; echo('sds'); 120 110 121 111 122 //print_r($PointsMax); 112 123 113 124 // Generate image 114 if(!$Debug) 125 if(!$Debug) 115 126 { 116 127 Header('Content-type: image/png'); 117 Header('Cache-Control: no-cache'); // Dynamic graph - no cache 128 Header('Cache-Control: no-cache'); // Dynamic graph - no cache 118 129 $Image = @imagecreate($Width, $Height); 119 130 $BackgroundColor = imagecolorallocate($Image, 255, 255, 255); … … 132 143 imagefilledpolygon($Image, $PointsAvg, count($PointsAvg) / 2, $LightGreen); 133 144 imagefilledpolygon($Image, $PointsMin, count($PointsMin) / 2, $LightBlue); 134 145 135 146 $TimeMarks = array(1, 60, 60*60, 60*60*24, 60*60*24*7, 60*60*24*30, 60*60*24*365, 60*60*24*365*10); 136 147 137 148 $TimeRange = $EndTime - $StartTime; 138 149 $TimeMarksIndex = 0; … … 140 151 if($TimeMarksIndex < 2) $TimeMarksIndex = 2; 141 152 $MajorTimeMarks = $TimeMarks[$TimeMarksIndex - 1]; 142 $MinorTimeMarks = $TimeMarks[$TimeMarksIndex - 2]; 143 144 $TimeShift = $Measure->AlignTime($StartTime, $MajorTimeMarks) - $StartTime; 153 $MinorTimeMarks = $TimeMarks[$TimeMarksIndex - 2]; 154 155 $TimeShift = $Measure->AlignTime($StartTime, $MajorTimeMarks) - $StartTime; 145 156 //imagestring($Image, 10, 40, 50, $TimeShift, $Black); 146 157 147 158 // Zobraz měřítko Y 148 159 $VerticalLinesDistance = $Height / $VerticalLinesCount; … … 152 163 for($X = 1; $X < $Width; $X = $X + 3) imagesetpixel($Image, $X, $Y, $Gray); 153 164 //imageline($Image, 30, $Y, $Width-1, $Y, IMG_COLOR_STYLED); 154 } 155 156 $TimeShift = $Measure->AlignTime($StartTime, $MinorTimeMarks) - $StartTime; 157 165 } 166 167 $TimeShift = $Measure->AlignTime($StartTime, $MinorTimeMarks) - $StartTime; 168 158 169 // Zobraz měřítko X 159 170 $LastTextEnd = 0; 160 171 for($Time = $StartTime; $Time < $EndTime; $Time += $MajorTimeMarks) 161 172 { 162 $X = round(($Time - $StartTime + $TimeShift) / $TimeRange * $Width) % $Width; 173 $X = round(($Time - $StartTime + $TimeShift) / $TimeRange * $Width) % $Width; 163 174 //imageline($Image, 30, $Y, $Width-1, $Y, IMG_COLOR_STYLED); 164 175 if(($MajorTimeMarks > 60 * 60 * 24)) $Text = date('j.n.Y', $Time + $TimeShift); … … 172 183 } 173 184 else for($Y = 0; $Y < $Height; $Y = $Y + 3) imagesetpixel($Image, $X, $Y, $Gray); 174 } 175 185 } 186 176 187 // Popisky osy Y 177 188 for($I = 1; $I <= $VerticalLinesCount; $I++) … … 183 194 if(($Y - ($BoundBox[5] - $BoundBox[1]) / 2) > 10) 184 195 imagettftext($Image, $FontSize, 0, 2, $Y - ($BoundBox[5] - $BoundBox[1]) / 2, $Black, $FontFile, $Text); 185 } 196 } 186 197 $GenerationTime = floor(($this->System->GetMicrotime() - $StopWatchStart) * 1000 ) / 1000; 187 198 … … 208 219 imagepng($Image); 209 220 imagedestroy($Image); 210 } 221 } 211 222 } 212 223 } -
trunk/Application/View/Main.php
r45 r46 24 24 'caption' => 'Měsíc', 25 25 'period' => 2592000, // 3600 * 24 * 30, 26 ), 26 ), 27 27 'year' => array( 28 28 'caption' => 'Rok', … … 46 46 for($I = 1; $I < 32; $I++) 47 47 { 48 if($I == $TimeParts['mday']) $Selected = ' selected="1"'; else $Selected = ''; 48 if($I == $TimeParts['mday']) $Selected = ' selected="1"'; else $Selected = ''; 49 49 $Output .= '<option value="'.$I.'"'.$Selected.'>'.$I.'</option>'; 50 50 } … … 54 54 $Output .= '<select name="Month">'; 55 55 foreach($this->Months as $Index => $Month) 56 { 56 { 57 57 if($Index == $TimeParts['mon']) $Selected = ' selected="1"'; else $Selected = ''; 58 58 if($Index > 0) $Output .= '<option value="'.$Index.'"'.$Selected.'>'.$Month.'</option>'; … … 63 63 $Output .= '<select name="Year">'; 64 64 for($I = 2000; $I < 2010; $I++) 65 { 65 { 66 66 if($I == $TimeParts['year']) $Selected = ' selected="1"'; else $Selected = ''; 67 67 $Output .= '<option value="'.$I.'"'.$Selected.'>'.$I.'</option>'; … … 72 72 $Output .= '<select name="Hour">'; 73 73 for($I = 0; $I < 24; $I++) 74 { 74 { 75 75 if($I == $TimeParts['hours']) $Selected = ' selected="1"'; else $Selected = ''; 76 76 $Output .= '<option value="'.$I.'"'.$Selected.'>'.$I.'</option>'; … … 80 80 // Minute selection 81 81 $Output .= '<select name="Minute">'; 82 for($I = 0; $I < 60; $I++) 82 for($I = 0; $I < 60; $I++) 83 83 { 84 84 if($I == $TimeParts['minutes']) $Selected = ' selected="1"'; else $Selected = ''; … … 99 99 { 100 100 $Debug = 0; 101 102 101 foreach($this->Config['Application']['DefaultVariables'] as $Index => $Variable) 103 102 { … … 112 111 $_SESSION['TimeEnd'] = time() - 60; 113 112 $_SESSION['TimeStart'] = $_SESSION['TimeEnd'] - $this->GraphTimeRanges[$_SESSION['Period']]['period']; 114 } 113 } 115 114 116 115 $Output = '<div class="Title">Statistiky</div>'; … … 130 129 } 131 130 } 132 break; 131 break; 133 132 case 'SetTimeNow': 134 if(array_key_exists('Time', $_GET)) 133 if(array_key_exists('Time', $_GET)) 135 134 { 136 135 if(($_GET['Time'] == 'TimeStart') or ($_GET['Time'] == 'TimeEnd')) … … 142 141 break; 143 142 } 144 $Output .= '<strong>Časový úsek:</strong><br >';143 $Output .= '<strong>Časový úsek:</strong><br/>'; 145 144 // Show graf time range menu 146 145 if($_SESSION['TimeSpecify'] == 0) … … 150 149 $Output .= '<a href="?Period='.$Index.'">'.$Item['caption'].'</a> '; 151 150 $Output .= '<br/>'; 152 $Output .= '<a href="?TimeSpecify=1">Přesnější nastavení...</a><br >';151 $Output .= '<a href="?TimeSpecify=1">Přesnější nastavení...</a><br/>'; 153 152 } else { 154 153 $Output .= '<table cellspacing="0" cellpadding="2" border="0">'; … … 156 155 $Output .= '<tr><td>Konec:</td><td>'.$this->EditTime('TimeEnd').'</td></tr>'; 157 156 $Output .= '</table>'; 158 $Output .= '<a href="?TimeSpecify=0">Jednoduché nastavení...</a><br >';157 $Output .= '<a href="?TimeSpecify=0">Jednoduché nastavení...</a><br/>'; 159 158 } 160 159 $Output .= '<br/>'.$this->Graph(); … … 162 161 $Output .= '<br/>'.$this->MeasureTable(); 163 162 return($Output); 164 } 165 163 } 164 166 165 function Graph() 167 166 { 168 167 $Output = '<strong>Graf:</strong><br/>'; 169 $Output .= '<img alt="Graf" src="?M=Graph&Measure='.$_SESSION['Measure'].'&From='.$_SESSION['TimeStart'].'&To='.$_SESSION['TimeEnd'].'&Width='.$this->Config['Application']['GraphSize']['Width'].'&Height='.$this->Config['Application']['GraphSize']['Height'].'&Differential='.$_SESSION['Differential'].'" width="'.$this->Config['Application']['GraphSize']['Width'].'" height="'.$this->Config['Application']['GraphSize']['Height'].'"><br>'; 170 $Output .= '<a href="?Measure='.$_SESSION['Measure'].'&TimeStart='.$_SESSION['TimeStart'].'&TimeEnd='.$_SESSION['TimeEnd'].'&TimeSpecify=1&Differential='.$_SESSION['Differential'].'">Odkaz na vybraný graf</a><br>'; 168 $Output .= '<img alt="Graf" src="?M=Graph&Measure='.$_SESSION['Measure']. 169 '&From='.$_SESSION['TimeStart'].'&To='.$_SESSION['TimeEnd'].'&Width='. 170 $this->Config['Application']['ImageWidth'].'&Height='.$this->Config['Application']['ImageHeight']. 171 '&Differential='.$_SESSION['Differential'].'" width="'.$this->Config['Application']['ImageWidth']. 172 '" height="'.$this->Config['Application']['ImageHeight'].'"/><br/>'; 173 $Output .= '<a href="?Measure='.$_SESSION['Measure'].'&TimeStart='.$_SESSION['TimeStart'].'&TimeEnd='.$_SESSION['TimeEnd'].'&TimeSpecify=1&Differential='.$_SESSION['Differential'].'">Odkaz na vybraný graf</a><br/>'; 171 174 //print_r(GetValues($Measure, $TimeStart, $TimeEnd)); 172 175 return($Output); 173 176 } 174 177 175 178 function MeasureTable() 176 179 { … … 202 205 $LastMeasureValue = ' '; 203 206 } 204 if($Measure['Continuity'] == 1) $Interpolate = 'Ano'; 207 if($Measure['Continuity'] == 1) $Interpolate = 'Ano'; 205 208 else $Interpolate = 'Ne'; 206 209 if($Measure['Info'] == '') $Measure['Info'] = ' '; … … 214 217 //print_r(gd_info()); 215 218 //print_r($_SESSION); 216 219 217 220 //ShowPage($Output); 218 221 //echo(AddPrefixMultipliers('-0.000000071112345', 'B')); -
trunk/Application/View/Page.php
r40 r46 11 11 12 12 function ShowHeader($Title, $Path) 13 { 13 { 14 14 $BodyParam = ''; 15 15 if($this->Load != '') $BodyParam .= ' onload="'.$this->Load.'"'; 16 16 if($this->Unload != '') $BodyParam .= ' onunload="'.$this->Unload.'"'; 17 17 $Output = '<?xml version="1.0" encoding="'.$this->Config['Web']['Charset'].'"?>'."\n". 18 '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'.19 '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">'.18 '<!DOCTYPE html>'. 19 '<html>'. 20 20 '<head><link rel="stylesheet" href="Application/Style/Style.css" type="text/css" media="all" />'. 21 '<meta http-equiv="content-type" content=" application/xhtml+xml; charset='.$this->Config['Web']['Charset'].'" />'.21 '<meta http-equiv="content-type" content="text/html; charset='.$this->Config['Web']['Charset'].'" />'. 22 22 '<script type="text/javascript" src="Application/Style/Global.js"></script>'. 23 23 '<title>'.$this->Config['Web']['Title'].' - '.$Path.'</title> … … 25 25 return($Output); 26 26 } 27 27 28 28 function ShowFooter() 29 29 { 30 30 global $ScriptTimeStart; 31 31 32 32 $Time = round($this->System->GetMicrotime() - $ScriptTimeStart, 2); 33 33 $Output = '<div class="Footer"> … … 39 39 if($this->Config['Web']['ShowRuntimeInfo'] == true) $Output .= '<li>Doba generování: '.$Time.' s / '.ini_get('max_execution_time').' s</li><li>Použitá paměť: '.HumanSize(memory_get_peak_usage(FALSE)).' / '.ini_get('memory_limit').'B</li>'; 40 40 $Output .= '</ul></div></body></html>'; 41 return($Output); 41 return($Output); 42 42 } 43 43 44 44 function GetOutput($Content) 45 { 45 { 46 46 global $Config; 47 47 48 48 $Output = $this->ShowHeader($this->FullTitle, $this->ShortTitle).$Content; 49 49 $Output .= $this->ShowFooter(); … … 54 54 55 55 function SystemMessage($Text) 56 { 56 { 57 57 return('<table align="center"><tr><td><div class="SystemMessage"><h3>Systémová zpráva</h3><div>'.$Text.'</div></div</td></tr></table>'); 58 58 //ShowFooter(); 59 59 //die(); 60 60 } 61 61 62 62 function AccessDenied() 63 63 { 64 return($this->GetOutput($this->SystemMessage($this->System->Translate('AccessDenied')))); 64 return($this->GetOutput($this->SystemMessage($this->System->Translate('AccessDenied')))); 65 65 } 66 66 } -
trunk/Base/Config/ConfigSample.php
r42 r46 1 1 <?php 2 2 3 $Config = array( 3 $Config = array 4 ( 4 5 'Database' => array 5 6 ( … … 11 12 'Charset' => 'utf8', 12 13 ), 13 ' Web' => array14 'System' => array 14 15 ( 15 16 'FormatHTML' => false, -
trunk/Base/Database.php
r42 r46 10 10 var $ShowSQLQuery = false; 11 11 var $ShowSQLError = false; 12 12 13 13 function query($Query) 14 { 14 { 15 15 if($this->ShowSQLQuery) 16 16 { 17 if(isset($_SERVER['REMOTE_ADDR'])) echo('<div style="border-bottom-width: 1px; border-bottom-style: solid; padding-bottom: 3px; padding-top: 3px; font-size: 12px; font-family: Arial;">'.$Query.'</div>'); 17 if(isset($_SERVER['REMOTE_ADDR'])) echo('<div style="border-bottom-width: 1px; border-bottom-style: solid; padding-bottom: 3px; padding-top: 3px; font-size: 12px; font-family: Arial;">'.$Query.'</div>'); 18 18 else echo($Query."\n"); 19 19 } … … 25 25 } 26 26 27 return($Result); 27 return($Result); 28 28 } 29 29 30 30 function select($Table, $What = '*', $Condition = 1) 31 31 { 32 return($this->query('SELECT '.$What.' FROM `'.$this->Prefix.$Table.'` WHERE '.$Condition)); 32 return($this->query('SELECT '.$What.' FROM `'.$this->Prefix.$Table.'` WHERE '.$Condition)); 33 33 } 34 34 35 35 function delete($Table, $Condition) 36 36 { 37 $this->query('DELETE FROM `'.$this->Prefix.$Table.'` WHERE '.$Condition); 37 $this->query('DELETE FROM `'.$this->Prefix.$Table.'` WHERE '.$Condition); 38 38 } 39 39 40 40 function insert($Table, $Data) 41 41 { … … 50 50 $Name = substr($Name, 1); 51 51 $Values = substr($Values, 1); 52 $this->query('INSERT INTO `'.$this->Prefix.$Table.'` ('.$Name.') VALUES('.$Values.')'); 52 $this->query('INSERT INTO `'.$this->Prefix.$Table.'` ('.$Name.') VALUES('.$Values.')'); 53 53 } 54 54 55 55 function update($Table, $Condition, $Data) 56 56 { … … 61 61 $Values .= ', `'.$Key.'`='.$Value; 62 62 } 63 $Values = substr($Values, 2); 63 $Values = substr($Values, 2); 64 64 $this->query('UPDATE `'.$this->Prefix.$Table.'` SET '.$Values.' WHERE ('.$Condition.')'); 65 65 } 66 66 67 67 function replace($Table, $Data) 68 68 { … … 79 79 //echo('REPLACE INTO `'.$this->Prefix.$Table.'` ('.$Name.') VALUES ('.$Values.')<br />'); 80 80 $this->query('REPLACE INTO `'.$this->Prefix.$Table.'` ('.$Name.') VALUES('.$Values.')'); 81 //echo($this->error().'<br >');81 //echo($this->error().'<br/>'); 82 82 } 83 83 84 84 function charset($Charset) 85 85 { -
trunk/Readme.txt
r40 r46 8 8 * Zkopírujte ukázkový soubor Application/Config/ConfigSample.php jako Config.php do stejné složky a upravte v něm nastavení. 9 9 * Vytvořete v databázi uživatele statistic a tabulku statistic a doplňte přístupové údaje do Config.php. 10 * Proveďt ěimport ukázkových dat ze souboru Full.sql s nejvyšším číslem revize umístěným ve složce SQL. Samotná struktura tabulky measure je v Measure.sql a ukázková struktura datové tabulky je v Data.sql.10 * Proveďte import ukázkových dat ze souboru Full.sql s nejvyšším číslem revize umístěným ve složce SQL. Samotná struktura tabulky measure je v Measure.sql a ukázková struktura datové tabulky je v Data.sql. 11 11 * Ve složce measure_scripts je ukázkový soubor monitor.sample.php, který zajišťuje získávání informací o různých veličinách v počítači a jejich plnění do systému. Zkopírujte jej jako monitor.php a upravte dle potřeb. 12 12 -
trunk/SQL/Updates/40.sql
r40 r46 1 RENAME TABLE ` Measure2` TO `Measure`1 RENAME TABLE `measure` TO `Measure` 2 2 ALTER TABLE `Measure` ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 3 3 … … 89 89 ALTER TABLE `MeasureGroup` CHANGE `Parent` `Parent` INT( 11 ) NULL ; 90 90 91 ALTER TABLE `Measure` ADD `Group` INT N OT NULL AFTER `Id` ;91 ALTER TABLE `Measure` ADD `Group` INT NULL AFTER `Id` ; 92 92 ALTER TABLE `Measure` ADD INDEX ( `Group` ) ; 93 93 ALTER TABLE `Measure` ADD FOREIGN KEY ( `Group` ) REFERENCES `MeasureGroup` ( `Id` ); 94 94 ALTER TABLE `Measure` DROP `OldName` ; 95 ALTER TABLE `Measure` 95 ALTER TABLE `Measure` DROP `PermissionView`, DROP `PermissionAdd`; 96 96 97 97 ALTER TABLE `Measure` CHANGE `Name` `Name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
Note:
See TracChangeset
for help on using the changeset viewer.