Changeset 95


Ignore:
Timestamp:
Dec 6, 2021, 11:33:48 AM (3 years ago)
Author:
chronos
Message:
  • Modified: Updated Common package.
  • Added: Explicit types for better type checking.
  • Fixed: Support for php 8.0.
Location:
trunk
Files:
14 added
3 deleted
29 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Application/BaseView.php

    r94 r95  
    33class BaseView extends View
    44{
    5   function ShowPage($Content)
     5  function ShowPage(string $Content): string
    66  {
    77    global $ReleaseTime, $Revision;
     
    2222      ' &nbsp; <a href="https://app.zdechov.net/estetistic/">Zdrojový kód</a></div>';
    2323    $Output .= '</body></html>';
    24     echo($Output);
     24    return $Output;
    2525  }
    2626
    27   function GetOutput($Page)
     27  function GetOutput(Page $Page): string
    2828  {
    2929    $Output = $this->ShowPage($Page->Show());
  • trunk/Application/Core.php

    r92 r95  
    66include_once(dirname(__FILE__).'/../Global.php');
    77include_once(dirname(__FILE__).'/Version.php');
    8 include_once(dirname(__FILE__).'/View.php');
     8include_once(dirname(__FILE__).'/BaseView.php');
    99include_once(dirname(__FILE__).'/UpdateTrace.php');
    1010include_once(dirname(__FILE__).'/DefaultConfig.php');
    1111
    12 class Core extends Application
     12class Core extends System
    1313{
    14   var $Pages;
    15   var $ShowPage;
    16   var $BaseURL;
    17   var $UseSession;
     14  public array $Pages;
     15  public bool $ShowPage;
     16  public string $BaseURL;
     17  public bool $UseSession;
    1818
    1919  function __construct()
     
    2828  }
    2929
    30   function RunCommon()
     30  function RunCommon(): void
    3131  {
    3232    global $Config, $DatabaseRevision, $WithoutSessionStart;
     
    3838    //$ErrorHandler->Start();
    3939
    40     try {
     40    try
     41    {
    4142      $this->Database = new Database();
    4243      $this->Database->Connect($Config['Database']['Host'], $Config['Database']['User'],
     
    5556    $this->Config = &$Config;
    5657
    57     // Register and start existing modules
    58     $this->Setup = new Setup($this);
    59     $this->Setup->Start();
    60     if ($this->Setup->CheckState())
     58    $this->StartModules();
     59  }
     60
     61  function StartModules(): void
     62  {
     63    $ModuleSetup = $this->ModuleManager->LoadModule(dirname(__FILE__).'/../Packages/Common/Modules/Setup.php');
     64    $ModuleSetup->Install();
     65    $ModuleSetup->Start();
     66    $this->ModuleManager->LoadModules();
     67    $this->ModuleManager->LoadModule(dirname(__FILE__).'/../Packages/Common/Modules/ModuleManager.php');
     68    if (file_exists($this->ModuleManager->FileName)) $this->ModuleManager->LoadState();
     69    if (ModuleSetup::Cast($ModuleSetup)->CheckState())
    6170    {
    62       $this->ModuleManager->Start();
     71      $this->ModuleManager->StartAll(array(ModuleCondition::Enabled));
    6372    }
    6473  }
    6574
    66   function Run()
     75  function Run(): void
    6776  {
    6877    $this->RunCommon();
     
    7483  }
    7584
    76   function ShowPage()
     85  static function Cast(System $System): Core
     86  {
     87    if ($System instanceof Core)
     88    {
     89      return $System;
     90    }
     91    throw new Exception('Expected Core type but '.gettype($System));
     92  }
     93
     94  function ShowPage(): void
    7795  {
    7896    $this->BaseView = new BaseView($this);
     
    89107  }
    90108
    91   function RegisterPage($Path, $Handler)
    92   {
    93     if (is_array($Path))
    94     {
    95       $Page = &$this->Pages;
    96       $LastKey = array_pop($Path);
    97       foreach ($Path as $PathItem)
    98       {
    99         $Page = &$Page[$PathItem];
    100       }
    101       if (!is_array($Page)) $Page = array('' => $Page);
    102       $Page[$LastKey] = $Handler;
    103     } else $this->Pages[$Path] = $Handler;
    104   }
    105 
    106   function UnregisterPage($Path)
    107   {
    108     unset($this->Pages[$Path]);
    109   }
    110 
    111   function SearchPage($PathItems, $Pages)
     109  function SearchPage(array $PathItems, array $Pages): string
    112110  {
    113111    if (count($PathItems) > 0) $PathItem = $PathItems[0];
     
    123121  }
    124122
    125   function Link($Target)
     123  function Link(string $Target): string
    126124  {
    127125    return $this->BaseURL.$Target;
     
    138136  }
    139137
    140   function Show()
     138  function Show(): string
    141139  {
    142140    Header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
  • trunk/Application/DefaultConfig.php

    r92 r95  
    33class DefaultConfig
    44{
    5   function Get()
     5  function Get(): array
    66  {
    77    $IsDeveloper = in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1'));
  • trunk/Application/UpdateTrace.php

    r92 r95  
    11<?php
    22
    3 function FullInstall($Manager)
     3function FullInstall($Manager): void
    44{
    55   $Manager->Execute('CREATE TABLE IF NOT EXISTS `SystemVersion` (
     
    2929}
    3030
    31 function UpdateTo67($Manager)
     31function UpdateTo67($Manager): void
    3232{
    3333  $Manager->Execute('RENAME TABLE `measure` TO `Measure`;');
     
    5858}
    5959
    60 function UpdateTo79($Manager)
     60function UpdateTo79($Manager): void
    6161{
    6262  $DbResult = $Manager->Execute('SELECT `DataTable`,`DataType` FROM `Measure`;');
     
    7878class Updates
    7979{
    80   function Get()
     80  function Get(): array
    8181  {
    8282    return array(
  • trunk/Application/Version.php

    r94 r95  
    66// and system will need database update.
    77
    8 $Revision = 94;
     8$Revision = 95;
    99$DatabaseRevision = 79;
    10 $ReleaseTime = strtotime('2020-05-25');
     10$ReleaseTime = strtotime('2021-12-06');
  • trunk/Global.php

    r92 r95  
    55include_once('Packages/Common/Common.php');
    66
    7 function HumanDate($Time)
     7function HumanDate(int $Time): string
    88{
    99  return date('j.n.Y', $Time);
    1010}
    1111
    12 function GetMicrotime()
     12function GetMicrotime(): string
    1313{
    1414  list($Usec, $Sec) = explode(" ", microtime());
     
    1616}
    1717
    18 function MakeLink($Target, $Title)
     18function MakeLink(string $Target, string $Title): string
    1919{
    2020  return '<a href="'.$Target.'">'.$Title.'</a>';
    2121}
    2222
    23 function Table($Table)
     23function Table(array $Table): string
    2424{
    2525  $Result = '<table cellspacing="0" class="BasicTable">';
     
    3939}
    4040
    41 function ShowEditTable($ClassName, $Values)
     41function ShowEditTable(string $ClassName, array $Values): string
    4242{
    4343  global $Classes, $Types;
     
    7272}
    7373
    74 function ProcessURL()
     74function ProcessURL(): array
    7575{
    7676  if (array_key_exists('REDIRECT_QUERY_STRING', $_SERVER))
     
    8686}
    8787
    88 function GetQueryStringArray($QueryString)
     88function GetQueryStringArray(string $QueryString): array
    8989{
    9090  $Result = array();
     
    102102}
    103103
    104 function SetQueryStringArray($QueryStringArray)
     104function SetQueryStringArray(array $QueryStringArray): string
    105105{
    106106  $Parts = array();
  • trunk/Graph.php

    r92 r95  
    55class MeasureGraph
    66{
    7   var $Database;
    8   var $FontSize;
    9   var $FontFileNameName;
    10   var $ValueToImageHeigthCoefficient;
    11   var $DefaultWidth;
    12   var $DefaultHeight;
     7  public Database $Database;
     8  public int $FontSize;
     9  public string $FontFileNameName;
     10  public float $ValueToImageHeigthCoefficient;
     11  public int $DefaultWidth;
     12  public int $DefaultHeight;
    1313
    1414  function __construct(Database $Database)
     
    2222  }
    2323
    24   function Render()
     24  function Render(): void
    2525  {
    2626    global $Config;
     
    138138    $TimeRange = $EndTime - $StartTime;
    139139    $TimeMarksIndex = 0;
    140     while ((($TimeRange / $TimeMarks[$TimeMarksIndex]) > 1) and ($TimeMarksIndex < (count($TimeMarks) - 1))) 
     140    while ((($TimeRange / $TimeMarks[$TimeMarksIndex]) > 1) and ($TimeMarksIndex < (count($TimeMarks) - 1)))
    141141      $TimeMarksIndex += 1;
    142142    if ($TimeMarksIndex < 2) $TimeMarksIndex = 2;
  • trunk/Install/deb/debian/control

    r83 r95  
    88Package: estetistic
    99Architecture: all
    10 Depends: ${shlibs:Depends}, ${misc:Depends}, apache2, php, dbconfig-mysql
    11 Description: Simple BrainFuck IDE written in Lazarus/FPC.
    12 HomePage: http://svn.zdechov.net/trac/LazFuck
     10Depends: ${shlibs:Depends}, ${misc:Depends}, apache2, php, php-gd, dbconfig-mysql
     11Description: PHP based graphing tool
     12HomePage: http://svn.zdechov.net/trac/estetistic
  • trunk/Modules/Admin/Admin.php

    r92 r95  
    11<?php
    22
    3 class ModuleAdmin extends AppModule
     3class ModuleAdmin extends Module
    44{
    55  function __construct($System)
     
    1414  }
    1515
    16   function DoStart()
     16  function DoStart(): void
    1717  {
    18     $this->System->RegisterPage('admin', 'PageAdmin');
    19   }
    20 
    21   function DoInstall()
    22   {
    23    }
    24 
    25   function DoUninstall()
    26   {
    27   }
    28 
    29   function DoUpgrade()
    30   {
     18    $this->System->RegisterPage(['admin'], 'PageAdmin');
    3119  }
    3220}
     
    3927  }
    4028
    41   function Show()
     29  function Show(): string
    4230  {
    4331    if (array_key_exists('Operation', $_GET)) $Operation = $_GET['Operation']; else $Operation = '';
     
    6250  }
    6351
    64   function ShowNone()
     52  function ShowNone(): string
    6553  {
    6654    $Table = array(
     
    7866  }
    7967
    80   function ShowEdit()
     68  function ShowEdit(): string
    8169  {
    8270    $DbResult = $this->Database->select('Measure', '*', 'Id='.addslashes($_GET['MeasureId']));
     
    8674  }
    8775
    88   function ShowAdd()
     76  function ShowAdd(): string
    8977  {
    9078    $Values = array();
     
    9280  }
    9381
    94   function ShowRebuildCache()
     82  function ShowDelete(): string
     83  {
     84    return '';
     85  }
     86
     87  function ShowRebuildCache(): string
    9588  {
    9689    echo("Vytvařím novou cache...<br>");
     
    10093    $Measure->RebuildMeasureCache();
    10194    echo('Dokončeno<br>');
     95    return '';
    10296  }
    10397}
  • trunk/Modules/Measure/Measure.php

    r92 r95  
    33include_once(dirname(__FILE__).'/Page.php');
    44
    5 class ModuleMeasure extends AppModule
     5class ModuleMeasure extends Module
    66{
    77  function __construct($System)
     
    1616  }
    1717
    18   function DoStart()
    19   {
    20     $this->System->RegisterPage('', 'PageMain');
    21   }
    22 
    23   function DoInstall()
    24   {
    25    $this->Database->query('CREATE TABLE IF NOT EXISTS `Measure` (
    26   `Id` int(11) NOT NULL auto_increment,
    27   `Name` varchar(255) collate utf8_general_ci NOT NULL,
    28   `Description` varchar(255) collate utf8_general_ci NOT NULL,
    29   `Divider` int(11) NOT NULL default 1,
    30   `Unit` varchar(16) collate utf8_general_ci NOT NULL,
    31   `Continuity` tinyint(1) NOT NULL default 0,
    32   `Period` int(11) NOT NULL default 60,
    33   `PermissionView` varchar(255) collate utf8_general_ci NOT NULL default "all",
    34   `PermissionAdd` varchar(255) collate utf8_general_ci NOT NULL default "localhost.localdomain",
    35   `Info` varchar(255) collate utf8_general_ci NOT NULL,
    36   `Enabled` int(11) NOT NULL default 1,
    37   `Cumulative` int(11) NOT NULL default 0,
    38   `DataTable` varchar(32) collate utf8_general_ci NOT NULL default "data",
    39   `DataType` varchar(32) collate utf8_general_ci NOT NULL,
    40   PRIMARY KEY  (`Id`)
    41 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;');
    42    }
    43 
    44   function DoUninstall()
     18  function DoStart(): void
     19  {
     20    $this->System->RegisterPage(array(''), 'PageMain');
     21  }
     22
     23  function DoInstall(): void
     24  {
     25    $this->Database->query('CREATE TABLE IF NOT EXISTS `Measure` (
     26    `Id` int(11) NOT NULL auto_increment,
     27    `Name` varchar(255) collate utf8_general_ci NOT NULL,
     28    `Description` varchar(255) collate utf8_general_ci NOT NULL,
     29    `Divider` int(11) NOT NULL default 1,
     30    `Unit` varchar(16) collate utf8_general_ci NOT NULL,
     31    `Continuity` tinyint(1) NOT NULL default 0,
     32    `Period` int(11) NOT NULL default 60,
     33    `PermissionView` varchar(255) collate utf8_general_ci NOT NULL default "all",
     34    `PermissionAdd` varchar(255) collate utf8_general_ci NOT NULL default "localhost.localdomain",
     35    `Info` varchar(255) collate utf8_general_ci NOT NULL,
     36    `Enabled` int(11) NOT NULL default 1,
     37    `Cumulative` int(11) NOT NULL default 0,
     38    `DataTable` varchar(32) collate utf8_general_ci NOT NULL default "data",
     39    `DataType` varchar(32) collate utf8_general_ci NOT NULL,
     40    PRIMARY KEY  (`Id`)
     41    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;');
     42  }
     43
     44  function DoUninstall(): void
    4545  {
    4646    $this->Database->query('DROP TABLE IF EXISTS `Measure`');
    47   }
    48 
    49   function DoUpgrade()
    50   {
    51 
    5247  }
    5348}
     
    8176  }
    8277
    83   function TimeSegment($Level)
     78  function TimeSegment(int $Level): int
    8479  {
    8580    return pow($this->LevelReducing, $Level) * 60;
    8681  }
    8782
    88   function GetDataTable()
     83  function GetDataTable(): string
    8984  {
    9085    return 'data_'.$this->Data['Name'];
    9186  }
    9287
    93   function AlignTime($Time, $TimeSegment)
     88  function AlignTime(int $Time, int $TimeSegment): int
    9489  {
    9590    return round(($Time - $this->ReferenceTime) / $TimeSegment) * $TimeSegment +
     
    9792  }
    9893
    99   function Load($Id)
     94  function Load(int $Id): void
    10095  {
    10196    $Result = $this->Database->select('Measure', '*', '`Id`='.$Id);
     
    108103  }
    109104
    110   function AddValue($Value, $Time)
     105  function AddValue(float $Value, int $Time): void
    111106  {
    112107    $Result = $this->Database->select($this->Data['DataTable'], '*', '(`Measure`='.$this->Data['Id'].') AND '.
     
    163158  }
    164159
    165   function UpdateHigherLevels($Time)
     160  function UpdateHigherLevels(int $Time): void
    166161  {
    167162    for ($Level = 1; $Level <= $this->MaxLevel; $Level++)
     
    206201
    207202  /* Compute one value for upper time level from multiple values */
    208   function ComputeOneValue($LeftTime, $RightTime, $Values, $Level)
     203  function ComputeOneValue(int $LeftTime, int $RightTime, array $Values, int $Level): array
    209204  {
    210205    $NewValue = array('Min' => +1000000000000000000, 'Avg' => 0, 'Max' => -1000000000000000000);
     
    294289  }
    295290
    296   function GetTimeRange($Level)
     291  function GetTimeRange(int $Level): array
    297292  {
    298293    // Get first and last time
     
    317312
    318313  // Load one nearest value newer then given time
    319   function LoadRightSideValue($Level, $Time)
     314  function LoadRightSideValue(int $Level, int $Time): array
    320315  {
    321316    $Result = array();
     
    350345
    351346  // Load one nearest value older then given time
    352   function LoadLeftSideValue($Level, $Time)
     347  function LoadLeftSideValue(int $Level, int $Time): array
    353348  {
    354349    $Result = array();
     
    382377  }
    383378
    384   function GetValues($TimeFrom, $TimeTo, $Level)
     379  function GetValues(int $TimeFrom, int $TimeTo, int $Level): array
    385380  {
    386381  //$AbsoluteTime = GetTimeRange($this->DataId);
     
    430425  }
    431426
    432   function RebuildMeasureCache()
     427  function RebuildMeasureCache(): void
    433428  {
    434429    echo('Velicina '.$this->Data['Name']."<br>\n");
     
    508503  }
    509504
    510   function RebuildAllMeasuresCache()
     505  function RebuildAllMeasuresCache(): void
    511506  {
    512507    $Result = $this->Database->select('Measure', 'Id');
    513508    while ($Row = $Result->fetch_array())
    514509    {
    515       $Measure = new Measure();
     510      $Measure = new Measure($this->Database);
    516511      $Measure->Load($Row['Id']);
    517512      $Measure->RebuildMeasureCache();
     
    520515  }
    521516
    522   function ClearData()
     517  function ClearData(): void
    523518  {
    524519    $this->Database->delete($this->Data['DataTable'], '1');
  • trunk/Modules/Measure/Page.php

    r92 r95  
    4444    $this->Time = time();
    4545  }
    46  
    47   function GetTimeRange()
     46
     47  function GetTimeRange(): string
    4848  {
    4949    if (!array_key_exists($_SESSION['Period'], $this->GraphTimeRanges))
    5050      $_SESSION['Period'] = 'day';
    51    
     51
    5252    $Result = $this->GraphTimeRanges[$_SESSION['Period']]['period'];
    5353    if ($Result == -1)
     
    6161  }
    6262
    63   function EditTime($Time)
     63  function EditTime($Time): string
    6464  {
    6565    $Output = '<form style="display: inline;" action="?Operation=SetTime&amp;Time='.$Time.'" method="post">';
     
    119119    return $Output;
    120120  }
    121  
    122   function GetFirstMeasure($Measure)
     121
     122  function GetFirstMeasure($Measure): array
    123123  {
    124124    $Result2 = $this->Database->select($Measure['DataTable'], '`Time`, `Avg`', '(`Measure`='.$Measure['Id'].') AND (`Level`=0) ORDER BY `Time` ASC LIMIT 1');
     
    135135  }
    136136
    137   function GetLastMeasure($Measure)
     137  function GetLastMeasure($Measure): array
    138138  {
    139139    $Result2 = $this->Database->select($Measure['DataTable'], '`Time`, `Avg`', '(`Measure`='.$Measure['Id'].') AND (`Level`=0) ORDER BY `Time` DESC LIMIT 1');
     
    149149    return array('Time' => $LastMeasureTime, 'Value' => $LastMeasureValue);
    150150  }
    151  
    152   function LoadMeasure($Id)
     151
     152  function LoadMeasure($Id): array
    153153  {
    154154    $DbResult = $this->Database->select('Measure', '*', '( `Enabled`=1) AND (`Id`='.$Id.') AND ((`PermissionView`="all") OR (`PermissionView`="'.
    155       gethostbyaddr($_SERVER['REMOTE_ADDR']).'"))');   
     155      gethostbyaddr($_SERVER['REMOTE_ADDR']).'"))');
    156156    $DbRow = $DbResult->fetch_array();
    157157    return $DbRow;
    158158  }
    159  
     159
    160160  /* Produce table with available measures */
    161   function ShowMeasureTable()
     161  function ShowMeasureTable(): string
    162162  {
    163163    $PrefixMultiplier = new PrefixMultiplier();
     
    195195        $LastMeasureValue.'</td><td align="center">'.$LastMeasureTime.'</td><td align="center">'.
    196196        $Interpolate.'</td><td>'.$Measure['Info'].'</td>';
    197       if (array_key_exists('Debug', $_GET)) 
     197      if (array_key_exists('Debug', $_GET))
    198198        $Output .= '<td>'.$RowCount.'</td><td>'.$GenerationTime.'</td>';
    199199      $Output .= '</tr>';
     
    203203  }
    204204
    205   function ShowGraph()
     205  function ShowGraph(): string
    206206  {
    207207    $Output = '<strong>Graf:</strong><br>';
     
    217217  }
    218218
    219   function ShowTimeRange()
     219  function ShowTimeRange(): string
    220220  {
    221221    $Output = '';
     
    269269
    270270  }
    271  
    272   function HandleURL()
    273   {
    274     global $Config;
    275    
    276     foreach ($Config['DefaultVariables'] as $Index => $Variable)
     271
     272  function HandleURL(): void
     273  {
     274    foreach ($this->System->Config['DefaultVariables'] as $Index => $Variable)
    277275    {
    278276      if (!array_key_exists($Index, $_SESSION)) $_SESSION[$Index] = $Variable;
     
    285283      $_SESSION['Period'] = $_GET['Period'];
    286284      // Update time start according time period
    287       if ($_SESSION['Period'] == 'all') 
     285      if ($_SESSION['Period'] == 'all')
    288286      {
    289287        $Measure = $this->LoadMeasure($_SESSION['Measure']);
     
    322320      $_SESSION['TimeSpecify'] = $_GET['TimeSpecify'];
    323321    }
    324    
     322
    325323    if (array_key_exists('Move', $_GET))
    326324    {
    327325      $Move = $_GET['Move'];
    328       if ($Move == 'Left') 
     326      if ($Move == 'Left')
    329327      {
    330328        $_SESSION['TimeStart'] = $_SESSION['TimeStart'] - $this->GetTimeRange();
    331329        $_SESSION['TimeEnd'] = $_SESSION['TimeEnd'] - $this->GetTimeRange();
    332330      } else
    333       if ($Move == 'Right') 
     331      if ($Move == 'Right')
    334332      {
    335333        $_SESSION['TimeStart'] = $_SESSION['TimeStart'] + $this->GetTimeRange();
    336334        $_SESSION['TimeEnd'] = $_SESSION['TimeEnd'] + $this->GetTimeRange();
    337       } else 
     335      } else
    338336      if ($Move == 'Now')
    339337      {
     
    358356  }
    359357
    360   function Show()
     358  function Show(): string
    361359  {
    362360    global $Config;
     
    364362    $Debug = 0;
    365363    $this->HandleURL();
    366    
     364
    367365    $Output = '<div style="text-align: center"><div class="Title">'.$Config['Web']['Title'].'</div>';
    368366
  • trunk/Packages/Common/Base.php

    r94 r95  
    11<?php
    2 
    3 class System
    4 {
    5   /* @var Database */
    6   var $Database;
    7 
    8   function __construct()
    9   {
    10     $this->Database = new Database();
    11   }
    12 }
    132
    143class Base
    154{
    16   /** @var Application */
    17   var $System;
    18   /* @var Database */
    19   var $Database;
     5  public System $System;
     6  public Database $Database;
    207
    21   function __construct(Application $System)
     8  function __construct(System $System)
    229  {
    23     $this->System = $System;
    24     $this->Database = $System->Database;
     10    $this->System = &$System;
     11    $this->Database = &$System->Database;
     12  }
     13
     14  static function GetClassName()
     15  {
     16    return get_called_class();
    2517  }
    2618}
    27 
    28 class Model extends Base
    29 {
    30 
    31 }
    32 
    33 class View extends Base
    34 {
    35 
    36 }
    37 
    38 class Controller extends Base
    39 {
    40 
    41 }
  • trunk/Packages/Common/Common.php

    r94 r95  
    1111include_once(dirname(__FILE__).'/Error.php');
    1212include_once(dirname(__FILE__).'/Base.php');
    13 include_once(dirname(__FILE__).'/Application.php');
    14 include_once(dirname(__FILE__).'/AppModule.php');
     13include_once(dirname(__FILE__).'/View.php');
     14include_once(dirname(__FILE__).'/Model.php');
     15include_once(dirname(__FILE__).'/ModelDesc.php');
     16include_once(dirname(__FILE__).'/Controller.php');
     17include_once(dirname(__FILE__).'/System.php');
     18include_once(dirname(__FILE__).'/Module.php');
     19include_once(dirname(__FILE__).'/ModuleManager.php');
    1520include_once(dirname(__FILE__).'/Config.php');
    1621include_once(dirname(__FILE__).'/Page.php');
    1722include_once(dirname(__FILE__).'/Locale.php');
    1823include_once(dirname(__FILE__).'/Update.php');
    19 include_once(dirname(__FILE__).'/Setup.php');
    2024include_once(dirname(__FILE__).'/Table.php');
    2125include_once(dirname(__FILE__).'/Process.php');
     26include_once(dirname(__FILE__).'/Generics.php');
     27include_once(dirname(__FILE__).'/BigInt.php');
     28include_once(dirname(__FILE__).'/Int128.php');
     29include_once(dirname(__FILE__).'/Pdf.php');
     30include_once(dirname(__FILE__).'/Modules/Setup.php');
     31include_once(dirname(__FILE__).'/Modules/ModuleManager.php');
    2232
    2333class PackageCommon
    2434{
    25   var $Name;
    26   var $Version;
    27   var $ReleaseDate;
    28   var $License;
    29   var $Creator;
    30   var $Homepage;
     35  public string $Name;
     36  public string $Version;
     37  public int $ReleaseDate;
     38  public string $License;
     39  public string $Creator;
     40  public string $Homepage;
    3141
    3242  function __construct()
    3343  {
    3444    $this->Name = 'Common';
    35     $this->Version = '1.3';
    36     $this->ReleaseDate = strtotime('2019-10-04');
     45    $this->Version = '1.2';
     46    $this->ReleaseDate = strtotime('2020-03-29');
    3747    $this->Creator = 'Chronos';
    38     $this->License = 'GNU/GPL';
     48    $this->License = 'GNU/GPLv3';
    3949    $this->Homepage = 'https://svn.zdechov.net/PHPlib/Common/';
    4050  }
    4151}
    4252
    43 class Paging extends Base
     53class Paging
    4454{
    45   var $TotalCount;
    46   var $ItemPerPage;
    47   var $Around;
    48   var $SQLLimit;
    49   var $Page;
     55  public int $TotalCount;
     56  public int $ItemPerPage;
     57  public int $Around;
     58  public string $SQLLimit;
     59  public int $Page;
    5060
    51   function __construct(Application &$System)
     61  function __construct()
    5262  {
    53     parent::__construct($System);
     63    global $System;
    5464
    5565    $this->ItemPerPage = $System->Config['Web']['ItemsPerPage'];
     
    5767  }
    5868
    59   function Show()
     69  function Show(): string
    6070  {
    6171    $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
  • trunk/Packages/Common/Config.php

    r92 r95  
    33class Config
    44{
    5   var $Data;
     5  public array $Data;
    66
    77  function __construct()
     
    1010  }
    1111
    12   function ReadValue($Name)
     12  function ReadValue(string $Name)
    1313  {
    1414    if (!is_array($Name)) $Name = explode('/', $Name);
     
    2222  }
    2323
    24   function WriteValue($Name, $Value)
     24  function WriteValue(string $Name, $Value)
    2525  {
    2626    if (!is_array($Name)) $Name = explode('/', $Name);
     
    3434  }
    3535
    36   function LoadFromFile($FileName)
     36  function LoadFromFile(string $FileName): void
    3737  {
    3838    $ConfigData = array();
     
    4040    foreach ($this->Data as $Index => $Item)
    4141    {
    42       if (array_key_exits($Index, $ConfigData))
     42      if (array_key_exists($Index, $ConfigData))
    4343        $this->Data[$Index] = $ConfigData[$Index];
    4444    }
    4545  }
    4646
    47   function SaveToFile($FileName)
     47  function SaveToFile(string $FileName): void
    4848  {
    4949    file_put_contents($FileName, "<?php \n\n\$ConfigData = ".var_export($this->Data, true).";\n");
    5050  }
    5151
    52   function GetAsArray()
     52  function GetAsArray(): array
    5353  {
    5454    return $this->Data;
  • trunk/Packages/Common/Database.php

    r92 r95  
    22
    33// Extended database class
    4 // Date: 2016-01-11
     4// Date: 2020-11-10
    55
    66function microtime_float()
     
    1212class DatabaseResult
    1313{
    14   var $PDOStatement;
    15   var $num_rows = 0;
     14  public PDOStatement $PDOStatement;
     15  public int $num_rows = 0;
    1616
    1717  function fetch_assoc()
     
    3333class Database
    3434{
    35   var $Prefix;
    36   var $Functions;
    37   var $Type;
    38   var $PDO;
    39   var $Error;
    40   var $insert_id;
    41   var $LastQuery;
    42   var $ShowSQLError;
    43   var $ShowSQLQuery;
    44   var $LogSQLQuery;
    45   var $LogFile;
     35  public string $Prefix;
     36  public array $Functions;
     37  public string $Type;
     38  public PDO $PDO;
     39  public string $Error;
     40  public string $insert_id;
     41  public string $LastQuery;
     42  public bool $ShowSQLError;
     43  public bool $ShowSQLQuery;
     44  public bool $LogSQLQuery;
     45  public string $LogFile;
     46  public string $Database;
    4647
    4748  function __construct()
    4849  {
    4950    $this->Prefix = '';
    50     $this->Functions = array('NOW()', 'CURDATE()', 'CURTIME()', 'UUID()');
     51    $this->Functions = array('NOW(', 'CURDATE(', 'CURTIME(', 'UUID(', 'SHA1(');
    5152    $this->Type = 'mysql';  // mysql, pgsql
    5253    $this->Error = '';
     
    5657    $this->LogSQLQuery = false;
    5758    $this->LogFile = dirname(__FILE__).'/../../Query.log';
    58   }
    59  
    60 
    61   function Connect($Host, $User, $Password, $Database)
     59    $this->Database = '';
     60  }
     61
     62  function Connect(string $Host, string $User, string $Password, string $Database): void
    6263  {
    6364    if ($this->Type == 'mysql') $ConnectionString = 'mysql:host='.$Host.';dbname='.$Database;
    6465      else if ($this->Type == 'pgsql') $ConnectionString = 'pgsql:dbname='.$Database.';host='.$Host;
    6566      else $ConnectionString = '';
     67    $this->Database = $Database;
    6668    try {
    6769      $this->PDO = new PDO($ConnectionString, $User, $Password);
    68 
    6970    } catch (Exception $E)
    7071    {
     
    7475  }
    7576
    76   function Disconnect()
     77  function Disconnect(): void
    7778  {
    7879    unset($this->PDO);
    7980  }
    8081
    81   function Connected()
     82  function Connected(): bool
    8283  {
    8384    return isset($this->PDO);
    8485  }
    8586
    86   function select_db($Database)
     87  function select_db(string $Database)
    8788  {
    8889    $this->query('USE `'.$Database.'`');
    8990  }
    9091
    91   function query($Query)
     92  function query($Query): DatabaseResult
    9293  {
    9394    if (!$this->Connected()) throw new Exception(T('Not connected to database'));
     
    9697    //echo('a'.$this->ShowSQLQuery.'<'.$QueryStartTime.', '.microtime_float());
    9798    if (($this->ShowSQLQuery == true) or ($this->LogSQLQuery == true))
    98       $Duration = ' ; '.round(microtime_float() - $QueryStartTime, 4). ' s';
    99     if ($this->LogSQLQuery == true)
     99    {
     100      $Time = round(microtime_float() - $QueryStartTime, 4);
     101      $Duration = ' ; '.$Time. ' s';
     102    }
     103    if (($this->LogSQLQuery == true) and ($Time != 0))
    100104      file_put_contents($this->LogFile, $Query.$Duration."\n", FILE_APPEND);
    101105    if ($this->ShowSQLQuery == true)
     
    103107      'padding-bottom: 3px; padding-top: 3px; font-size: 12px; font-family: Arial;">'.$Query.$Duration.'</div>'."\n");
    104108    $Result = new DatabaseResult();
    105     $Result->PDOStatement = $this->PDO->query($Query);
    106     if ($Result->PDOStatement)
    107     {
    108       $Result->num_rows = $Result->PDOStatement->rowCount();
     109    $Statement = $this->PDO->query($Query);
     110    if ($Statement)
     111    {
     112      $Result->PDOStatement = $Statement;
     113      $Result->num_rows = $Statement->rowCount();
    109114      $this->insert_id = $this->PDO->lastInsertId();
    110115    } else
    111     {     
    112       $this->Error = $this->PDO->errorInfo();
    113       $this->Error = $this->Error[2];
     116    {
     117      $Error = $this->PDO->errorInfo();
     118      $this->Error = $Error[2];
    114119      if (($this->Error != '') and ($this->ShowSQLError == true))
    115120        echo('<div><strong>SQL Error: </strong>'.$this->Error.'<br />'.$Query.'</div>');
     
    119124  }
    120125
    121   function select($Table, $What = '*', $Condition = 1)
     126  function select(string $Table, string $What = '*', string $Condition = '1'): DatabaseResult
    122127  {
    123128    return $this->query('SELECT '.$What.' FROM `'.$this->Prefix.$Table.'` WHERE '.$Condition);
    124129  }
    125130
    126   function delete($Table, $Condition)
     131  function delete(string $Table, string $Condition): void
    127132  {
    128133    $this->query('DELETE FROM `'.$this->Prefix.$Table.'` WHERE '.$Condition);
    129134  }
    130135
    131   function insert($Table, $Data)
     136  function insert(string $Table, array $Data): int
    132137  {
    133138    $this->query($this->GetInsert($Table, $Data));
    134139    $this->insert_id = $this->PDO->lastInsertId();
    135   }
    136  
    137   function GetInsert($Table, $Data)
     140    return $this->insert_id;
     141  }
     142
     143  function IsFunction(string $Text): bool
     144  {
     145    $Pos = strpos($Text, '(');
     146    return ($Pos !== false) && in_array(substr($Text, 0, $Pos + 1), $this->Functions);
     147  }
     148
     149  function GetInsert(string $Table, array $Data): string
    138150  {
    139151    $Name = '';
     
    142154    {
    143155      $Name .= ',`'.$Key.'`';
    144       if (!in_array($Value, $this->Functions))
     156      if (is_null($Value)) $Value = 'NULL';
     157      else if (!$this->IsFunction($Value))
    145158      {
    146         if (is_null($Value)) $Value = 'NULL';
    147         else $Value = $this->PDO->quote($Value);
     159        $Value = $this->PDO->quote($Value);
    148160      }
    149161      $Values .= ','.$Value;
     
    154166  }
    155167
    156   function update($Table, $Condition, $Data)
     168  function update(string $Table, string $Condition, array $Data): void
    157169  {
    158170    $this->query($this->GetUpdate($Table, $Condition, $Data));
    159171  }
    160  
    161   function GetUpdate($Table, $Condition, $Data)
     172
     173  function GetUpdate(string $Table, string $Condition, array $Data): string
    162174  {
    163175    $Values = '';
    164176    foreach ($Data as $Key => $Value)
    165177    {
    166       if (!in_array($Value, $this->Functions))
     178      if (is_null($Value)) $Value = 'NULL';
     179      else if (!$this->IsFunction($Value))
    167180      {
    168         if (is_null($Value)) $Value = 'NULL';
    169         else $Value = $this->PDO->quote($Value);
     181        $Value = $this->PDO->quote($Value);
    170182      }
    171183      $Values .= ', `'.$Key.'`='.$Value;
     
    175187  }
    176188
    177   function replace($Table, $Data)
     189  function replace(string $Table, array $Data): void
    178190  {
    179191    $Name = '';
     
    181193    foreach ($Data as $Key => $Value)
    182194    {
    183       if (!in_array($Value, $this->Functions))
     195      if (is_null($Value)) $Value = 'NULL';
     196      else if (!$this->IsFunction($Value))
    184197      {
    185         if (is_null($Value)) $Value = 'NULL';
    186         else $Value = $this->PDO->quote($Value);
     198        $Value = $this->PDO->quote($Value);
    187199      }
    188200      $Name .= ',`'.$Key.'`';
     
    196208  }
    197209
    198   function charset($Charset)
     210  function charset(string $Charset): void
    199211  {
    200212    $this->query('SET NAMES "'.$Charset.'"');
    201213  }
    202214
    203   function real_escape_string($Text)
     215  function real_escape_string(string $Text): string
    204216  {
    205217    return addslashes($Text);
    206218  }
    207219
    208   function quote($Text)
     220  function quote(string $Text): string
    209221  {
    210222    return $this->PDO->quote($Text);
    211223  }
    212224
    213   public function __sleep()
     225  public function __sleep(): array
    214226  {
    215227    return array('LastQuery');
    216228  }
    217229
    218   public function __wakeup()
    219   {
    220   }
    221  
    222   public function Transaction($Queries)
    223   {
    224       $this->PDO->beginTransaction();
    225       foreach ($Queries as $Query)
    226       {
    227         $Statement = $this->PDO->prepare($Query);
    228         $Statement->execute();
    229       }         
    230       $this->PDO->commit();
     230  public function __wakeup(): void
     231  {
     232  }
     233
     234  public function Transaction(array $Queries): void
     235  {
     236    //echo('|'."\n");
     237    $this->PDO->beginTransaction();
     238    foreach ($Queries as $Query)
     239    {
     240      //echo('|'.$Query."\n");
     241      $Statement = $this->PDO->prepare($Query);
     242      $Statement->execute();
     243    }
     244    $this->PDO->commit();
     245  }
     246
     247  public function TableExists(string $Name): bool
     248  {
     249    $DbResult = $this->query('SELECT * FROM information_schema.tables  WHERE table_schema = "'.$this->Database.
     250    '" AND table_name = "'.$Name.'" LIMIT 1');
     251    return $DbResult->num_rows != 0;
    231252  }
    232253}
  • trunk/Packages/Common/Error.php

    r92 r95  
    33class ErrorHandler
    44{
    5   var $Encoding;
    6   var $ShowError;
    7   var $UserErrors;
    8   var $OnError;
     5  public string $Encoding;
     6  public bool $ShowError;
     7  public int $UserErrors;
     8  public $OnError;
    99
    1010  function __construct()
     
    6363  }
    6464
    65   function ExceptionHandler(Exception $Exception)
     65  function ExceptionHandler(Throwable $Exception)
    6666  {
    6767    $Backtrace = $Exception->getTrace();
     
    7575  }
    7676
    77   function ShowDefaultError($Message)
     77  function ShowDefaultError(string $Message): void
    7878  {
    7979    $Output = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>'."\n".
     
    8585      $Output .= '<pre>'.$Message.'</pre><br/>';
    8686    $Output .= '</body></html>';
    87     error_log($Message);
    8887    echo($Output);
    8988  }
  • trunk/Packages/Common/Image.php

    r92 r95  
    99class Font
    1010{
    11   var $Size;
    12   var $FileName;
    13   var $Color;
     11  public int $Size;
     12  public string $FileName;
     13  public int $Color;
    1414
    1515  function __construct()
     
    2323class Pen
    2424{
    25   var $Color;
    26   var $X;
    27   var $Y;
     25  public int $Color;
     26  public int $X;
     27  public int $Y;
    2828
    2929  function __construct()
     
    3333    $this->Y = 0;
    3434  }
    35 
    3635}
    3736
    3837class Brush
    3938{
    40   var $Color;
     39  public int $Color;
    4140
    4241  function __construct()
     
    4443    $this->Color = COLOR_BLACK;
    4544  }
    46 
    4745}
    4846
    4947class Image
    5048{
    51   var $Image;
    52   var $Type;
    53   var $Font;
    54   var $Pen;
     49  public $Image;
     50  public int $Type;
     51  public Font $Font;
     52  public Pen $Pen;
     53  public Brush $Brush;
    5554
    5655  function __construct()
     
    6362  }
    6463
    65   function SaveToFile($FileName)
     64  function SaveToFile(string $FileName): void
    6665  {
    6766    if ($this->Type == IMAGETYPE_JPEG)
     
    7170    if ($this->Type == IMAGETYPE_GIF)
    7271    {
    73       imagegif ($this->Image, $FileName);
     72      imagegif($this->Image, $FileName);
    7473    } else
    7574    if ($this->Type == IMAGETYPE_PNG)
     
    7978  }
    8079
    81   function LoadFromFile($FileName)
     80  function LoadFromFile(string $FileName): void
    8281  {
    8382    $ImageInfo = getimagesize($FileName);
     
    8988    if ($this->Type == IMAGETYPE_GIF)
    9089    {
    91       $this->Image = imagecreatefromgif($FileName);
     90      $this->Image = imagecreatefromgif ($FileName);
    9291    } else
    9392    if ( $this->Type == IMAGETYPE_PNG)
     
    9796  }
    9897
    99   function Output()
     98  function Output(): void
    10099  {
    101     $this->SaveToFile(NULL);
     100    $this->SaveToFile('');
    102101  }
    103102
    104   function SetSize($Width, $Height)
     103  function SetSize(int $Width, int $Height): void
    105104  {
    106105    $NewImage = imagecreatetruecolor($Width, $Height);
     
    110109  }
    111110
    112   function GetWidth()
     111  function GetWidth(): int
    113112  {
    114113    return imagesx($this->Image);
    115114  }
    116115
    117   function GetHeight()
     116  function GetHeight(): int
    118117  {
    119118    return imagesy($this->Image);
    120119  }
    121120
    122   function TextOut($X, $Y, $Text)
     121  function TextOut(int $X, int $Y, string $Text): void
    123122  {
    124123    imagettftext($this->Image, $this->Font->Size, 0, $X, $Y, $this->ConvertColor($this->Font->Color), $this->Font->FileName, $Text);
    125124  }
    126125
    127   function ConvertColor($Color)
     126  function ConvertColor(int $Color): int
    128127  {
    129128    return imagecolorallocate($this->Image, ($Color >> 16) & 0xff, ($Color >> 8) & 0xff, $Color & 0xff);
    130129  }
    131130
    132   function FillRect($X1, $Y1, $X2, $Y2)
     131  function FillRect(int $X1, int $Y1, int $X2, int $Y2): void
    133132  {
    134133    imagefilledrectangle($this->Image, $X1, $Y1, $X2, $Y2, $this->ConvertColor($this->Brush->Color));
    135134  }
    136135
    137   function Line($X1, $Y1, $X2, $Y2)
     136  function Line(int $X1, int $Y1, int $X2, int $Y2): void
    138137  {
    139138    imageline($this->Image, $X1, $Y1, $X2, $Y2, $this->ConvertColor($this->Pen->Color));
  • trunk/Packages/Common/Locale.php

    r92 r95  
    33class LocaleText
    44{
    5   var $Data;
    6   var $Code;
    7   var $Title;
     5  public array $Data;
     6  public string $Code;
     7  public string $Title;
    88
    99  function __construct()
     
    1414  }
    1515
    16   function Load()
    17   {
    18   }
    19 
    20   function Translate($Text, $Group = '')
     16  function Load(): void
     17  {
     18  }
     19
     20  function Translate(string $Text, string $Group = ''): string
    2121  {
    2222    if (array_key_exists($Text, $this->Data[$Group]) and ($this->Data[$Group][$Text] != ''))
     
    2525  }
    2626
    27   function TranslateReverse($Text, $Group = '')
     27  function TranslateReverse(string $Text, string $Group = ''): string
    2828  {
    2929    $Key = array_search($Text, $this->Data[$Group]);
     
    3535class LocaleFile extends Model
    3636{
    37   var $Texts;
    38   var $Dir;
     37  public LocaleText $Texts;
     38  public string $Dir;
    3939
    4040  function __construct(System $System)
     
    4444  }
    4545
    46   function Load($Language)
     46  function Load(string $Language): void
    4747  {
    4848    $FileName = $this->Dir.'/'.$Language.'.php';
     
    5555  }
    5656
    57   function AnalyzeCode($Path)
     57  function AnalyzeCode(string $Path): void
    5858  {
    5959    // Search for php files
     
    9898  }
    9999
    100   function SaveToFile($FileName)
     100  function SaveToFile(string $FileName): void
    101101  {
    102102    $Content = '<?php'."\n".
     
    119119  }
    120120
    121   function LoadFromDatabase($Database, $LangCode)
     121  function LoadFromDatabase(Database $Database, string $LangCode): void
    122122  {
    123123    $DbResult = $Database->select('Language', '*', 'Code='.$Database->quote($LangCode));
     
    132132  }
    133133
    134   function SaveToDatabase(Database $Database, $LangCode)
    135   {
    136     $DbResult = $Database->select('Language', '*', 'Code='.$Database->quote($LangCode));
     134  function SaveToDatabase(string $LangCode): void
     135  {
     136    $DbResult = $this->Database->select('Language', '*', 'Code='.$this->Database->quote($LangCode));
    137137    if ($DbResult->num_rows > 0)
    138138    {
    139139      $Language = $DbResult->fetch_assoc();
    140       $Database->delete('Locale', '`Language`='.$Language['Id']);
     140      $this->Database->delete('Locale', '`Language`='.$Language['Id']);
    141141      foreach ($this->Texts->Data as $Index => $Item)
    142         $Database->query('INSERT INTO `Locale` (`Language`,`Original`,`Translated`) '.
    143         'VALUES('.$Language['Id'].','.$Database->quote($Index).','.$Database->quote($Item).')');
    144     }
    145   }
    146 
    147   function UpdateToDatabase(Database $Database, $LangCode)
    148   {
    149     $DbResult = $Database->select('Language', '*', '`Code`='.$Database->quote($LangCode));
     142        $this->Database->query('INSERT INTO `Locale` (`Language`,`Original`,`Translated`) '.
     143        'VALUES('.$Language['Id'].','.$this->Database->quote($Index).','.$this->Database->quote($Item).')');
     144    }
     145  }
     146
     147  function UpdateToDatabase(string $LangCode): void
     148  {
     149    $DbResult = $this->Database->select('Language', '*', '`Code`='.$this->Database->quote($LangCode));
    150150    if ($DbResult->num_rows > 0)
    151151    {
     
    153153      foreach ($this->Texts->Data as $Index => $Item)
    154154      {
    155         $DbResult = $Database->select('Locale', '*', '(`Original` ='.$Database->quote($Index).
     155        $DbResult = $this->Database->select('Locale', '*', '(`Original` ='.$this->Database->quote($Index).
    156156          ') AND (`Language`='.($Language['Id']).')');
    157157        if ($DbResult->num_rows > 0)
    158         $Database->update('Locale', '(`Language`='.($Language['Id']).') AND '.
    159           '(`Original` ='.$Database->quote($Index).')', array('Translated' => $Item));
    160         else $Database->insert('Locale', array('Language' => $Language['Id'],
     158        $this->Database->update('Locale', '(`Language`='.($Language['Id']).') AND '.
     159          '(`Original` ='.$this->Database->quote($Index).')', array('Translated' => $Item));
     160        else $this->Database->insert('Locale', array('Language' => $Language['Id'],
    161161         'Original' => $Index, 'Translated' => $Item));
    162162      }
     
    167167class LocaleManager extends Model
    168168{
    169   var $CurrentLocale;
    170   var $Codes;
    171   var $Dir;
    172   var $LangCode;
    173   var $DefaultLangCode;
    174   var $Available;
     169  public LocaleFile $CurrentLocale;
     170  public array $Codes;
     171  public string $Dir;
     172  public string $LangCode;
     173  public string $DefaultLangCode;
     174  public array $Available;
    175175
    176176  function __construct(System $System)
     
    182182    $this->DefaultLangCode = 'en';
    183183    $this->Available = array();
    184   }
    185 
    186   function LoadAvailable()
     184    $this->Dir = '';
     185  }
     186
     187  function LoadAvailable(): void
    187188  {
    188189    $this->Available = array();
     
    201202  }
    202203
    203   function UpdateAll($Directory)
     204  function UpdateAll(string $Directory): void
    204205  {
    205206    $Locale = new LocaleFile($this->System);
     
    222223          if (!array_key_exists($Index, $Locale->Texts->Data))
    223224            unset($FileLocale->Texts->Data[$Index]);
    224         $FileLocale->UpdateToDatabase($this->System->Database, $FileLocale->Texts->Code);
     225        $FileLocale->UpdateToDatabase($FileLocale->Texts->Code);
    225226        $FileName = $this->Dir.'/'.$FileLocale->Texts->Code.'.php';
    226227        $FileLocale->SaveToFile($FileName);
     
    230231  }
    231232
    232   function LoadLocale($Code)
     233  function LoadLocale(string $Code): void
    233234  {
    234235    if (array_key_exists($Code, $this->Available))
     
    241242
    242243// Short named global translation function
    243 function T($Text, $Group = '')
     244function T(string $Text, string $Group = ''): string
    244245{
    245246  global $GlobalLocaleManager;
  • trunk/Packages/Common/Mail.php

    r92 r95  
    99class Mail
    1010{
    11   var $Priorities;
    12   var $Subject;
    13   var $From;
    14   var $Recipients;
    15   var $Bodies;
    16   var $Attachments;
    17   var $AgentIdent;
    18   var $Organization;
    19   var $ReplyTo;
    20   var $Headers;
     11  public string $Subject;
     12  public string $From;
     13  public array $Recipients;
     14  public array $Bodies;
     15  public array $Attachments;
     16  public string $AgentIdent;
     17  public string $Organization;
     18  public string $ReplyTo;
     19  public array $Headers;
     20  private array $Priorities;
     21  private string $Boundary;
    2122
    2223  function __construct()
     
    2829  }
    2930
    30   function Clear()
     31  function Clear(): void
    3132  {
    3233    $this->Bodies = array();
     
    4142  }
    4243
    43   function AddToCombined($Address)
     44  function AddToCombined(string $Address): void
    4445  {
    4546    $this->Recipients[] = array('Address' => $Address, 'Type' => 'SendCombined');
    4647  }
    4748
    48   function AddTo($Address, $Name)
     49  function AddTo(string $Address, string $Name): void
    4950  {
    5051    $this->Recipients[] = array('Address' => $Address, 'Name' => $Name, 'Type' => 'Send');
    5152  }
    5253
    53   function AddCc($Address, $Name)
     54  function AddCc(string $Address, string $Name): void
    5455  {
    5556    $this->Recipients[] = array('Address' => $Address, 'Name' => $Name, 'Type' => 'Copy');
    5657  }
    5758
    58   function AddBcc($Address, $Name)
     59  function AddBcc(string $Address, string $Name): void
    5960  {
    6061    $this->Recipients[] = array('Address' => $Address, 'Name' => $Name, 'Type' => 'HiddenCopy');
    6162  }
    6263
    63   function AddBody($Content, $MimeType = 'text/plain', $Charset = 'utf-8')
     64  function AddBody(string $Content, string $MimeType = 'text/plain', string $Charset = 'utf-8'): void
    6465  {
    6566    $this->Bodies[] = array('Content' => $Content, 'Type' => strtolower($MimeType),
     
    6768  }
    6869
    69   function Organization($org)
     70  function Organization(string $org): void
    7071  {
    7172    if (trim($org != '')) $this->xheaders['Organization'] = $org;
    7273  }
    7374
    74   function Priority($Priority)
     75  function Priority(int $Priority): bool
    7576  {
    7677    if (!intval($Priority)) return false;
    7778
    78     if (!isset($this->priorities[$Priority - 1])) return false;
    79 
    80     $this->xheaders['X-Priority'] = $this->priorities[$Priority - 1];
     79    if (!isset($this->Priorities[$Priority - 1])) return false;
     80
     81    $this->xheaders['X-Priority'] = $this->Priorities[$Priority - 1];
    8182    return true;
    8283  }
    8384
    84   function AttachFile($FileName, $FileType, $Disposition = DISPOSITION_ATTACHMENT)
     85  function AttachFile($FileName, $FileType, $Disposition = DISPOSITION_ATTACHMENT): void
    8586  {
    8687    $this->Attachments[] = array('FileName' => $FileName, 'FileType' => $FileType,
     
    8889  }
    8990
    90   function AttachData($FileName, $FileType, $Data, $Disposition = DISPOSITION_ATTACHMENT)
     91  function AttachData($FileName, $FileType, $Data, $Disposition = DISPOSITION_ATTACHMENT): void
    9192  {
    9293    $this->Attachments[] = array('FileName' => $FileName, 'FileType' => $FileType,
     
    9495  }
    9596
    96   function Send()
     97  function Send(): bool
    9798  {
    9899    if (count($this->Bodies) == 0) throw new Exception(T('Mail message need at least one text body'));
     
    144145    if ($this->Subject == '') throw new Exception(T('Mail message missing Subject'));
    145146
    146 
    147147    $res = mail($To, $this->Subject, $Body, $Headers);
    148148    return $res;
    149149  }
    150150
    151   function ValidEmail($Address)
    152   {
    153     if (ereg(".*<(.+)>", $Address, $regs)) $Address = $regs[1];
    154     if (ereg("^[^@  ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$", $Address))
     151  function ValidEmail(string $Address): bool
     152  {
     153    if (preg_match(".*<(.+)>", $Address, $regs)) $Address = $regs[1];
     154    if (preg_match("^[^@  ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$", $Address))
    155155      return true;
    156156      else return false;
    157157  }
    158158
    159   function CheckAdresses($Addresses)
     159  function CheckAdresses(array $Addresses): void
    160160  {
    161161    foreach ($Addresses as $Address)
    162162    {
    163163      if (!$this->ValidEmail($Address))
    164   throw new Exception(sprintf(T('Mail message invalid address %s'), $Address));
    165     }
    166   }
    167 
    168   private function ContentEncoding($Charset)
     164      {
     165        throw new Exception(sprintf(T('Mail message invalid address %s'), $Address));
     166      }
     167    }
     168  }
     169
     170  private function ContentEncoding($Charset): string
    169171  {
    170172    if ($Charset != CHARSET_ASCII) return '8bit';
     
    172174  }
    173175
    174   private function BuildAttachment($Body)
     176  private function BuildAttachment($Body): string
    175177  {
    176178    if (count($this->Attachments) > 0)
     
    206208  }
    207209
    208   private function BuildBody()
     210  private function BuildBody(): string
    209211  {
    210212    $Result = '';
     
    219221      $this->Headers['Content-Transfer-Encoding'] = $this->ContentEncoding($this->Bodies[0]['Charset']);
    220222    }
    221 
    222223
    223224    foreach ($this->Bodies as $Body)
  • trunk/Packages/Common/NetworkAddress.php

    r92 r95  
    11<?php
     2
     3define('IPV4_BIT_WIDTH', 32);
    24
    35class NetworkAddressIPv4
    46{
    5   var $Address;
    6   var $Prefix;
     7  public int $Address;
     8  public int $Prefix;
    79
    810  function __construct()
     
    1214  }
    1315
    14   function GetNetMask()
     16  function GetNetMask(): int
    1517  {
    16     return 0xffffffff ^ ((1 << (32 - $this->Prefix)) - 1);
     18    return ((1 << IPV4_BIT_WIDTH) - 1) ^ ((1 << (IPV4_BIT_WIDTH - $this->Prefix)) - 1);
    1719  }
    1820
    19   function AddressToString()
     21  function AddressToString(): string
    2022  {
    2123    return implode('.', array(($this->Address >> 24) & 255, ($this->Address >> 16) & 255, ($this->Address >> 8) & 255, ($this->Address & 255)));
    2224  }
    2325
    24   function AddressFromString($Value)
     26  function AddressFromString(string $Value): void
    2527  {
    2628    $Parts = explode('.', $Value);
     
    2830  }
    2931
    30   function GetRange()
     32  function GetRange(): array
    3133  {
    3234    $From = new NetworkAddressIPv4();
    3335    $From->Address = $this->Address;
    34     $From->Prefix = 32;
     36    $From->Prefix = IPV4_BIT_WIDTH;
    3537    $HostMask = 0xffffffff ^ $this->GetNetMask();
    3638    $To = new NetworkAddressIPv4();
    3739    $To->Address = $From->Address + $HostMask;
    38     $To->Prefix = 32;
     40    $To->Prefix = IPV4_BIT_WIDTH;
    3941    return array('From' => $From, 'To' => $To);
    4042  }
    4143
    42   function ChangePrefix($NewPrefix)
     44  function ChangePrefix(int $NewPrefix): void
    4345  {
    4446    $this->Prefix = $NewPrefix;
    45     if ($this->Prefix > 32) $this->Prefix = 32;
     47    if ($this->Prefix > IPV4_BIT_WIDTH) $this->Prefix = IPV4_BIT_WIDTH;
    4648    if ($this->Prefix < 0) $this->Prefix = 0;
    4749    $this->Address = $this->Address & $this->GetNetMask();
    4850  }
    4951
    50   function Contain($Address)
     52  function Contain(NetworkAddressIPv4 $Address): bool
    5153  {
    5254    $UpperNetmask = $this->GetNetMask();
    5355    if (($this->Prefix < $Address->Prefix) and (($Address->Address & $UpperNetmask) == ($this->Address & $UpperNetmask))) $Result = true;
    5456      else $Result = false;
    55     //echo($Address->AddressToString().'/'.$Address->Prefix.' in '.$this->AddressToString().'/'.$this->Prefix.' '.$Result."\n");
    5657    return $Result;
    5758  }
    5859}
    5960
     61define('IPV6_BIT_WIDTH', 128);
     62
    6063class NetworkAddressIPv6
    6164{
    62   var $Address;
    63   var $Prefix;
     65  public string $Address;
     66  public int $Prefix;
    6467
    6568  function __construct()
     
    6972  }
    7073
    71   function AddressToString()
     74  function GetNetMask(): string
     75  {
     76    return Int128Xor(Int128Sub(Int128Shl(IntToInt128(1), IntToInt128(IPV6_BIT_WIDTH)), IntToInt128(1)),
     77      Int128Sub(Int128Shl(IntToInt128(1), IntToInt128(IPV6_BIT_WIDTH - $this->Prefix)), IntToInt128(1)));
     78  }
     79
     80  function AddressToString(): string
    7281  {
    7382    return inet_ntop($this->Address);
    7483  }
    7584
    76   function AddressFromString($Value)
     85  function AddressFromString(string $Value)
    7786  {
    7887    $this->Address = inet_pton($Value);
    7988  }
    8089
    81   function GetOctets()
     90  function ChangePrefix(int $NewPrefix): void
     91  {
     92    $this->Prefix = $NewPrefix;
     93    if ($this->Prefix > IPV6_BIT_WIDTH) $this->Prefix = IPV6_BIT_WIDTH;
     94    if ($this->Prefix < 0) $this->Prefix = 0;
     95    $this->Address = Int128And($this->Address, $this->GetNetMask());
     96  }
     97
     98  function GetOctets(): array
    8299  {
    83100    $Result = array();
     
    92109  }
    93110
    94   function EncodeMAC($MAC)
     111  function EncodeMAC(string $MAC): void
    95112  {
    96113    $MAC = explode(':', $MAC);
     
    107124  }
    108125
     126  function Contain(NetworkAddressIPv6 $Address): bool
     127  {
     128    $UpperNetmask = $this->GetNetMask();
     129    if (($this->Prefix < $Address->Prefix) and ((Int128Equal(Int128And($Address->Address, $UpperNetmask), Int128And($this->Address, $UpperNetmask))))) $Result = true;
     130      else $Result = false;
     131    return $Result;
     132  }
    109133}
  • trunk/Packages/Common/Page.php

    r92 r95  
    33class Page extends View
    44{
    5   var $Title;
    6   var $ParentClass;
    7   var $RawPage;
    8   var $OnSystemMessage;
     5  public string $Title;
     6  public string $Description;
     7  public string $ParentClass;
     8  public bool $RawPage;
     9  public $OnSystemMessage;
     10  public string $Load;
     11  public string $Unload;
    912
    1013  function __construct(System $System)
     
    1316    $this->RawPage = false;
    1417    $this->OnSystemMessage = array();
     18    $this->Title = "";
     19    $this->Description = "";
     20    $this->ParentClass = "";
    1521  }
    1622
    17   function Show()
     23  function Show(): string
    1824  {
    1925    return '';
    2026  }
    2127
    22   function GetOutput()
     28  function GetOutput(): string
    2329  {
    2430    $Output = $this->Show();
     
    2632  }
    2733
    28   function SystemMessage($Title, $Text)
     34  function SystemMessage(string $Title, string $Text): string
    2935  {
    3036    return call_user_func_array($this->OnSystemMessage, array($Title, $Text));
  • trunk/Packages/Common/PrefixMultiplier.php

    r92 r95  
    7272class PrefixMultiplier
    7373{
    74   function TruncateDigits($Value, $Digits = 4)
     74  function TruncateDigits($Value, $Digits = 4): string
    7575  {
    7676    for ($II = 2; $II > -6; $II--)
     
    8787  }
    8888
    89   function Add($Value, $Unit, $Digits = 4, $PrefixType = 'Decimal')
     89  function Add($Value, $Unit, $Digits = 4, $PrefixType = 'Decimal'): string
    9090  {
    9191    global $PrefixMultipliers;
  • trunk/Packages/Common/Process.php

    r93 r95  
    33class Process
    44{
    5   var $Command;
    6   var $Handle;
    7   var $Pipes;
    8   var $Environment;
    9   var $WorkingDir;
    10  
     5  public string $Command;
     6  public $Handle;
     7  public array $Pipes;
     8  public array $Environment;
     9  public ?string $WorkingDir;
     10
    1111  function __construct()
    1212  {
     
    1717    $this->WorkingDir = null;
    1818  }
    19  
    20   function Start()
     19
     20  function Start(): void
    2121  {
    22     if(!$this->IsRunning())
     22    if (!$this->IsRunning())
    2323    {
    2424      $DescriptorSpec = array(
     
    2828      );
    2929
    30       $this->Handle = proc_open($this->Command, $DescriptorSpec, $this->Pipes, 
     30      $this->Handle = proc_open($this->Command, $DescriptorSpec, $this->Pipes,
    3131        $this->WorkingDir, $this->Environment);
    3232      stream_set_blocking($this->Pipes[0], FALSE);
     
    3535    }
    3636  }
    37  
    38   function Stop()
     37
     38  function Stop(): void
    3939  {
    40     if($this->IsRunning())
     40    if ($this->IsRunning())
    4141    {
    4242      proc_close($this->Handle);
     
    4444    }
    4545  }
    46  
    47   function IsRunning()
     46
     47  function IsRunning(): bool
    4848  {
    49     return(is_resource($this->Handle));
     49    return is_resource($this->Handle);
    5050  }
    5151}
  • trunk/Packages/Common/RSS.php

    r92 r95  
    33class RSS
    44{
    5   var $Charset;
    6   var $Title;
    7   var $Link;
    8   var $Description;
    9   var $WebmasterEmail;
    10   var $Items;
     5  public string $Charset;
     6  public string $Title;
     7  public string $Link;
     8  public string $Description;
     9  public string $WebmasterEmail;
     10  public array $Items;
    1111
    1212  function __construct()
    1313  {
    1414    $this->Charset = 'utf8';
     15    $this->Title = '';
     16    $this->Link = '';
     17    $this->Description = '';
     18    $this->WebmasterEmail = '';
    1519    $this->Items = array();
    1620  }
    1721
    18   function Generate()
     22  function Generate(): string
    1923  {
    2024    $Result = '<?xml version="1.0" encoding="'.$this->Charset.'" ?>'."\n". //<?
  • trunk/Packages/Common/Table.php

    r94 r95  
    11<?php
    22
    3 class Control extends Base
     3class Control
    44{
    5   var $Name;
     5  public string $Name;
    66
    7   function Show()
     7  function Show(): string
    88  {
    99    return '';
     
    1313class Table
    1414{
    15   function GetCell($Y, $X)
     15  function GetCell($Y, $X): string
    1616  {
    1717    return '';
     
    2626  }
    2727
    28   function RowsCount()
     28  function RowsCount(): int
    2929  {
    3030    return 0;
     
    3434class TableMemory extends Table
    3535{
    36   var $Cells;
     36  public array $Cells;
    3737
    38   function GetCell($Y, $X)
     38  function GetCell($Y, $X): string
    3939  {
    4040    return $this->Cells[$Y][$X];
    4141  }
    4242
    43   function RowsCount()
     43  function RowsCount(): int
    4444  {
    4545    return count($this->Cells);
     
    4949class TableSQL extends Table
    5050{
    51   var $Query;
    52   var $Database;
    53   var $Cells;
     51  public string $Query;
     52  public Database $Database;
     53  public array $Cells;
    5454
    55   function GetCell($Y, $X)
     55  function GetCell($Y, $X): string
    5656  {
    5757    return $this->Cells[$Y][$X];
     
    7373  }
    7474
    75   function RowsCount()
     75  function RowsCount(): int
    7676  {
    7777    return count($this->Cells);
     
    8181class TableColumn
    8282{
    83   var $Name;
    84   var $Title;
     83  public string $Name;
     84  public string $Title;
    8585}
    8686
    8787class VisualTable extends Control
    8888{
    89   var $Cells;
    90   var $Columns;
    91   var $OrderSQL;
    92   var $OrderColumn;
    93   var $OrderDirection;
    94   var $OrderArrowImage;
    95   var $DefaultColumn;
    96   var $DefaultOrder;
    97   var $Table;
    98   var $Style;
     89  public array $Cells;
     90  public array $Columns;
     91  public string $OrderSQL;
     92  public string $OrderColumn;
     93  public int $OrderDirection;
     94  public array $OrderArrowImage;
     95  public string $DefaultColumn;
     96  public int $DefaultOrder;
     97  public TableMemory $Table;
     98  public string $Style;
    9999
    100   function __construct(Application $System)
     100  function __construct()
    101101  {
    102     parent::__construct($System);
     102    global $System;
    103103
    104104    $this->Columns = array();
    105105    $this->Table = new TableMemory();
    106106    $this->OrderDirSQL = array('ASC', 'DESC');
    107     $this->OrderArrowImage = array($this->System->Link('/images/sort_asc.png'),
    108       $this->System->Link('/images/sort_desc.png'));
     107    $this->OrderArrowImage = array($System->Link('/images/sort_asc.png'),
     108      $System->Link('/images/sort_desc.png'));
    109109    $this->DefaultOrder = 0;
    110110    $this->Style = 'BaseTable';
     
    126126  }
    127127
    128   function Show()
     128  function Show(): string
    129129  {
    130130    $Output = '<table class="'.$this->Style.'">';
     
    148148  }
    149149
    150   function GetOrderHeader()
     150  function GetOrderHeader(): string
    151151  {
    152152    if (array_key_exists('OrderCol', $_GET)) $_SESSION['OrderCol'] = $_GET['OrderCol'];
  • trunk/Packages/Common/UTF8.php

    r92 r95  
    526526  }
    527527
    528   function ToUTF8($String, $Charset = 'iso2')
     528  function ToUTF8string(string $String, string $Charset = 'iso2'): string
    529529  {
    530530    $Result = '';
     
    540540  }
    541541
    542   function FromUTF8($String, $Charset = 'iso2')
     542  function FromUTF8(string $String, string $Charset = 'iso2'): string
    543543  {
    544544    $Result = '';
     
    546546    for ($I = 0; $I < strlen($String); $I++)
    547547    {
    548       if (ord($String{$I}) & 0x80) // UTF control character
     548      if (ord($String[$I]) & 0x80) // UTF control character
    549549      {
    550         if (ord($String{$I}) & 0x40) // First
     550        if (ord($String[$I]) & 0x40) // First
    551551        {
    552552          if ($UTFPrefix != '') $Result .= chr(array_search($UTFPrefix, $this->CharTable[$Charset]));
    553           $UTFPrefix = $String{$I};
     553          $UTFPrefix = $String[$I];
    554554        }
    555         else $UTFPrefix .= $String{$I}; // Next
     555        else $UTFPrefix .= $String[$I]; // Next
    556556      } else
    557557      {
    558558        if ($UTFPrefix != '') $Result .= chr(array_search($UTFPrefix, $this->CharTable[$Charset]));
    559559        $UTFPrefix = '';
    560         $Result .= $String{$I};
     560        $Result .= $String[$I];
    561561      }
    562562    }
  • trunk/Packages/Common/Update.php

    r92 r95  
    33class UpdateManager
    44{
    5   var $Revision;
    6   var $Trace;
    7   var $VersionTable;
    8   /* @var Database */
    9   var $Database;
    10   var $InstallMethod;
     5  public int $Revision;
     6  public array $Trace;
     7  public string $VersionTable;
     8  public Database $Database;
     9  public string $InstallMethod;
    1110
    1211  function __construct()
     
    1918  }
    2019
    21   function GetDbVersion()
     20  function GetDbVersion(): ?int
    2221  {
    2322    $DbResult = $this->Database->select($this->VersionTable, '*', 'Id=1');
     
    2625  }
    2726
    28   function IsInstalled()
     27  function IsInstalled(): bool
    2928  {
    3029    $DbResult = $this->Database->query('SHOW TABLES LIKE "'.$this->VersionTable.'"');
     
    3231  }
    3332
    34   function IsUpToDate()
     33  function IsUpToDate(): bool
    3534  {
    3635    return $this->Revision <= $this->GetDbVersion();
    3736  }
    3837
    39   function Upgrade()
     38  function Upgrade(): string
    4039  {
    4140    $DbRevision = $this->GetDbVersion();
     
    5958  }
    6059
    61   function Install()
     60  function Install(): void
    6261  {
    6362    $InstallMethod = $this->InstallMethod;
    6463    $InstallMethod($this);
    65     $this->Update();
    6664  }
    6765
    68   function Uninstall()
     66  function Uninstall(): void
    6967  {
    70 
    7168  }
    7269
    73   function InsertSampleData()
     70  function InsertSampleData(): void
    7471  {
    7572    $InstallMethod = $this->InsertSampleDataMethod;
     
    7774  }
    7875
    79   function Execute($Query)
     76  function Execute(string $Query): DatabaseResult
    8077  {
    8178    echo($Query.';<br/>');
  • trunk/Point.php

    r92 r95  
    33class Point
    44{
    5   var $X;
    6   var $Y;
     5  public int $X;
     6  public int $Y;
    77
    8   function __construct($X, $Y)
     8  function __construct(int $X, int $Y)
    99  {
    1010    $this->X = $X;
     
    1313}
    1414
    15 function NewPoint($X, $Y)
     15function NewPoint(int $X, int $Y): Point
    1616{
    1717  $Point = new Point($X, $Y);
     
    2020
    2121/* Linear interpolation between two points */
    22 function Interpolation(Point $P1, Point $P2, $X)
     22function Interpolation(Point $P1, Point $P2, $X): float
    2323{
    2424  $Y = ($P2->Y - $P1->Y) / ($P2->X - $P1->X) * ($X - $P1->X) + $P1->Y;
  • trunk/Types.php

    r92 r95  
    33$Types = array(
    44  'Boolean' => array(
    5  
    65  ),
    76  'String' => array(
    8  
    97  ),
    108  'Integer' => array(
    11  
    129  ),
    1310);
  • trunk/add.php

    r92 r95  
    1616  if (array_key_exists('Time', $_GET)) $Time = $_GET['Time'] * 1;
    1717  AddValue(addslashes($_GET['MeasureId']), addslashes($_GET['Value']), $Time);
    18   $AddedValues = $AddedValues + 1; 
     18  $AddedValues = $AddedValues + 1;
    1919}
    2020
     
    2626  if (array_key_exists('Time'.$I, $_GET)) $Time = $_GET['Time'.$I] * 1;
    2727  AddValue(addslashes($_GET['MeasureId'.$I]), addslashes($_GET['Value'.$I]), $Time);
    28   $AddedValues = $AddedValues + 1; 
     28  $AddedValues = $AddedValues + 1;
    2929  $I++;
    3030}
     
    3232if ($AddedValues == 0) echo('Nebyly zadány potřebné parametry MeasureId a Value.'."\n");
    3333
    34 function AddValue($MeasureId, $Value, $Time)
     34function AddValue(int $MeasureId, float $Value, int $Time): void
    3535{
    3636  global $Core;
Note: See TracChangeset for help on using the changeset viewer.